diff --git a/config/env/development.env b/config/env/development.env index f8b6b027b..f4948cd56 100644 --- a/config/env/development.env +++ b/config/env/development.env @@ -107,8 +107,6 @@ FLUXER_EMAIL_SMTP_PORT=1025 FLUXER_EMAIL_SMTP_USERNAME=dev FLUXER_EMAIL_SMTP_PASSWORD=dev FLUXER_EMAIL_SMTP_SECURE=false -FLUXER_CAPTCHA_ENABLED=false -FLUXER_CAPTCHA_PROVIDER=none FLUXER_SEARCH_ENGINE=meilisearch FLUXER_SEARCH_URL=http://meilisearch:7700 FLUXER_SEARCH_API_KEY=fluxer-dev-meilisearch diff --git a/deploy/self-hosting/.env.example b/deploy/self-hosting/.env.example index a87dc1fca..c2877dbc3 100644 --- a/deploy/self-hosting/.env.example +++ b/deploy/self-hosting/.env.example @@ -221,12 +221,6 @@ FLUXER_EMAIL_SMTP_USERNAME= FLUXER_EMAIL_SMTP_PASSWORD= FLUXER_EMAIL_SMTP_SECURE=true -FLUXER_CAPTCHA_ENABLED=false -FLUXER_CAPTCHA_PROVIDER=none -FLUXER_CAPTCHA_HCAPTCHA_SITE_KEY= -FLUXER_CAPTCHA_HCAPTCHA_SECRET_KEY= -FLUXER_CAPTCHA_TURNSTILE_SITE_KEY= -FLUXER_CAPTCHA_TURNSTILE_SECRET_KEY= FLUXER_DISCOVERY_ENABLED=true # Container memory. These are ceilings, not allocations, and the defaults suit a diff --git a/deploy/self-hosting/docker-compose.yml b/deploy/self-hosting/docker-compose.yml index 20472a9c9..6bbdcbfe0 100644 --- a/deploy/self-hosting/docker-compose.yml +++ b/deploy/self-hosting/docker-compose.yml @@ -73,12 +73,6 @@ x-fluxer-env: &fluxer-env FLUXER_EMAIL_SMTP_PASSWORD: ${FLUXER_EMAIL_SMTP_PASSWORD:-} FLUXER_EMAIL_SMTP_SECURE: ${FLUXER_EMAIL_SMTP_SECURE:-true} - FLUXER_CAPTCHA_ENABLED: ${FLUXER_CAPTCHA_ENABLED:-false} - FLUXER_CAPTCHA_PROVIDER: ${FLUXER_CAPTCHA_PROVIDER:-none} - FLUXER_CAPTCHA_HCAPTCHA_SITE_KEY: ${FLUXER_CAPTCHA_HCAPTCHA_SITE_KEY:-} - FLUXER_CAPTCHA_HCAPTCHA_SECRET_KEY: ${FLUXER_CAPTCHA_HCAPTCHA_SECRET_KEY:-} - FLUXER_CAPTCHA_TURNSTILE_SITE_KEY: ${FLUXER_CAPTCHA_TURNSTILE_SITE_KEY:-} - FLUXER_CAPTCHA_TURNSTILE_SECRET_KEY: ${FLUXER_CAPTCHA_TURNSTILE_SECRET_KEY:-} FLUXER_STRIPE_ENABLED: "${FLUXER_STRIPE_ENABLED:-false}" FLUXER_NCMEC_ENABLED: "${FLUXER_NCMEC_ENABLED:-false}" FLUXER_CLAMAV_ENABLED: "${FLUXER_CLAMAV_ENABLED:-false}" diff --git a/fluxer_admin/openapi-admin.json b/fluxer_admin/openapi-admin.json index c363676ad..f1a124b12 100644 --- a/fluxer_admin/openapi-admin.json +++ b/fluxer_admin/openapi-admin.json @@ -10629,7 +10629,7 @@ "gateway_rollout": {"$ref": "#/components/schemas/GatewayRolloutConfigResponse"}, "push_relay": {"$ref": "#/components/schemas/PushRelayConfigResponse"}, "domain_migration": {"$ref": "#/components/schemas/DomainMigrationConfigResponse"}, - "altcha_captcha": {"$ref": "#/components/schemas/AltchaCaptchaConfigResponse"}, + "captcha": {"$ref": "#/components/schemas/CaptchaConfigResponse"}, "experiment_delivery": {"$ref": "#/components/schemas/ExperimentDeliveryConfigResponse"}, "registration": { "type": "object", @@ -10851,31 +10851,6 @@ "required": ["api_key_set", "effective_available"], "additionalProperties": false }, - "captcha": { - "type": "object", - "properties": { - "provider": { - "nullable": true, - "allOf": [{"$ref": "#/components/schemas/InstanceCaptchaProviderSchema"}] - }, - "effective_provider": {"$ref": "#/components/schemas/InstanceCaptchaProviderSchema"}, - "hcaptcha_site_key": {"nullable": true, "type": "string"}, - "hcaptcha_secret_key_set": {"type": "boolean"}, - "turnstile_site_key": {"nullable": true, "type": "string"}, - "turnstile_secret_key_set": {"type": "boolean"}, - "effective_enabled": {"type": "boolean"} - }, - "required": [ - "provider", - "effective_provider", - "hcaptcha_site_key", - "hcaptcha_secret_key_set", - "turnstile_site_key", - "turnstile_secret_key_set", - "effective_enabled" - ], - "additionalProperties": false - }, "email": { "type": "object", "properties": { @@ -10938,7 +10913,7 @@ "additionalProperties": false } }, - "required": ["gif", "youtube", "captcha", "email", "bluesky"], + "required": ["gif", "youtube", "email", "bluesky"], "additionalProperties": false }, "media": { @@ -11052,7 +11027,7 @@ "gateway_rollout", "push_relay", "domain_migration", - "altcha_captcha", + "captcha", "experiment_delivery", "registration", "self_hosted", @@ -11189,10 +11164,7 @@ "nullable": true, "allOf": [{"$ref": "#/components/schemas/DomainMigrationConfigUpdateRequest"}] }, - "altcha_captcha": { - "nullable": true, - "allOf": [{"$ref": "#/components/schemas/AltchaCaptchaConfigUpdateRequest"}] - }, + "captcha": {"nullable": true, "allOf": [{"$ref": "#/components/schemas/CaptchaConfigUpdateRequest"}]}, "experiment_delivery": { "nullable": true, "allOf": [{"$ref": "#/components/schemas/ExperimentDeliveryConfigUpdateRequest"}] @@ -11275,20 +11247,6 @@ "type": "object", "properties": {"api_key": {"nullable": true, "type": "string", "maxLength": 4096}} }, - "captcha": { - "nullable": true, - "type": "object", - "properties": { - "provider": { - "nullable": true, - "allOf": [{"$ref": "#/components/schemas/InstanceCaptchaProviderSchema"}] - }, - "hcaptcha_site_key": {"nullable": true, "type": "string", "maxLength": 4096}, - "hcaptcha_secret_key": {"nullable": true, "type": "string", "maxLength": 4096}, - "turnstile_site_key": {"nullable": true, "type": "string", "maxLength": 4096}, - "turnstile_secret_key": {"nullable": true, "type": "string", "maxLength": 4096} - } - }, "email": { "nullable": true, "type": "object", @@ -15256,7 +15214,6 @@ "legacy_prices": {"nullable": true, "allOf": [{"$ref": "#/components/schemas/BillingLegacyPricesSchema"}]} } }, - "InstanceCaptchaProviderSchema": {"type": "string", "enum": ["hcaptcha", "turnstile", "none"]}, "InstanceRegistrationModeSchema": { "description": "Registration mode", "x-enumNames": ["open", "approval", "closed"], @@ -15275,31 +15232,12 @@ "poll_jitter_percent": {"type": "integer", "minimum": 0, "maximum": 50} } }, - "AltchaCaptchaConfigUpdateRequest": { + "CaptchaConfigUpdateRequest": { "type": "object", "properties": { "enabled": {"type": "boolean"}, - "rollout_basis_points": {"type": "integer", "minimum": 0, "maximum": 10000}, - "rollout_salt": {"type": "string", "minLength": 1, "maxLength": 64, "pattern": "^[\\x20-\\x7e]+$"}, - "included_user_ids": { - "maxItems": 1000, - "type": "array", - "items": {"type": "string", "pattern": "^\\d{1,20}$"} - }, - "included_guild_ids": { - "maxItems": 1000, - "type": "array", - "items": {"type": "string", "pattern": "^\\d{1,20}$"} - }, - "include_premium_users": {"type": "boolean"}, - "excluded_user_ids": { - "maxItems": 1000, - "type": "array", - "items": {"type": "string", "pattern": "^\\d{1,20}$"} - }, - "anonymous_enabled": {"type": "boolean"}, - "cost": {"type": "integer", "minimum": 1000, "maximum": 100000}, - "max_counter": {"type": "integer", "minimum": 100, "maximum": 1000000} + "cost": {"type": "integer", "minimum": 1000, "maximum": 20000}, + "max_counter": {"type": "integer", "minimum": 100, "maximum": 20000} } }, "DomainMigrationConfigUpdateRequest": { @@ -15431,55 +15369,14 @@ "required": ["poll_interval_seconds", "poll_jitter_percent"], "additionalProperties": false }, - "AltchaCaptchaConfigResponse": { + "CaptchaConfigResponse": { "type": "object", "properties": { - "enabled": {"default": false, "type": "boolean"}, - "config_version": {"default": 0, "type": "integer", "minimum": 0, "maximum": 9007199254740991}, - "rollout_basis_points": {"default": 0, "type": "integer", "minimum": 0, "maximum": 10000}, - "rollout_salt": { - "default": "altcha-captcha-v1", - "type": "string", - "minLength": 1, - "maxLength": 64, - "pattern": "^[\\x20-\\x7e]+$" - }, - "included_user_ids": { - "default": [], - "maxItems": 1000, - "type": "array", - "items": {"type": "string", "pattern": "^\\d{1,20}$"} - }, - "included_guild_ids": { - "default": [], - "maxItems": 1000, - "type": "array", - "items": {"type": "string", "pattern": "^\\d{1,20}$"} - }, - "include_premium_users": {"default": false, "type": "boolean"}, - "excluded_user_ids": { - "default": [], - "maxItems": 1000, - "type": "array", - "items": {"type": "string", "pattern": "^\\d{1,20}$"} - }, - "anonymous_enabled": {"default": false, "type": "boolean"}, - "cost": {"default": 5000, "type": "integer", "minimum": 1000, "maximum": 100000}, - "max_counter": {"default": 10000, "type": "integer", "minimum": 100, "maximum": 1000000} + "enabled": {"default": true, "type": "boolean"}, + "cost": {"default": 5000, "type": "integer", "minimum": 1000, "maximum": 20000}, + "max_counter": {"default": 1000, "type": "integer", "minimum": 100, "maximum": 20000} }, - "required": [ - "enabled", - "config_version", - "rollout_basis_points", - "rollout_salt", - "included_user_ids", - "included_guild_ids", - "include_premium_users", - "excluded_user_ids", - "anonymous_enabled", - "cost", - "max_counter" - ], + "required": ["enabled", "cost", "max_counter"], "additionalProperties": false }, "DomainMigrationConfigResponse": { diff --git a/fluxer_admin/src/api/types/instance_config.rs b/fluxer_admin/src/api/types/instance_config.rs index e9b9e7312..f26210636 100644 --- a/fluxer_admin/src/api/types/instance_config.rs +++ b/fluxer_admin/src/api/types/instance_config.rs @@ -25,7 +25,7 @@ pub struct InstanceConfigResponse { #[serde(default)] pub domain_migration: DomainMigrationConfigResponse, #[serde(default)] - pub altcha_captcha: AltchaCaptchaConfigResponse, + pub captcha: CaptchaConfigResponse, #[serde(default)] pub experiment_delivery: ExperimentDeliveryConfigResponse, #[serde(default)] @@ -100,8 +100,6 @@ pub struct InstanceIntegrationsResponse { #[serde(default)] pub youtube: InstanceYoutubeIntegrationResponse, #[serde(default)] - pub captcha: InstanceCaptchaIntegrationResponse, - #[serde(default)] pub email: InstanceEmailIntegrationResponse, #[serde(default)] pub bluesky: InstanceBlueskyIntegrationResponse, @@ -122,21 +120,6 @@ pub struct InstanceYoutubeIntegrationResponse { pub effective_available: bool, } -#[derive(Clone, Debug, Default, Deserialize, Serialize)] -pub struct InstanceCaptchaIntegrationResponse { - pub provider: Option, - #[serde(default)] - pub effective_provider: String, - pub hcaptcha_site_key: Option, - #[serde(default)] - pub hcaptcha_secret_key_set: bool, - pub turnstile_site_key: Option, - #[serde(default)] - pub turnstile_secret_key_set: bool, - #[serde(default)] - pub effective_enabled: bool, -} - #[derive(Clone, Debug, Default, Deserialize, Serialize)] pub struct InstanceEmailIntegrationResponse { pub enabled: Option, @@ -440,9 +423,8 @@ impl VoiceE2eeScope { pub const EXPERIMENT_MAX_TARGETED_USERS: usize = 1_000; pub const DOMAIN_MIGRATION_DEFAULT_SALT: &str = "domain-migration-v1"; -pub const ALTCHA_CAPTCHA_DEFAULT_SALT: &str = "altcha-captcha-v1"; -pub const ALTCHA_CAPTCHA_COST_RANGE: std::ops::RangeInclusive = 1_000..=100_000; -pub const ALTCHA_CAPTCHA_MAX_COUNTER_RANGE: std::ops::RangeInclusive = 100..=1_000_000; +pub const CAPTCHA_COST_RANGE: std::ops::RangeInclusive = 1_000..=20_000; +pub const CAPTCHA_MAX_COUNTER_RANGE: std::ops::RangeInclusive = 100..=20_000; #[derive(Clone, Debug, Default, Deserialize, Serialize)] #[serde(default)] @@ -514,57 +496,27 @@ pub struct DomainMigrationConfigUpdateRequest { #[derive(Clone, Debug, Deserialize, Serialize)] #[serde(default)] -pub struct AltchaCaptchaConfigResponse { +pub struct CaptchaConfigResponse { pub enabled: bool, - pub config_version: u64, - pub rollout_basis_points: u32, - pub rollout_salt: String, - pub included_user_ids: Vec, - pub included_guild_ids: Vec, - pub include_premium_users: bool, - pub excluded_user_ids: Vec, - pub anonymous_enabled: bool, pub cost: u32, pub max_counter: u32, } -impl Default for AltchaCaptchaConfigResponse { +impl Default for CaptchaConfigResponse { fn default() -> Self { Self { - enabled: false, - config_version: 0, - rollout_basis_points: 0, - rollout_salt: ALTCHA_CAPTCHA_DEFAULT_SALT.to_owned(), - included_user_ids: Vec::new(), - included_guild_ids: Vec::new(), - include_premium_users: false, - excluded_user_ids: Vec::new(), - anonymous_enabled: false, + enabled: true, cost: 5_000, - max_counter: 10_000, + max_counter: 1_000, } } } #[derive(Clone, Debug, Default, Serialize)] -pub struct AltchaCaptchaConfigUpdateRequest { +pub struct CaptchaConfigUpdateRequest { #[serde(skip_serializing_if = "Option::is_none")] pub enabled: Option, #[serde(skip_serializing_if = "Option::is_none")] - pub rollout_basis_points: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub rollout_salt: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub included_user_ids: Option>, - #[serde(skip_serializing_if = "Option::is_none")] - pub included_guild_ids: Option>, - #[serde(skip_serializing_if = "Option::is_none")] - pub include_premium_users: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub excluded_user_ids: Option>, - #[serde(skip_serializing_if = "Option::is_none")] - pub anonymous_enabled: Option, - #[serde(skip_serializing_if = "Option::is_none")] pub cost: Option, #[serde(skip_serializing_if = "Option::is_none")] pub max_counter: Option, @@ -688,7 +640,7 @@ pub struct InstanceConfigUpdateRequest { #[serde(skip_serializing_if = "Option::is_none")] pub domain_migration: Option, #[serde(skip_serializing_if = "Option::is_none")] - pub altcha_captcha: Option, + pub captcha: Option, #[serde(skip_serializing_if = "Option::is_none")] pub experiment_delivery: Option, #[serde(skip_serializing_if = "Option::is_none")] @@ -726,8 +678,6 @@ pub struct InstanceIntegrationsUpdateRequest { #[serde(skip_serializing_if = "Option::is_none")] pub youtube: Option, #[serde(skip_serializing_if = "Option::is_none")] - pub captcha: Option, - #[serde(skip_serializing_if = "Option::is_none")] pub email: Option, #[serde(skip_serializing_if = "Option::is_none")] pub bluesky: Option, @@ -745,20 +695,6 @@ pub struct InstanceYoutubeIntegrationUpdateRequest { pub api_key: Option, } -#[derive(Clone, Debug, Default, Serialize)] -pub struct InstanceCaptchaIntegrationUpdateRequest { - #[serde(skip_serializing_if = "Option::is_none")] - pub provider: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub hcaptcha_site_key: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub hcaptcha_secret_key: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub turnstile_site_key: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub turnstile_secret_key: Option, -} - #[derive(Clone, Debug, Default, Serialize)] pub struct InstanceEmailIntegrationUpdateRequest { #[serde(skip_serializing_if = "Option::is_none")] @@ -998,27 +934,25 @@ mod tests { use serde_json::json; #[test] - fn default_instance_experiment_config_matches_the_published_contract() { + fn default_instance_config_sections_match_the_published_contract() { let schema: serde_json::Value = serde_json::from_str(include_str!("../../../openapi-admin.json")) .expect("admin schema"); let domain_migration = serde_json::from_value::(json!({})) .expect("default domain migration config"); - let altcha_captcha = serde_json::from_value::(json!({})) - .expect("default altcha captcha config"); + let captcha = serde_json::from_value::(json!({})) + .expect("default captcha config"); let delivery = serde_json::from_value::(json!({})) .expect("default delivery config"); let domain_migration = serde_json::to_value(domain_migration).expect("serializable domain migration config"); - let altcha_captcha = - serde_json::to_value(altcha_captcha).expect("serializable altcha captcha config"); + let captcha = serde_json::to_value(captcha).expect("serializable captcha config"); let delivery = serde_json::to_value(delivery).expect("serializable delivery config"); let generated_domain_migration: generated_types::DomainMigrationConfigResponse = serde_json::from_value(domain_migration.clone()) .expect("generated domain migration config contract"); - let generated_altcha_captcha: generated_types::AltchaCaptchaConfigResponse = - serde_json::from_value(altcha_captcha.clone()) - .expect("generated altcha captcha config contract"); + let generated_captcha: generated_types::CaptchaConfigResponse = + serde_json::from_value(captcha.clone()).expect("generated captcha config contract"); let generated_delivery: generated_types::ExperimentDeliveryConfigResponse = serde_json::from_value(delivery.clone()).expect("generated delivery config contract"); assert_eq!( @@ -1027,9 +961,8 @@ mod tests { domain_migration ); assert_eq!( - serde_json::to_value(generated_altcha_captcha) - .expect("serializable generated altcha captcha config"), - altcha_captcha + serde_json::to_value(generated_captcha).expect("serializable generated captcha config"), + captcha ); assert_eq!( serde_json::to_value(generated_delivery) @@ -1038,7 +971,7 @@ mod tests { ); for (name, value) in [ ("DomainMigrationConfigResponse", domain_migration), - ("AltchaCaptchaConfigResponse", altcha_captcha), + ("CaptchaConfigResponse", captcha), ("ExperimentDeliveryConfigResponse", delivery), ] { for (field, value) in value.as_object().expect("config object") { diff --git a/fluxer_admin/src/routes/system_actions.rs b/fluxer_admin/src/routes/system_actions.rs index 17eeca14f..23a6170cb 100644 --- a/fluxer_admin/src/routes/system_actions.rs +++ b/fluxer_admin/src/routes/system_actions.rs @@ -4,15 +4,14 @@ use crate::{ api::{ client::AdminApiClient, types::{ - ALTCHA_CAPTCHA_COST_RANGE, ALTCHA_CAPTCHA_MAX_COUNTER_RANGE, - AltchaCaptchaConfigUpdateRequest, AppBrandingConfigUpdateRequest, - AppLegalConfigUpdateRequest, AppPublicConfigUpdateRequest, - AppRegistrationConfigUpdateRequest, AppSetupConfigUpdateRequest, - CreateRegistrationUrlRequest, DomainMigrationConfigUpdateRequest, - EXPERIMENT_MAX_TARGETED_USERS, ExperimentDeliveryConfigUpdateRequest, - GatewayRolloutConfigUpdateRequest, GatewayRolloutMode, - InstanceAttachmentDecayUpdateRequest, InstanceBlueskyIntegrationUpdateRequest, - InstanceBlueskyKeyIntegrationUpdateRequest, InstanceCaptchaIntegrationUpdateRequest, + AppBrandingConfigUpdateRequest, AppLegalConfigUpdateRequest, + AppPublicConfigUpdateRequest, AppRegistrationConfigUpdateRequest, + AppSetupConfigUpdateRequest, CAPTCHA_COST_RANGE, CAPTCHA_MAX_COUNTER_RANGE, + CaptchaConfigUpdateRequest, CreateRegistrationUrlRequest, + DomainMigrationConfigUpdateRequest, EXPERIMENT_MAX_TARGETED_USERS, + ExperimentDeliveryConfigUpdateRequest, GatewayRolloutConfigUpdateRequest, + GatewayRolloutMode, InstanceAttachmentDecayUpdateRequest, + InstanceBlueskyIntegrationUpdateRequest, InstanceBlueskyKeyIntegrationUpdateRequest, InstanceConfigUpdateRequest, InstanceEmailIntegrationUpdateRequest, InstanceEmailSmtpIntegrationUpdateRequest, InstanceEmailSmtpTestRequest, InstanceGifIntegrationUpdateRequest, InstanceIntegrationsUpdateRequest, @@ -221,7 +220,7 @@ pub async fn instance_config_post( Ok(update) => instance_config_result(client.update_instance_config(&update).await), Err(message) => FlashData::error(message), }, - "update_altcha_captcha" => match build_altcha_captcha_update(&form) { + "update_captcha" => match build_captcha_update(&form) { Ok(update) => instance_config_result(client.update_instance_config(&update).await), Err(message) => FlashData::error(message), }, @@ -610,50 +609,23 @@ fn build_domain_migration_update( }) } -fn build_altcha_captcha_update( - form: &MultiValueForm, -) -> Result { +fn build_captcha_update(form: &MultiValueForm) -> Result { Ok(InstanceConfigUpdateRequest { - altcha_captcha: Some(AltchaCaptchaConfigUpdateRequest { - enabled: Some(form.bool_value("altcha_captcha_enabled")), - rollout_basis_points: parse_form_number( - form, - "altcha_captcha_rollout_basis_points", - "Rollout basis points", - 0, - EXPERIMENT_ROLLOUT_BASIS_POINTS_MAX, - )?, - rollout_salt: parse_experiment_rollout_salt(form, "altcha_captcha_rollout_salt")?, - included_user_ids: Some(parse_experiment_user_ids( - form.first("altcha_captcha_included_user_ids") - .unwrap_or_default(), - "Included user IDs", - )?), - included_guild_ids: Some(parse_experiment_user_ids( - form.first("altcha_captcha_included_guild_ids") - .unwrap_or_default(), - "Included guild IDs", - )?), - include_premium_users: Some(form.bool_value("altcha_captcha_include_premium_users")), - excluded_user_ids: Some(parse_experiment_user_ids( - form.first("altcha_captcha_excluded_user_ids") - .unwrap_or_default(), - "Excluded user IDs", - )?), - anonymous_enabled: Some(form.bool_value("altcha_captcha_anonymous_enabled")), + captcha: Some(CaptchaConfigUpdateRequest { + enabled: Some(form.bool_value("captcha_enabled")), cost: parse_form_number( form, - "altcha_captcha_cost", + "captcha_cost", "Cost", - *ALTCHA_CAPTCHA_COST_RANGE.start(), - *ALTCHA_CAPTCHA_COST_RANGE.end(), + *CAPTCHA_COST_RANGE.start(), + *CAPTCHA_COST_RANGE.end(), )?, max_counter: parse_form_number( form, - "altcha_captcha_max_counter", + "captcha_max_counter", "Maximum counter", - *ALTCHA_CAPTCHA_MAX_COUNTER_RANGE.start(), - *ALTCHA_CAPTCHA_MAX_COUNTER_RANGE.end(), + *CAPTCHA_MAX_COUNTER_RANGE.start(), + *CAPTCHA_MAX_COUNTER_RANGE.end(), )?, }), ..Default::default() @@ -823,13 +795,6 @@ fn build_integrations_update(form: &MultiValueForm) -> InstanceConfigUpdateReque youtube: Some(InstanceYoutubeIntegrationUpdateRequest { api_key: clean("integration_youtube_api_key"), }), - captcha: Some(InstanceCaptchaIntegrationUpdateRequest { - provider: clean("integration_captcha_provider"), - hcaptcha_site_key: clean("integration_hcaptcha_site_key"), - hcaptcha_secret_key: clean("integration_hcaptcha_secret_key"), - turnstile_site_key: clean("integration_turnstile_site_key"), - turnstile_secret_key: clean("integration_turnstile_secret_key"), - }), email: Some(InstanceEmailIntegrationUpdateRequest { enabled: Some(form.bool_value("integration_email_enabled")), provider: Some("smtp".to_owned()), @@ -1416,90 +1381,66 @@ mod tests { } #[test] - fn build_altcha_captcha_update_reads_the_rollout_and_difficulty_fields() { + fn build_captcha_update_reads_the_switch_and_difficulty_fields() { let form = MultiValueForm::parse( - b"altcha_captcha_enabled=true&altcha_captcha_rollout_basis_points=%20500%20&altcha_captcha_rollout_salt=%20altcha-captcha-v2%20&altcha_captcha_included_user_ids=1500000000000000001&altcha_captcha_excluded_user_ids=1500000000000000002&altcha_captcha_anonymous_enabled=true&altcha_captcha_cost=2000&altcha_captcha_max_counter=%20400%20", + b"captcha_enabled=true&captcha_cost=%202000%20&captcha_max_counter=400", ); - let update = build_altcha_captcha_update(&form) + let update = build_captcha_update(&form) .expect("valid form") - .altcha_captcha - .expect("altcha captcha update"); + .captcha + .expect("captcha update"); assert_eq!(update.enabled, Some(true)); - assert_eq!(update.rollout_basis_points, Some(500)); - assert_eq!(update.rollout_salt, Some("altcha-captcha-v2".to_owned())); - assert_eq!( - update.included_user_ids, - Some(vec!["1500000000000000001".to_owned()]) - ); - assert_eq!( - update.excluded_user_ids, - Some(vec!["1500000000000000002".to_owned()]) - ); - assert_eq!(update.anonymous_enabled, Some(true)); assert_eq!(update.cost, Some(2000)); assert_eq!(update.max_counter, Some(400)); } #[test] - fn build_altcha_captcha_update_leaves_the_feature_inert_when_nothing_is_submitted() { + fn build_captcha_update_turns_the_check_off_when_the_box_is_unchecked() { let form = MultiValueForm::parse(b"_csrf=token"); - let request = build_altcha_captcha_update(&form).expect("valid form"); + let request = build_captcha_update(&form).expect("valid form"); assert_eq!( serde_json::to_value(request).expect("serializable update"), - serde_json::json!({"altcha_captcha": { - "enabled": false, - "included_user_ids": [], - "included_guild_ids": [], - "include_premium_users": false, - "excluded_user_ids": [], - "anonymous_enabled": false, - }}) + serde_json::json!({"captcha": {"enabled": false}}) ); } #[test] - fn build_altcha_captcha_update_rejects_difficulty_outside_the_supported_range() { + fn build_captcha_update_rejects_difficulty_outside_the_supported_range() { for (form, message) in [ ( - "altcha_captcha_cost=999", - "Cost must be a whole number between 1000 and 100000", + "captcha_cost=999", + "Cost must be a whole number between 1000 and 20000", ), ( - "altcha_captcha_max_counter=1000001", - "Maximum counter must be a whole number between 100 and 1000000", + "captcha_cost=20001", + "Cost must be a whole number between 1000 and 20000", ), ( - "altcha_captcha_rollout_basis_points=10001", - "Rollout basis points must be a whole number between 0 and 10000", + "captcha_max_counter=99", + "Maximum counter must be a whole number between 100 and 20000", + ), + ( + "captcha_max_counter=20001", + "Maximum counter must be a whole number between 100 and 20000", ), ] { let form = MultiValueForm::parse(form.as_bytes()); assert_eq!( - build_altcha_captcha_update(&form).expect_err("invalid field"), + build_captcha_update(&form).expect_err("invalid field"), message ); } } #[test] - fn every_experiment_update_rejects_an_invalid_included_guild_id() { - for (prefix, build) in [ - ( - "domain_migration", - build_domain_migration_update - as fn(&MultiValueForm) -> Result, - ), - ("altcha_captcha", build_altcha_captcha_update), - ] { - let form = MultiValueForm::parse( - format!("{prefix}_included_guild_ids=1500000000000000005%0Anot-a-guild").as_bytes(), - ); - assert_eq!( - build(&form).expect_err("invalid guild id"), - "Included guild IDs entry 2 must contain 1 to 20 decimal digits", - "{prefix}" - ); - } + fn domain_migration_update_rejects_an_invalid_included_guild_id() { + let form = MultiValueForm::parse( + b"domain_migration_included_guild_ids=1500000000000000005%0Anot-a-guild", + ); + assert_eq!( + build_domain_migration_update(&form).expect_err("invalid guild id"), + "Included guild IDs entry 2 must contain 1 to 20 decimal digits" + ); } #[test] diff --git a/fluxer_admin/src/templates/pages/instance_config.rs b/fluxer_admin/src/templates/pages/instance_config.rs index 4d7b609c1..cfa8a9b64 100644 --- a/fluxer_admin/src/templates/pages/instance_config.rs +++ b/fluxer_admin/src/templates/pages/instance_config.rs @@ -2,13 +2,13 @@ use crate::{ api::types::{ - ALTCHA_CAPTCHA_COST_RANGE, ALTCHA_CAPTCHA_DEFAULT_SALT, ALTCHA_CAPTCHA_MAX_COUNTER_RANGE, - AltchaCaptchaConfigResponse, AppPublicConfigResponse, DOMAIN_MIGRATION_DEFAULT_SALT, - DomainMigrationConfigResponse, EXPERIMENT_MAX_TARGETED_USERS, - ExperimentDeliveryConfigResponse, GatewayRolloutConfigResponse, InstanceConfigResponse, - InstanceIntegrationsResponse, InstanceMediaResponse, InstancePolicyResponse, - InstanceRegistrationResponse, LimitConfigResponse, PendingRegistrationResponse, - PushRelayConfigResponse, RegistrationUrlResponse, SsoConfigResponse, + AppPublicConfigResponse, CAPTCHA_COST_RANGE, CAPTCHA_MAX_COUNTER_RANGE, + CaptchaConfigResponse, DOMAIN_MIGRATION_DEFAULT_SALT, DomainMigrationConfigResponse, + EXPERIMENT_MAX_TARGETED_USERS, ExperimentDeliveryConfigResponse, + GatewayRolloutConfigResponse, InstanceConfigResponse, InstanceIntegrationsResponse, + InstanceMediaResponse, InstancePolicyResponse, InstanceRegistrationResponse, + LimitConfigResponse, PendingRegistrationResponse, PushRelayConfigResponse, + RegistrationUrlResponse, SsoConfigResponse, }, config::AdminConfig, middleware::auth::AuthContext, @@ -120,6 +120,13 @@ pub fn instance_config_page( (sso_config_section(base, csrf_token, &instance_config.sso)) }, )) + (config_group( + "Bot protection", + "A proof-of-work check on sign-up, login, password reset and a few other abuse-prone actions.", + html! { + (captcha_section(base, csrf_token, &instance_config.captcha)) + }, + )) @if instance_config.self_hosted { (config_group( "Community & policy", @@ -174,7 +181,6 @@ pub fn instance_config_page( html! { (gateway_rollout_section(base, csrf_token, &instance_config.gateway_rollout)) (domain_migration_section(base, csrf_token, &instance_config.domain_migration)) - (altcha_captcha_section(base, csrf_token, &instance_config.altcha_captcha)) (experiment_delivery_section(base, csrf_token, &instance_config.experiment_delivery)) @if let Some(limit_config) = limit_config { (limit_config_section(base, limit_config)) @@ -465,11 +471,6 @@ fn integrations_config_section( csrf_token: &str, integrations: &InstanceIntegrationsResponse, ) -> Markup { - let captcha_provider = integrations - .captcha - .provider - .as_deref() - .unwrap_or(integrations.captcha.effective_provider.as_str()); let smtp_port = integrations .email .smtp @@ -501,35 +502,6 @@ fn integrations_config_section( (password_input("integration_youtube_api_key", "YouTube API key", Some("Leave blank to keep the current key."))) } - 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" { "Bot protection" } - (secret_badge("hCaptcha secret", integrations.captcha.hcaptcha_secret_key_set)) - (secret_badge("Turnstile secret", integrations.captcha.turnstile_secret_key_set)) - } - div class="grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3" { - (select_input("integration_captcha_provider", "Provider", &[ - ("none", "Disabled"), - ("hcaptcha", "hCaptcha"), - ("turnstile", "Cloudflare Turnstile"), - ], captcha_provider)) - (text_input( - "integration_hcaptcha_site_key", - "hCaptcha site key", - integrations.captcha.hcaptcha_site_key.as_deref().unwrap_or(""), - "", - )) - (password_input("integration_hcaptcha_secret_key", "hCaptcha secret key", Some("Leave blank to keep the current secret."))) - (text_input( - "integration_turnstile_site_key", - "Turnstile site key", - integrations.captcha.turnstile_site_key.as_deref().unwrap_or(""), - "", - )) - (password_input("integration_turnstile_secret_key", "Turnstile secret key", Some("Leave blank to keep the current secret."))) - } - } - 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" { "Email delivery" } @@ -1203,171 +1175,67 @@ fn domain_migration_section( ) } -fn altcha_captcha_section( - base: &str, - csrf_token: &str, - altcha_captcha: &AltchaCaptchaConfigResponse, -) -> Markup { - let status = if altcha_captcha.enabled { - ("Live", BadgeVariant::Success) +fn estimate_low_end_solve_seconds(cost: u32, max_counter: u32) -> f64 { + 0.75 * f64::from(cost) * f64::from(max_counter) / 1_050_000.0 +} + +fn captcha_section(base: &str, csrf_token: &str, captcha: &CaptchaConfigResponse) -> Markup { + let status = if captcha.enabled { + ("On", BadgeVariant::Success) } else { - ("Inert", BadgeVariant::Default) + ("Off", BadgeVariant::Default) }; - let included_user_ids = altcha_captcha.included_user_ids.join("\n"); - let excluded_user_ids = altcha_captcha.excluded_user_ids.join("\n"); + let estimate = estimate_low_end_solve_seconds(captcha.cost, captcha.max_counter); section_card_with_description( - "ALTCHA Captcha", - "Replaces the configured captcha provider with an ALTCHA proof-of-work check for the \ - selected requesters. The API issues and verifies every challenge itself, so no third \ - party is involved. Requests only need a captcha where one is already required, so this \ - does nothing while captcha is off for the instance.", + "Proof-of-work check", + "Clients solve it in the background. The API issues and verifies every challenge itself, \ + and no third party is involved.", html! { - form method="post" action={(base) "/instance-config?action=update_altcha_captcha"} { - (csrf_input(csrf_token)) - div class="space-y-6" { - div class="flex flex-wrap items-center gap-2" { - h3 class="text-sm font-semibold text-neutral-900" { "Master switch" } - (badge(status.0, status.1)) - span class="text-xs text-neutral-500" { - "Config version " (altcha_captcha.config_version) - } - } - (checkbox( - "altcha_captcha_enabled", - "true", - "Serve ALTCHA to the selected requesters", - altcha_captcha.enabled, - true, - )) - p class="text-xs text-neutral-500" { - "Off is the safe state and the kill switch. With this unchecked every \ - requester gets the configured provider and ALTCHA answers are rejected." - } - - h3 class="text-sm font-semibold text-neutral-900" { "Logged-out requests" } - (checkbox( - "altcha_captcha_anonymous_enabled", - "true", - "Serve ALTCHA to logged-out requests", - altcha_captcha.anonymous_enabled, - true, - )) - p class="text-xs text-neutral-500" { - "Covers registration, login and password reset. These requests have no \ - account to bucket, so this switch applies to all of them at once." - } - - h3 class="text-sm font-semibold text-neutral-900" { "Rollout" } - (number_field( - "altcha_captcha_rollout_basis_points", - "Rollout (basis points)", - &altcha_captcha.rollout_basis_points.to_string(), - Some(0), Some(10000), "1", - Some("Share of logged-in users bucketed into ALTCHA, in basis points: 0 is nobody, 100 is 1%, 10000 is everybody."), - )) - div class="flex flex-col gap-2" { - (text_input( - "altcha_captcha_rollout_salt", - "Rollout Salt", - &altcha_captcha.rollout_salt, - ALTCHA_CAPTCHA_DEFAULT_SALT, - )) - p class="text-xs text-neutral-500" { - "Seeds the bucketing hash. Changing it reshuffles which users fall \ - inside the percentage above." - } - } - div class="flex flex-col gap-2" { - (textarea_input( - "altcha_captcha_included_user_ids", - "Always-on User IDs", - "1500000000000000001\n1500000000000000002", - &included_user_ids, - 4, - false, - )) - (entry_count_hint( - altcha_captcha.included_user_ids.len(), - EXPERIMENT_MAX_TARGETED_USERS, - )) - p class="text-xs text-neutral-500" { - "One snowflake per line, or comma separated. These users get ALTCHA \ - regardless of the percentage above. Invalid entries prevent the save." - } - } - div class="flex flex-col gap-2" { + div class="space-y-6" { + div class="flex flex-wrap items-center gap-2" { + (badge(status.0, status.1)) + } + form method="post" action={(base) "/instance-config?action=update_captcha"} { + (csrf_input(csrf_token)) + div class="space-y-6" { (checkbox( - "altcha_captcha_include_premium_users", + "captcha_enabled", "true", - "Include premium users", - altcha_captcha.include_premium_users, + "Require a proof-of-work check", + captcha.enabled, true, )) p class="text-xs text-neutral-500" { - "Includes every account with active premium perks, regardless of the \ - percentage above. The never-on list still wins." + "On by default. Turning it off removes the check from every request." } - } - div class="flex flex-col gap-2" { - (textarea_input( - "altcha_captcha_included_guild_ids", - "Always-on Guild IDs", - "1500000000000000005\n1500000000000000006", - &altcha_captcha.included_guild_ids.join("\n"), - 4, - false, + (number_field( + "captcha_cost", + "Cost (PBKDF2 iterations per try)", + &captcha.cost.to_string(), + Some(*CAPTCHA_COST_RANGE.start()), + Some(*CAPTCHA_COST_RANGE.end()), + "1", + Some("Default 5000."), )) - (entry_count_hint( - altcha_captcha.included_guild_ids.len(), - EXPERIMENT_MAX_TARGETED_USERS, + (number_field( + "captcha_max_counter", + "Maximum counter", + &captcha.max_counter.to_string(), + Some(*CAPTCHA_MAX_COUNTER_RANGE.start()), + Some(*CAPTCHA_MAX_COUNTER_RANGE.end()), + "1", + Some("Default 1000. Solve time grows with cost times this value."), )) - p class="text-xs text-neutral-500" { - "Same format, with guild IDs. Every member of a listed guild is \ - included regardless of the percentage above, unless the user is \ - in the never-on list." + p class="text-sm text-neutral-700" { + (format!( + "Average solve: about {estimate:.1} s on a low-end Android phone, \ + well under a second in desktop browsers." + )) } + (form_actions(html! { + (submit_button("Save")) + })) } - div class="flex flex-col gap-2" { - (textarea_input( - "altcha_captcha_excluded_user_ids", - "Never-on User IDs", - "1500000000000000003\n1500000000000000004", - &excluded_user_ids, - 4, - false, - )) - (entry_count_hint( - altcha_captcha.excluded_user_ids.len(), - EXPERIMENT_MAX_TARGETED_USERS, - )) - p class="text-xs text-neutral-500" { - "Same format. Exclusion wins over both the always-on list and the percentage." - } - } - - h3 class="text-sm font-semibold text-neutral-900" { "Difficulty" } - (number_field( - "altcha_captcha_cost", - "Cost (PBKDF2 iterations per attempt)", - &altcha_captcha.cost.to_string(), - Some(*ALTCHA_CAPTCHA_COST_RANGE.start()), - Some(*ALTCHA_CAPTCHA_COST_RANGE.end()), - "1", - Some("The API spends one attempt at this cost to issue each challenge."), - )) - (number_field( - "altcha_captcha_max_counter", - "Maximum counter", - &altcha_captcha.max_counter.to_string(), - Some(*ALTCHA_CAPTCHA_MAX_COUNTER_RANGE.start()), - Some(*ALTCHA_CAPTCHA_MAX_COUNTER_RANGE.end()), - "1", - Some("Each challenge hides its answer between half this value and this value. The client tries counters from 0 until it finds it, so solve time grows with cost times this value. At the defaults a recent laptop takes about 3 seconds."), - )) - - (form_actions(html! { - (submit_button("Save ALTCHA Configuration")) - })) } } }, @@ -1989,6 +1857,23 @@ fn limit_config_section(base: &str, limit_config: &LimitConfigResponse) -> Marku mod tests { use super::*; + #[test] + fn captcha_section_posts_the_switch_and_difficulty_fields() { + let markup = + captcha_section("/admin", "csrf", &CaptchaConfigResponse::default()).into_string(); + assert!(markup.contains("/admin/instance-config?action=update_captcha")); + assert!(markup.contains(r#"name="captcha_enabled""#)); + assert!(markup.contains(r#"name="captcha_cost""#)); + assert!(markup.contains(r#"name="captcha_max_counter""#)); + assert!(markup.contains("about 3.6 s")); + } + + #[test] + fn low_end_solve_estimate_at_the_defaults_is_about_three_and_a_half_seconds() { + let seconds = estimate_low_end_solve_seconds(5_000, 1_000); + assert!((seconds - 3.57).abs() < 0.01, "{seconds}"); + } + #[test] fn domain_migration_section_shows_both_rollouts_and_list_counts() { let domain_migration = DomainMigrationConfigResponse { diff --git a/fluxer_admin/tests/api_deserialization.rs b/fluxer_admin/tests/api_deserialization.rs index c865af7e2..7d55cf46c 100644 --- a/fluxer_admin/tests/api_deserialization.rs +++ b/fluxer_admin/tests/api_deserialization.rs @@ -422,19 +422,11 @@ fn deserialize_instance_config_response_with_unknown_keys() { "anonymous_rollout_basis_points": 100, "standalone_forwarding": true }, - "altcha_captcha": { + "captcha": { "enabled": true, - "config_version": 3, - "rollout_basis_points": 500, - "rollout_salt": "altcha-captcha-v1", - "included_user_ids": [], - "excluded_user_ids": ["1500000000000000003"], - "anonymous_enabled": true, "cost": 5000, - "max_counter": 10000, - "included_guild_ids": ["1500000000000000005"], - "include_premium_users": true, - "future_altcha_knob": "argon2id" + "max_counter": 1000, + "future_captcha_knob": 1 }, "experiment_delivery": {"poll_interval_seconds": 300, "poll_jitter_percent": 15}, "registration": { @@ -486,15 +478,6 @@ fn deserialize_instance_config_response_with_unknown_keys() { "integrations": { "gif": {"klipy_api_key_set": true, "effective_available": true}, "youtube": {"api_key_set": true, "effective_available": true}, - "captcha": { - "provider": "hcaptcha", - "effective_provider": "hcaptcha", - "hcaptcha_site_key": "site", - "hcaptcha_secret_key_set": true, - "turnstile_site_key": "", - "turnstile_secret_key_set": false, - "effective_enabled": true - }, "email": { "enabled": true, "effective_enabled": true, @@ -595,13 +578,8 @@ fn deserialize_instance_config_response_with_unknown_keys() { assert_eq!(resp.domain_migration.anonymous_rollout_basis_points, 100); assert!(resp.domain_migration.standalone_forwarding); assert!(resp.push_relay.relay_consent_accepted); - assert!(resp.altcha_captcha.enabled); - assert_eq!(resp.altcha_captcha.config_version, 3); - assert!(resp.altcha_captcha.anonymous_enabled); - assert_eq!(resp.altcha_captcha.excluded_user_ids.len(), 1); - assert_eq!(resp.altcha_captcha.max_counter, 10000); - assert_eq!(resp.altcha_captcha.included_guild_ids.len(), 1); - assert!(resp.altcha_captcha.include_premium_users); + assert!(resp.captcha.enabled); + assert_eq!(resp.captcha.max_counter, 1000); assert_eq!(resp.experiment_delivery.poll_interval_seconds, 300); assert!(resp.policy.single_community_guild_id.is_none()); assert_eq!(resp.policy.services.gif_enabled, Some(true)); diff --git a/fluxer_api/pkgs/captcha/src/CaptchaProviderFactory.ts b/fluxer_api/pkgs/captcha/src/CaptchaProviderFactory.ts deleted file mode 100644 index 023b219d3..000000000 --- a/fluxer_api/pkgs/captcha/src/CaptchaProviderFactory.ts +++ /dev/null @@ -1,87 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -import type {LoggerInterface} from '@fluxer/logger/src/LoggerInterface'; -import type {ICaptchaProvider} from '@pkgs/captcha/src/ICaptchaProvider'; -import {HcaptchaProvider} from '@pkgs/captcha/src/providers/HcaptchaProvider'; -import type {HttpCaptchaProviderOptions} from '@pkgs/captcha/src/providers/HttpCaptchaProvider'; -import type {RecaptchaProviderOptions} from '@pkgs/captcha/src/providers/RecaptchaProvider'; -import {RecaptchaProvider} from '@pkgs/captcha/src/providers/RecaptchaProvider'; -import {TestCaptchaProvider} from '@pkgs/captcha/src/providers/TestProvider'; -import {TurnstileProvider} from '@pkgs/captcha/src/providers/TurnstileProvider'; -import {UnavailableCaptchaProvider} from '@pkgs/captcha/src/providers/UnavailableCaptchaProvider'; - -interface BaseCaptchaProviderFactoryParams { - logger?: LoggerInterface; -} - -interface CreateUnavailableCaptchaProviderParams extends BaseCaptchaProviderFactoryParams { - mode: 'unavailable'; -} - -interface CreateTestCaptchaProviderParams extends BaseCaptchaProviderFactoryParams { - mode: 'test'; -} - -interface CreateHcaptchaProviderParams extends BaseCaptchaProviderFactoryParams { - mode: 'hcaptcha'; - secretKey: string; - timeoutMs?: number; - userAgent?: string; - fetchFn?: typeof fetch; -} - -interface CreateTurnstileProviderParams extends BaseCaptchaProviderFactoryParams { - mode: 'turnstile'; - secretKey: string; - timeoutMs?: number; - userAgent?: string; - fetchFn?: typeof fetch; -} - -interface CreateRecaptchaProviderParams extends BaseCaptchaProviderFactoryParams { - mode: 'recaptcha'; - secretKey: string; - minimumScore?: number; - timeoutMs?: number; - userAgent?: string; - fetchFn?: typeof fetch; -} - -type CreateCaptchaProviderParams = - | CreateUnavailableCaptchaProviderParams - | CreateTestCaptchaProviderParams - | CreateHcaptchaProviderParams - | CreateTurnstileProviderParams - | CreateRecaptchaProviderParams; - -function buildHttpOptions( - params: CreateHcaptchaProviderParams | CreateTurnstileProviderParams | CreateRecaptchaProviderParams, -): HttpCaptchaProviderOptions { - return { - secretKey: params.secretKey, - logger: params.logger, - timeoutMs: params.timeoutMs, - userAgent: params.userAgent, - fetchFn: params.fetchFn, - }; -} - -export function createCaptchaProvider(params: CreateCaptchaProviderParams): ICaptchaProvider { - if (params.mode === 'test') { - return new TestCaptchaProvider(); - } - if (params.mode === 'hcaptcha') { - return new HcaptchaProvider(buildHttpOptions(params)); - } - if (params.mode === 'turnstile') { - return new TurnstileProvider(buildHttpOptions(params)); - } - if (params.mode === 'recaptcha') { - const options: RecaptchaProviderOptions = { - ...buildHttpOptions(params), - minimumScore: params.minimumScore, - }; - return new RecaptchaProvider(options); - } - return new UnavailableCaptchaProvider(); -} diff --git a/fluxer_api/pkgs/captcha/src/ICaptchaProvider.ts b/fluxer_api/pkgs/captcha/src/ICaptchaProvider.ts deleted file mode 100644 index f083b8f18..000000000 --- a/fluxer_api/pkgs/captcha/src/ICaptchaProvider.ts +++ /dev/null @@ -1,13 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -export interface VerifyCaptchaParams { - token: string; - remoteIp?: string; -} - -export type CaptchaProviderType = 'hcaptcha' | 'recaptcha' | 'turnstile' | 'altcha' | 'test' | 'unavailable'; - -export interface ICaptchaProvider { - readonly type: CaptchaProviderType; - verify(params: VerifyCaptchaParams): Promise; -} diff --git a/fluxer_api/pkgs/captcha/src/providers/AltchaProvider.ts b/fluxer_api/pkgs/captcha/src/providers/AltchaProvider.ts index edbca8d88..f26716722 100644 --- a/fluxer_api/pkgs/captcha/src/providers/AltchaProvider.ts +++ b/fluxer_api/pkgs/captcha/src/providers/AltchaProvider.ts @@ -1,14 +1,13 @@ // SPDX-License-Identifier: AGPL-3.0-or-later import type {LoggerInterface} from '@fluxer/logger/src/LoggerInterface'; -import type {CaptchaProviderType, ICaptchaProvider, VerifyCaptchaParams} from '@pkgs/captcha/src/ICaptchaProvider'; import {createChallenge, randomInt, verifySolution} from 'altcha-lib'; import {deriveKey} from 'altcha-lib/algorithms/pbkdf2'; import type {Challenge} from 'altcha-lib/types'; import {ms} from 'itty-time'; import {z} from 'zod'; -export const ALTCHA_ALGORITHM = 'PBKDF2/SHA-256'; +const ALTCHA_ALGORITHM = 'PBKDF2/SHA-256'; const ALTCHA_CHALLENGE_TTL_MS = ms('10 minutes'); const ALTCHA_MAX_TOKEN_LENGTH = 4096; const HEX_PATTERN = /^[0-9a-f]+$/u; @@ -56,8 +55,7 @@ function decodePayload(token: string): AltchaPayload | null { } } -export class AltchaProvider implements ICaptchaProvider { - readonly type: CaptchaProviderType = 'altcha'; +export class AltchaProvider { private readonly options: AltchaProviderOptions; private readonly now: () => number; @@ -79,7 +77,7 @@ export class AltchaProvider implements ICaptchaProvider { }); } - async verify({token}: VerifyCaptchaParams): Promise { + async verify({token}: {token: string}): Promise { const payload = decodePayload(token); if (!payload) return false; try { diff --git a/fluxer_api/pkgs/captcha/src/providers/HcaptchaProvider.ts b/fluxer_api/pkgs/captcha/src/providers/HcaptchaProvider.ts deleted file mode 100644 index 68f599057..000000000 --- a/fluxer_api/pkgs/captcha/src/providers/HcaptchaProvider.ts +++ /dev/null @@ -1,10 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -import type {CaptchaProviderType} from '@pkgs/captcha/src/ICaptchaProvider'; -import {HttpCaptchaProvider} from '@pkgs/captcha/src/providers/HttpCaptchaProvider'; - -export class HcaptchaProvider extends HttpCaptchaProvider { - readonly type: CaptchaProviderType = 'hcaptcha'; - protected readonly verifyUrl = 'https://api.hcaptcha.com/siteverify'; - protected readonly providerName = 'hCaptcha'; -} diff --git a/fluxer_api/pkgs/captcha/src/providers/HttpCaptchaProvider.ts b/fluxer_api/pkgs/captcha/src/providers/HttpCaptchaProvider.ts deleted file mode 100644 index 12d62c374..000000000 --- a/fluxer_api/pkgs/captcha/src/providers/HttpCaptchaProvider.ts +++ /dev/null @@ -1,105 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -import type {LoggerInterface} from '@fluxer/logger/src/LoggerInterface'; -import type {CaptchaProviderType, ICaptchaProvider, VerifyCaptchaParams} from '@pkgs/captcha/src/ICaptchaProvider'; -import {ms} from 'itty-time'; - -const DEFAULT_USER_AGENT = 'Mozilla/5.0 (compatible; Fluxerbot/1.0; +https://fluxer.app)'; -const DEFAULT_TIMEOUT = ms('10 seconds'); - -export interface HttpCaptchaProviderOptions { - secretKey: string; - logger?: LoggerInterface; - timeoutMs?: number; - userAgent?: string; - fetchFn?: typeof fetch; -} - -interface CaptchaVerifyResponse { - success: boolean; - 'error-codes'?: Array; - hostname?: string; - challenge_ts?: string; - score?: number; -} - -function isCaptchaVerifyResponse(value: unknown): value is CaptchaVerifyResponse { - if (typeof value !== 'object' || value === null || Array.isArray(value)) return false; - const data = value as Record; - const errorCodes = data['error-codes']; - return ( - typeof data.success === 'boolean' && - (errorCodes === undefined || (Array.isArray(errorCodes) && errorCodes.every((code) => typeof code === 'string'))) && - (data.hostname === undefined || typeof data.hostname === 'string') && - (data.challenge_ts === undefined || typeof data.challenge_ts === 'string') && - (data.score === undefined || - (typeof data.score === 'number' && Number.isFinite(data.score) && data.score >= 0 && data.score <= 1)) - ); -} - -export abstract class HttpCaptchaProvider implements ICaptchaProvider { - abstract readonly type: CaptchaProviderType; - protected readonly secretKey: string; - protected readonly logger: LoggerInterface | undefined; - protected readonly timeoutMs: number; - protected readonly userAgent: string; - protected readonly fetchFn: typeof fetch; - protected abstract readonly verifyUrl: string; - protected abstract readonly providerName: string; - - constructor(options: HttpCaptchaProviderOptions) { - this.secretKey = options.secretKey; - this.logger = options.logger; - this.timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT; - this.userAgent = options.userAgent ?? DEFAULT_USER_AGENT; - this.fetchFn = options.fetchFn ?? fetch; - } - - async verify({token, remoteIp}: VerifyCaptchaParams): Promise { - try { - const body = new URLSearchParams(); - body.append('secret', this.secretKey); - body.append('response', token); - if (remoteIp) { - body.append('remoteip', remoteIp); - } - const response = await this.fetchFn(this.verifyUrl, { - method: 'POST', - headers: { - 'Content-Type': 'application/x-www-form-urlencoded', - 'User-Agent': this.userAgent, - }, - body: body.toString(), - signal: AbortSignal.timeout(this.timeoutMs), - }); - if (!response.ok) { - await response.body?.cancel().catch(() => { - this.logger?.warn({status: response.status}, `${this.providerName} failed to cancel discarded response body`); - }); - this.logger?.error({status: response.status}, `${this.providerName} verify request failed`); - return false; - } - const data: unknown = await response.json(); - if (!isCaptchaVerifyResponse(data)) { - this.logger?.error({}, `${this.providerName} returned an invalid verification response`); - return false; - } - if (!data.success) { - this.logger?.warn({errorCodes: data['error-codes']}, `${this.providerName} verification failed`); - return false; - } - return this.validateResponse(data); - } catch (error) { - if (error instanceof Error && error.name === 'TimeoutError') { - this.logger?.error({}, `${this.providerName} verification timed out after ${this.timeoutMs}ms`); - } else { - this.logger?.error({error}, `Error verifying ${this.providerName} token`); - } - return false; - } - } - - protected validateResponse(_data: CaptchaVerifyResponse): boolean { - return true; - } -} diff --git a/fluxer_api/pkgs/captcha/src/providers/RecaptchaProvider.ts b/fluxer_api/pkgs/captcha/src/providers/RecaptchaProvider.ts deleted file mode 100644 index f2a0d5dd4..000000000 --- a/fluxer_api/pkgs/captcha/src/providers/RecaptchaProvider.ts +++ /dev/null @@ -1,40 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -import type {CaptchaProviderType} from '@pkgs/captcha/src/ICaptchaProvider'; -import type {HttpCaptchaProviderOptions} from '@pkgs/captcha/src/providers/HttpCaptchaProvider'; -import {HttpCaptchaProvider} from '@pkgs/captcha/src/providers/HttpCaptchaProvider'; - -const DEFAULT_MINIMUM_SCORE = 0.5; - -interface RecaptchaVerifyResponse { - success: boolean; - 'error-codes'?: Array; - score?: number; -} - -export interface RecaptchaProviderOptions extends HttpCaptchaProviderOptions { - minimumScore?: number; -} - -export class RecaptchaProvider extends HttpCaptchaProvider { - readonly type: CaptchaProviderType = 'recaptcha'; - protected readonly verifyUrl = 'https://www.google.com/recaptcha/api/siteverify'; - protected readonly providerName = 'reCAPTCHA'; - private readonly minimumScore: number; - - constructor(options: RecaptchaProviderOptions) { - super(options); - this.minimumScore = options.minimumScore ?? DEFAULT_MINIMUM_SCORE; - } - - protected override validateResponse(data: RecaptchaVerifyResponse): boolean { - if (data.score !== undefined && data.score < this.minimumScore) { - this.logger?.warn( - {score: data.score, minimumScore: this.minimumScore}, - 'reCAPTCHA score below minimum threshold', - ); - return false; - } - return true; - } -} diff --git a/fluxer_api/pkgs/captcha/src/providers/TestProvider.ts b/fluxer_api/pkgs/captcha/src/providers/TestProvider.ts deleted file mode 100644 index 04b3e92ae..000000000 --- a/fluxer_api/pkgs/captcha/src/providers/TestProvider.ts +++ /dev/null @@ -1,11 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -import type {CaptchaProviderType, ICaptchaProvider, VerifyCaptchaParams} from '@pkgs/captcha/src/ICaptchaProvider'; - -export class TestCaptchaProvider implements ICaptchaProvider { - readonly type: CaptchaProviderType = 'test'; - - async verify(_params: VerifyCaptchaParams): Promise { - return true; - } -} diff --git a/fluxer_api/pkgs/captcha/src/providers/TurnstileProvider.ts b/fluxer_api/pkgs/captcha/src/providers/TurnstileProvider.ts deleted file mode 100644 index c23c7cdb7..000000000 --- a/fluxer_api/pkgs/captcha/src/providers/TurnstileProvider.ts +++ /dev/null @@ -1,10 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -import type {CaptchaProviderType} from '@pkgs/captcha/src/ICaptchaProvider'; -import {HttpCaptchaProvider} from '@pkgs/captcha/src/providers/HttpCaptchaProvider'; - -export class TurnstileProvider extends HttpCaptchaProvider { - readonly type: CaptchaProviderType = 'turnstile'; - protected readonly verifyUrl = 'https://challenges.cloudflare.com/turnstile/v0/siteverify'; - protected readonly providerName = 'Turnstile'; -} diff --git a/fluxer_api/pkgs/captcha/src/providers/UnavailableCaptchaProvider.ts b/fluxer_api/pkgs/captcha/src/providers/UnavailableCaptchaProvider.ts deleted file mode 100644 index a133bd83f..000000000 --- a/fluxer_api/pkgs/captcha/src/providers/UnavailableCaptchaProvider.ts +++ /dev/null @@ -1,11 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -import type {CaptchaProviderType, ICaptchaProvider, VerifyCaptchaParams} from '@pkgs/captcha/src/ICaptchaProvider'; - -export class UnavailableCaptchaProvider implements ICaptchaProvider { - readonly type: CaptchaProviderType = 'unavailable'; - - async verify(_params: VerifyCaptchaParams): Promise { - return true; - } -} diff --git a/fluxer_api/src/api/Config.ts b/fluxer_api/src/api/Config.ts index 2847e1ec6..2d2af07aa 100644 --- a/fluxer_api/src/api/Config.ts +++ b/fluxer_api/src/api/Config.ts @@ -329,22 +329,6 @@ export function buildAPIConfigFromMaster(master: MasterConfig): APIConfig { breachedPasswordCheck: { enabled: master.integrations.breached_password_check.enabled ?? !master.instance.self_hosted, }, - captcha: { - enabled: master.integrations.captcha.enabled, - provider: master.integrations.captcha.provider, - hcaptcha: master.integrations.captcha.hcaptcha - ? { - siteKey: master.integrations.captcha.hcaptcha.site_key, - secretKey: master.integrations.captcha.hcaptcha.secret_key, - } - : undefined, - turnstile: master.integrations.captcha.turnstile - ? { - siteKey: master.integrations.captcha.turnstile.site_key, - secretKey: master.integrations.captcha.turnstile.secret_key, - } - : undefined, - }, contentModeration: { nsfwThreshold: master.services.api.content_moderation?.nsfw_threshold ?? 0.7, }, diff --git a/fluxer_api/src/api/admin/controllers/InstanceConfigAdminController.ts b/fluxer_api/src/api/admin/controllers/InstanceConfigAdminController.ts index 1e3377ea9..c3f71e023 100644 --- a/fluxer_api/src/api/admin/controllers/InstanceConfigAdminController.ts +++ b/fluxer_api/src/api/admin/controllers/InstanceConfigAdminController.ts @@ -35,7 +35,6 @@ import { PendingRegistrationActionRequest, RegistrationUrlIdParam, } from '@fluxer/schema/src/domains/admin/AdminSchemas'; -import {AltchaCaptchaConfigSchema} from '@fluxer/schema/src/domains/admin/AltchaCaptchaSchemas'; import {DomainMigrationConfigSchema} from '@fluxer/schema/src/domains/admin/DomainMigrationSchemas'; import {GatewayRolloutConfigSchema} from '@fluxer/schema/src/domains/admin/GatewayRolloutSchemas'; import type {PushRelayConfig, PushRelayConfigUpdateRequest} from '@fluxer/schema/src/domains/admin/PushRelaySchemas'; @@ -67,7 +66,7 @@ async function buildInstanceConfigResponse(): Promise { gatewayRollout, pushRelay, domainMigration, - altchaCaptcha, + captcha, experimentDelivery, registrationConfig, registrationUrls, @@ -77,7 +76,7 @@ async function buildInstanceConfigResponse(): Promise { instanceConfigRepository.getGatewayRolloutConfig(), instanceConfigRepository.getPushRelayConfig(), instanceConfigRepository.getDomainMigrationConfig(), - instanceConfigRepository.getAltchaCaptchaConfig(), + instanceConfigRepository.getCaptchaConfig(), instanceConfigRepository.getExperimentDeliveryConfig(), instanceConfigRepository.getRegistrationConfig(), instanceConfigRepository.getRegistrationUrlsForAdmin(), @@ -111,7 +110,7 @@ async function buildInstanceConfigResponse(): Promise { gateway_rollout: gatewayRollout, push_relay: pushRelay, domain_migration: domainMigration, - altcha_captcha: altchaCaptcha, + captcha, experiment_delivery: experimentDelivery, registration: { ...registrationConfig, @@ -388,16 +387,10 @@ export function InstanceConfigAdminController(app: HonoApp) { ); } } - if (data.altcha_captcha) { - const patch = omitUndefinedFields(data.altcha_captcha); + if (data.captcha) { + const patch = omitUndefinedFields(data.captcha); if (Object.keys(patch).length > 0) { - await instanceConfigRepository.updateAltchaCaptchaConfig((current) => - AltchaCaptchaConfigSchema.parse({ - ...current, - ...patch, - config_version: current.config_version + 1, - }), - ); + await instanceConfigRepository.updateCaptchaConfig(patch); } } if (data.experiment_delivery) { @@ -498,15 +491,6 @@ export function InstanceConfigAdminController(app: HonoApp) { api_key: readOptionalField(data.integrations.youtube, 'api_key'), }) : undefined, - captcha: data.integrations.captcha - ? omitUndefinedFields({ - provider: readOptionalField(data.integrations.captcha, 'provider'), - hcaptcha_site_key: readOptionalField(data.integrations.captcha, 'hcaptcha_site_key'), - hcaptcha_secret_key: readOptionalField(data.integrations.captcha, 'hcaptcha_secret_key'), - turnstile_site_key: readOptionalField(data.integrations.captcha, 'turnstile_site_key'), - turnstile_secret_key: readOptionalField(data.integrations.captcha, 'turnstile_secret_key'), - }) - : undefined, email: data.integrations.email ? { ...omitUndefinedFields({ diff --git a/fluxer_api/src/api/auth/AuthController.ts b/fluxer_api/src/api/auth/AuthController.ts index 9b64e1a0c..a7f3f0246 100644 --- a/fluxer_api/src/api/auth/AuthController.ts +++ b/fluxer_api/src/api/auth/AuthController.ts @@ -109,8 +109,8 @@ export function AuthController(app: HonoApp) { app.post( '/auth/register', LocalAuthMiddleware, - CaptchaMiddleware, RateLimitMiddleware(RateLimitConfigs.AUTH_REGISTER), + CaptchaMiddleware, Validator('json', RegisterRequest), OpenAPI({ operationId: 'register_account', @@ -120,7 +120,7 @@ export function AuthController(app: HonoApp) { security: [], tags: ['Auth'], description: - 'Create a new user account with email and password. Requires CAPTCHA verification. User account is created but must verify email before logging in.', + 'Create a new user account with email and password. Requires a solved captcha challenge (X-Captcha-Token). User account is created but must verify email before logging in.', }), async (ctx) => { const result = await ctx.get('authRequestService').register({ @@ -134,8 +134,8 @@ export function AuthController(app: HonoApp) { app.post( '/auth/login', LocalAuthMiddleware, - CaptchaMiddleware, RateLimitMiddleware(RateLimitConfigs.AUTH_LOGIN), + CaptchaMiddleware, Validator('json', LoginRequest), OpenAPI({ operationId: 'login_user', @@ -145,7 +145,7 @@ export function AuthController(app: HonoApp) { security: [], tags: ['Auth'], description: - 'Authenticate with email and password. Returns authentication token if credentials are valid and MFA is not required. If MFA is enabled, returns a ticket for MFA verification.', + 'Authenticate with email and password. Returns authentication token if credentials are valid and MFA is not required. If MFA is enabled, returns a ticket for MFA verification. Requires a solved captcha challenge (X-Captcha-Token).', }), async (ctx) => { const result = await ctx.get('authRequestService').login({ @@ -240,8 +240,8 @@ export function AuthController(app: HonoApp) { app.post( '/auth/forgot', LocalAuthMiddleware, - CaptchaMiddleware, RateLimitMiddleware(RateLimitConfigs.AUTH_FORGOT_PASSWORD), + CaptchaMiddleware, Validator('json', ForgotPasswordRequest), OpenAPI({ operationId: 'forgot_password', @@ -251,7 +251,7 @@ export function AuthController(app: HonoApp) { security: [], tags: ['Auth'], description: - "Initiate password reset process by email. A password reset link will be sent to the user's email address. Requires CAPTCHA verification.", + "Initiate password reset process by email. A password reset link will be sent to the user's email address. Requires a solved captcha challenge (X-Captcha-Token).", }), async (ctx) => { await ctx.get('authRequestService').forgotPassword({ diff --git a/fluxer_api/src/api/auth/AuthPhone.ts b/fluxer_api/src/api/auth/AuthPhone.ts index c7968576a..2bdba99ba 100644 --- a/fluxer_api/src/api/auth/AuthPhone.ts +++ b/fluxer_api/src/api/auth/AuthPhone.ts @@ -39,6 +39,8 @@ interface IssuedChallenge { interface SendPhoneVerificationOptions { clientIp: string; channel?: PhoneChannel; + hasCaptchaToken: boolean; + verifyCaptcha: () => Promise; } function assertPhoneFormat(phone: string): void { @@ -74,18 +76,25 @@ export async function sendPhoneVerificationCode( ): Promise { assertPhoneFormat(phone); const user = await loadRequestingUser(ctx, userId); - const reply = await getPhoneVerificationClient().start( - { - user_id: user.id.toString(), - user_flags: user.flags.toString(), - has_verified_phone: user.hasVerifiedPhone, - phone, - requested_channel: options.channel ?? null, - client_ip: options.clientIp, - captcha_passed: false, - }, - requestInfo(ctx, userId, phone), - ); + const start = (captchaPassed: boolean) => + getPhoneVerificationClient().start( + { + user_id: user.id.toString(), + user_flags: user.flags.toString(), + has_verified_phone: user.hasVerifiedPhone, + phone, + requested_channel: options.channel ?? null, + client_ip: options.clientIp, + captcha_passed: captchaPassed, + }, + requestInfo(ctx, userId, phone), + ); + const captchaPassed = options.hasCaptchaToken && (await options.verifyCaptcha()); + const reply = await start(captchaPassed); + if (reply.result === 'error' && reply.code === 'captcha_required' && !captchaPassed) { + await options.verifyCaptcha(); + Logger.warn({userId: userId.toString()}, 'Phone verification asked for a captcha without a captcha check'); + } switch (reply.result) { case 'sms_sent': return {channel: 'sms'}; diff --git a/fluxer_api/src/api/auth/PhoneVerificationClient.ts b/fluxer_api/src/api/auth/PhoneVerificationClient.ts index d2eded9db..8364d904d 100644 --- a/fluxer_api/src/api/auth/PhoneVerificationClient.ts +++ b/fluxer_api/src/api/auth/PhoneVerificationClient.ts @@ -32,7 +32,6 @@ import {PhoneNumberNotInServiceError} from '@fluxer/errors/src/domains/auth/Phon import {PhoneNumberNotMobileError} from '@fluxer/errors/src/domains/auth/PhoneNumberNotMobileError'; import {PhoneVerificationNeedsReviewError} from '@fluxer/errors/src/domains/auth/PhoneVerificationNeedsReviewError'; import {SmsVerificationUnavailableError} from '@fluxer/errors/src/domains/auth/SmsVerificationUnavailableError'; -import {CaptchaVerificationRequiredError} from '@fluxer/errors/src/domains/core/CaptchaVerificationRequiredError'; import {RateLimitError} from '@fluxer/errors/src/domains/core/RateLimitError'; import type {FluxerError} from '@fluxer/errors/src/FluxerError'; import {type NatsConnection, headers as natsHeaders, RequestError, TimeoutError} from '@nats-io/transport-node'; @@ -204,8 +203,18 @@ export function errorForPhoneReply(error: PhoneError): FluxerError { return new PhoneInboundVerificationRequiredError(); case 'already_used': return new PhoneAlreadyUsedError(); - case 'captcha_required': - return new CaptchaVerificationRequiredError(); + case 'captcha_required': { + const retryAfter = 24 * 60 * 60; + return new RateLimitError({ + code: APIErrorCodes.PHONE_RATE_LIMIT_EXCEEDED, + retryAfter, + retryAfterDecimal: retryAfter, + limit: 1, + resetTime: new Date(Date.now() + retryAfter * 1000), + resetAfterDecimal: retryAfter, + scope: 'user', + }); + } case 'invalid_code': return new InvalidPhoneVerificationCodeError(); case 'rate_limited': { diff --git a/fluxer_api/src/api/auth/tests/AltchaCaptcha.test.ts b/fluxer_api/src/api/auth/tests/AltchaCaptcha.test.ts deleted file mode 100644 index 6a912af42..000000000 --- a/fluxer_api/src/api/auth/tests/AltchaCaptcha.test.ts +++ /dev/null @@ -1,178 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -import {createTestAccount} from '@app/api/auth/tests/AuthTestUtils'; -import {Config} from '@app/api/Config'; -import {getInstanceConfigRepository} from '@app/api/middleware/ServiceSingletons'; -import {type ApiTestHarness, createApiTestHarness} from '@app/api/test/ApiTestHarness'; -import {HTTP_STATUS} from '@app/api/test/TestConstants'; -import {createBuilder, createBuilderWithoutAuth, type TestRequestBuilder} from '@app/api/test/TestRequestBuilder'; -import {APIErrorCodes} from '@fluxer/constants/src/ApiErrorCodes'; -import { - type AltchaCaptchaConfig, - DEFAULT_ALTCHA_CAPTCHA_CONFIG, -} from '@fluxer/schema/src/domains/admin/AltchaCaptchaSchemas'; -import {solveChallenge} from 'altcha-lib'; -import {deriveKey} from 'altcha-lib/algorithms/pbkdf2'; -import type {Challenge} from 'altcha-lib/types'; -import {afterAll, afterEach, beforeAll, beforeEach, describe, expect, it} from 'vitest'; - -interface CaptchaErrorBody { - code: string; - captcha_provider?: string; - altcha_challenge?: Challenge; -} - -const FORGOT_PATH = '/auth/forgot'; -const FORGOT_BODY = {email: 'altcha-nobody@example.com'}; - -async function setAltchaConfig(overrides: Partial): Promise { - await getInstanceConfigRepository().setAltchaCaptchaConfig({ - ...DEFAULT_ALTCHA_CAPTCHA_CONFIG, - enabled: true, - cost: 1000, - max_counter: 100, - ...overrides, - }); -} - -async function solve(challenge: Challenge): Promise { - const solution = await solveChallenge({challenge, deriveKey, timeout: 0}); - if (!solution) throw new Error('ALTCHA challenge was not solved'); - return Buffer.from(JSON.stringify({challenge, solution}), 'utf8').toString('base64'); -} - -async function rejectWith(builder: TestRequestBuilder, code: string): Promise { - const {json} = await builder.expect(HTTP_STATUS.BAD_REQUEST, code).executeWithResponse(); - expect(json.code).toBe(code); - return json; -} - -function forgot(harness: ApiTestHarness): TestRequestBuilder { - return createBuilderWithoutAuth(harness).post(FORGOT_PATH).body(FORGOT_BODY); -} - -describe('ALTCHA captcha experiment', () => { - let harness: ApiTestHarness; - let previousCaptchaEnabled: boolean; - let previousTestModeEnabled: boolean; - - beforeAll(async () => { - harness = await createApiTestHarness(); - }); - - beforeEach(async () => { - await harness.reset(); - previousCaptchaEnabled = Config.captcha.enabled; - previousTestModeEnabled = Config.dev.testModeEnabled; - Config.captcha.enabled = true; - Config.dev.testModeEnabled = true; - }); - - afterEach(() => { - Config.captcha.enabled = previousCaptchaEnabled; - Config.dev.testModeEnabled = previousTestModeEnabled; - }); - - afterAll(async () => { - await harness.shutdown(); - }); - - it('keeps the configured provider while the experiment is off', async () => { - const body = await rejectWith(forgot(harness), APIErrorCodes.CAPTCHA_REQUIRED); - expect(body).not.toHaveProperty('captcha_provider'); - expect(body).not.toHaveProperty('altcha_challenge'); - }); - - it('leaves anonymous requests on the configured provider unless anonymous_enabled is set', async () => { - await setAltchaConfig({rollout_basis_points: 10000}); - const body = await rejectWith(forgot(harness), APIErrorCodes.CAPTCHA_REQUIRED); - expect(body).not.toHaveProperty('altcha_challenge'); - }); - - it('serves anonymous requests a challenge and accepts the solved payload once', async () => { - await setAltchaConfig({anonymous_enabled: true}); - const required = await rejectWith(forgot(harness), APIErrorCodes.CAPTCHA_REQUIRED); - expect(required.captcha_provider).toBe('altcha'); - expect(required.altcha_challenge?.parameters).toMatchObject({algorithm: 'PBKDF2/SHA-256', cost: 1000}); - const token = await solve(required.altcha_challenge as Challenge); - - await forgot(harness) - .header('X-Captcha-Token', token) - .header('X-Captcha-Type', 'altcha') - .expect(HTTP_STATUS.NO_CONTENT) - .execute(); - - const replayed = await rejectWith( - forgot(harness).header('X-Captcha-Token', token).header('X-Captcha-Type', 'altcha'), - APIErrorCodes.INVALID_CAPTCHA, - ); - expect(replayed.captcha_provider).toBe('altcha'); - expect(replayed.altcha_challenge?.signature).not.toBe(required.altcha_challenge?.signature); - }); - - it('rejects a payload whose derived key does not match the challenge', async () => { - await setAltchaConfig({anonymous_enabled: true}); - const required = await rejectWith(forgot(harness), APIErrorCodes.CAPTCHA_REQUIRED); - const challenge = required.altcha_challenge as Challenge; - const forged = Buffer.from( - JSON.stringify({challenge, solution: {counter: 1, derivedKey: '00'.repeat(32)}}), - 'utf8', - ).toString('base64'); - - await rejectWith( - forgot(harness).header('X-Captcha-Token', forged).header('X-Captcha-Type', 'altcha'), - APIErrorCodes.INVALID_CAPTCHA, - ); - }); - - it('rejects an ALTCHA payload from a requester outside the experiment', async () => { - await setAltchaConfig({anonymous_enabled: true}); - const required = await rejectWith(forgot(harness), APIErrorCodes.CAPTCHA_REQUIRED); - const token = await solve(required.altcha_challenge as Challenge); - await setAltchaConfig({anonymous_enabled: false}); - - const rejected = await rejectWith( - forgot(harness).header('X-Captcha-Token', token).header('X-Captcha-Type', 'altcha'), - APIErrorCodes.INVALID_CAPTCHA, - ); - expect(rejected).not.toHaveProperty('altcha_challenge'); - }); - - it('buckets signed-in users by their own rollout and still accepts the configured provider', async () => { - Config.captcha.enabled = false; - const included = await createTestAccount(harness); - const excluded = await createTestAccount(harness); - Config.captcha.enabled = true; - await setAltchaConfig({ - anonymous_enabled: true, - included_user_ids: [included.userId], - excluded_user_ids: [excluded.userId], - }); - const redeemPath = '/gifts/altcha-gift-code/redeem'; - - const excludedBody = await rejectWith( - createBuilder(harness, excluded.token).post(redeemPath), - APIErrorCodes.CAPTCHA_REQUIRED, - ); - expect(excludedBody).not.toHaveProperty('altcha_challenge'); - - const includedBody = await rejectWith( - createBuilder(harness, included.token).post(redeemPath), - APIErrorCodes.CAPTCHA_REQUIRED, - ); - const token = await solve(includedBody.altcha_challenge as Challenge); - const solved = await createBuilder(harness, included.token) - .post(redeemPath) - .header('X-Captcha-Token', token) - .header('X-Captcha-Type', 'altcha') - .executeRaw(); - expect([APIErrorCodes.CAPTCHA_REQUIRED, APIErrorCodes.INVALID_CAPTCHA]).not.toContain(solved.json?.code); - - const classic = await createBuilder(harness, included.token) - .post(redeemPath) - .header('X-Captcha-Token', 'hcaptcha-token') - .header('X-Captcha-Type', 'hcaptcha') - .executeRaw(); - expect([APIErrorCodes.CAPTCHA_REQUIRED, APIErrorCodes.INVALID_CAPTCHA]).not.toContain(classic.json?.code); - }); -}); diff --git a/fluxer_api/src/api/auth/tests/CaptchaBypassFlags.test.ts b/fluxer_api/src/api/auth/tests/CaptchaBypassFlags.test.ts index c7c390b61..adf5f82df 100644 --- a/fluxer_api/src/api/auth/tests/CaptchaBypassFlags.test.ts +++ b/fluxer_api/src/api/auth/tests/CaptchaBypassFlags.test.ts @@ -6,26 +6,13 @@ import { createUniqueUsername, registerUser, } from '@app/api/auth/tests/AuthTestUtils'; -import {Config} from '@app/api/Config'; import type {ApiTestHarness} from '@app/api/test/ApiTestHarness'; +import {CAPTCHA_TEST_HEADER, useCheapCaptcha} from '@app/api/test/CaptchaTestUtils'; import {HTTP_STATUS} from '@app/api/test/TestConstants'; import {createBuilderWithoutAuth} from '@app/api/test/TestRequestBuilder'; import {APIErrorCodes} from '@fluxer/constants/src/ApiErrorCodes'; import {afterAll, beforeAll, beforeEach, describe, expect, it} from 'vitest'; -async function withCaptchaEnabled(run: () => Promise): Promise { - const previousEnabled = Config.captcha.enabled; - const previousTestModeEnabled = Config.dev.testModeEnabled; - Config.captcha.enabled = true; - Config.dev.testModeEnabled = true; - try { - return await run(); - } finally { - Config.captcha.enabled = previousEnabled; - Config.dev.testModeEnabled = previousTestModeEnabled; - } -} - async function registerAndFlag( harness: ApiTestHarness, flags: Array, @@ -56,29 +43,28 @@ describe('Auth Captcha Bypass Flags', () => { }); beforeEach(async () => { await harness.reset(); + await useCheapCaptcha(); }); afterAll(async () => { await harness?.shutdown(); }); it('lets APP_STORE_REVIEWER accounts log in without solving a captcha', async () => { const account = await registerAndFlag(harness, ['APP_STORE_REVIEWER']); - await withCaptchaEnabled(async () => { - const resp = await createBuilderWithoutAuth<{token?: string; user_id?: string}>(harness) - .post('/auth/login') - .body({email: account.email, password: account.password}) - .execute(); - expect(resp.token).toBeTruthy(); - expect(resp.user_id).toBe(account.userId); - }); + const resp = await createBuilderWithoutAuth<{token?: string; user_id?: string}>(harness) + .post('/auth/login') + .header(CAPTCHA_TEST_HEADER, 'true') + .body({email: account.email, password: account.password}) + .execute(); + expect(resp.token).toBeTruthy(); + expect(resp.user_id).toBe(account.userId); }); it('still requires a captcha for accounts without the APP_STORE_REVIEWER flag', async () => { const account = await registerAndFlag(harness, []); - await withCaptchaEnabled(async () => { - await createBuilderWithoutAuth(harness) - .post('/auth/login') - .body({email: account.email, password: account.password}) - .expect(HTTP_STATUS.BAD_REQUEST, APIErrorCodes.CAPTCHA_REQUIRED) - .execute(); - }); + await createBuilderWithoutAuth(harness) + .post('/auth/login') + .header(CAPTCHA_TEST_HEADER, 'true') + .body({email: account.email, password: account.password}) + .expect(HTTP_STATUS.BAD_REQUEST, APIErrorCodes.CAPTCHA_REQUIRED) + .execute(); }); }); diff --git a/fluxer_api/src/api/auth/tests/CaptchaChallenge.test.ts b/fluxer_api/src/api/auth/tests/CaptchaChallenge.test.ts new file mode 100644 index 000000000..92f9e40cc --- /dev/null +++ b/fluxer_api/src/api/auth/tests/CaptchaChallenge.test.ts @@ -0,0 +1,190 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import {setPhoneRpcConnection} from '@app/api/auth/PhoneVerificationClient'; +import {createTestAccount, setUserACLs, type TestAccount} from '@app/api/auth/tests/AuthTestUtils'; +import {type ApiTestHarness, createApiTestHarness} from '@app/api/test/ApiTestHarness'; +import { + CAPTCHA_TEST_HEADER, + type CaptchaErrorBody, + solveCaptchaChallenge, + useCheapCaptcha, +} from '@app/api/test/CaptchaTestUtils'; +import {HTTP_STATUS} from '@app/api/test/TestConstants'; +import {createBuilder, createBuilderWithoutAuth, type TestRequestBuilder} from '@app/api/test/TestRequestBuilder'; +import {AdminACLs} from '@fluxer/constants/src/AdminACLs'; +import {APIErrorCodes} from '@fluxer/constants/src/ApiErrorCodes'; +import {SuspiciousActivityFlags} from '@fluxer/constants/src/UserConstants'; +import type {CaptchaConfigResponse} from '@fluxer/schema/src/domains/admin/CaptchaSchemas'; +import type {NatsConnection} from '@nats-io/transport-node'; +import {afterAll, afterEach, beforeAll, beforeEach, describe, expect, it} from 'vitest'; + +async function rejectWith(builder: TestRequestBuilder, code: string): Promise { + const {json} = await builder.expect(HTTP_STATUS.BAD_REQUEST, code).executeWithResponse(); + expect(json.code).toBe(code); + return json; +} + +function forgot(harness: ApiTestHarness): TestRequestBuilder { + return createBuilderWithoutAuth(harness) + .post('/auth/forgot') + .header(CAPTCHA_TEST_HEADER, 'true') + .body({email: 'captcha-nobody@example.com'}); +} + +async function createPhoneRequiredAccount(harness: ApiTestHarness): Promise { + const account = await createTestAccount(harness); + await createBuilder(harness, '') + .post(`/test/users/${account.userId}/security-flags`) + .body({email_verified: true, suspicious_activity_flags: SuspiciousActivityFlags.REQUIRE_VERIFIED_PHONE}) + .expect(HTTP_STATUS.OK) + .execute(); + return account; +} + +function usePhoneServiceThatAsksForCaptcha(): Array { + const captchaPassed: Array = []; + const connection = { + async request(_subject: string, payload: string) { + const passed = (JSON.parse(payload) as {captcha_passed: boolean}).captcha_passed; + captchaPassed.push(passed); + const reply = passed + ? {result: 'sms_sent'} + : { + result: 'error', + code: 'captcha_required', + retry_after_s: null, + rate_limit_scope: null, + limit: null, + message: null, + }; + return {string: () => JSON.stringify(reply)}; + }, + } as unknown as NatsConnection; + setPhoneRpcConnection(() => connection); + return captchaPassed; +} + +function sendPhoneCode(harness: ApiTestHarness, account: TestAccount): TestRequestBuilder { + return createBuilder(harness, account.token) + .post('/users/@me/phone/send-verification') + .header(CAPTCHA_TEST_HEADER, 'true') + .body({phone: '+15551230001'}); +} + +async function turnCaptchaOff(harness: ApiTestHarness): Promise { + const admin = await setUserACLs(harness, await createTestAccount(harness), [ + AdminACLs.AUTHENTICATE, + AdminACLs.INSTANCE_CONFIG_VIEW, + AdminACLs.INSTANCE_CONFIG_UPDATE, + ]); + await createBuilder(harness, admin.token) + .patch('/admin/instance/config') + .body({captcha: {enabled: false}}) + .execute(); +} + +describe('Captcha challenge', () => { + let harness: ApiTestHarness; + + beforeAll(async () => { + harness = await createApiTestHarness(); + }); + + beforeEach(async () => { + await harness.reset(); + await useCheapCaptcha(); + }); + + afterEach(() => { + setPhoneRpcConnection(null); + }); + + afterAll(async () => { + await harness.shutdown(); + }); + + it('issues an ALTCHA challenge to a request without a token', async () => { + const required = await rejectWith(forgot(harness), APIErrorCodes.CAPTCHA_REQUIRED); + expect(required.captcha_provider).toBe('altcha'); + expect(required.altcha_challenge?.parameters).toMatchObject({ + algorithm: 'PBKDF2/SHA-256', + cost: 1000, + keyLength: 32, + }); + expect(required.altcha_challenge?.signature).toBeTruthy(); + }); + + it('accepts a solved challenge once and answers a replay with a fresh challenge', async () => { + const required = await rejectWith(forgot(harness), APIErrorCodes.CAPTCHA_REQUIRED); + const token = await solveCaptchaChallenge(required); + + await forgot(harness).header('X-Captcha-Token', token).expect(HTTP_STATUS.NO_CONTENT).execute(); + + const replayed = await rejectWith(forgot(harness).header('X-Captcha-Token', token), APIErrorCodes.INVALID_CAPTCHA); + expect(replayed.captcha_provider).toBe('altcha'); + expect(replayed.altcha_challenge?.signature).toBeTruthy(); + expect(replayed.altcha_challenge?.signature).not.toBe(required.altcha_challenge?.signature); + }); + + it('rejects a payload whose derived key does not match the challenge', async () => { + const required = await rejectWith(forgot(harness), APIErrorCodes.CAPTCHA_REQUIRED); + const challenge = required.altcha_challenge; + const forged = Buffer.from( + JSON.stringify({ + challenge: {parameters: challenge?.parameters, signature: challenge?.signature}, + solution: {counter: 1, derivedKey: '00'.repeat(32)}, + }), + 'utf8', + ).toString('base64'); + + const rejected = await rejectWith(forgot(harness).header('X-Captcha-Token', forged), APIErrorCodes.INVALID_CAPTCHA); + expect(rejected.altcha_challenge?.signature).toBeTruthy(); + }); + + it('skips the check once an admin turns it off', async () => { + const admin = await setUserACLs(harness, await createTestAccount(harness), [ + AdminACLs.AUTHENTICATE, + AdminACLs.INSTANCE_CONFIG_VIEW, + AdminACLs.INSTANCE_CONFIG_UPDATE, + ]); + + const updated = await createBuilder<{captcha: CaptchaConfigResponse}>(harness, admin.token) + .patch('/admin/instance/config') + .body({captcha: {enabled: false}}) + .execute(); + expect(updated.captcha).toEqual({enabled: false, cost: 1000, max_counter: 100}); + + await forgot(harness).expect(HTTP_STATUS.NO_CONTENT).execute(); + }); + + it('challenges a phone send the phone service flags and lets it through once solved', async () => { + const captchaPassed = usePhoneServiceThatAsksForCaptcha(); + const account = await createPhoneRequiredAccount(harness); + const required = await rejectWith(sendPhoneCode(harness, account), APIErrorCodes.CAPTCHA_REQUIRED); + expect(required.altcha_challenge?.signature).toBeTruthy(); + expect(captchaPassed).toEqual([false]); + const token = await solveCaptchaChallenge(required); + + await sendPhoneCode(harness, account).header('X-Captcha-Token', token).expect(HTTP_STATUS.OK).execute(); + expect(captchaPassed).toEqual([false, true]); + }); + + it('refuses a flagged phone send while the check is off', async () => { + await turnCaptchaOff(harness); + const captchaPassed = usePhoneServiceThatAsksForCaptcha(); + const account = await createPhoneRequiredAccount(harness); + + const {response, json} = await sendPhoneCode(harness, account).executeRaw(); + expect(response.status).toBe(429); + expect(json).toMatchObject({code: APIErrorCodes.PHONE_RATE_LIMIT_EXCEEDED}); + expect(captchaPassed).toEqual([false]); + }); + + it('skips the check in test mode unless the request opts in', async () => { + await createBuilderWithoutAuth(harness) + .post('/auth/forgot') + .body({email: 'captcha-nobody@example.com'}) + .expect(HTTP_STATUS.NO_CONTENT) + .execute(); + }); +}); diff --git a/fluxer_api/src/api/auth/tests/PhoneVerificationClient.test.ts b/fluxer_api/src/api/auth/tests/PhoneVerificationClient.test.ts index 63e4acdc3..006793e01 100644 --- a/fluxer_api/src/api/auth/tests/PhoneVerificationClient.test.ts +++ b/fluxer_api/src/api/auth/tests/PhoneVerificationClient.test.ts @@ -146,6 +146,9 @@ describe('phone verification client', () => { for (const code of ['unavailable', 'deadline_exceeded', 'unsupported_contract'] as const) { expect(errorForPhoneReply({code, ...blank})).toBeInstanceOf(SmsVerificationUnavailableError); } + const captchaRequired = errorForPhoneReply({code: 'captcha_required', ...blank}); + expect(captchaRequired).toBeInstanceOf(RateLimitError); + expect((captchaRequired as RateLimitError).code).toBe(APIErrorCodes.PHONE_RATE_LIMIT_EXCEEDED); }); }); diff --git a/fluxer_api/src/api/auth/tests/Registration.test.ts b/fluxer_api/src/api/auth/tests/Registration.test.ts index 9fcb9c6f5..1480101bf 100644 --- a/fluxer_api/src/api/auth/tests/Registration.test.ts +++ b/fluxer_api/src/api/auth/tests/Registration.test.ts @@ -87,6 +87,7 @@ describe('Auth registration', () => { expect(reg.user_id.length).toBeGreaterThan(0); }); it('grants wildcard admin ACL to first accepted local dev registration', async () => { + await getInstanceConfigRepository().updateCaptchaConfig({enabled: false}); await withBootstrapAdminConfig({selfHosted: false, testModeEnabled: false}, async () => { const first = await registerUser(harness, bootstrapRegistrationBodyWithDnsEmail('localdevadminone')); const second = await registerUser(harness, bootstrapRegistrationBodyWithDnsEmail('localdevadmintwo')); diff --git a/fluxer_api/src/api/channel/controllers/ChannelController.ts b/fluxer_api/src/api/channel/controllers/ChannelController.ts index ba602bbfc..4516ac60e 100644 --- a/fluxer_api/src/api/channel/controllers/ChannelController.ts +++ b/fluxer_api/src/api/channel/controllers/ChannelController.ts @@ -220,7 +220,7 @@ export function ChannelController(app: HonoApp) { operationId: 'add_group_dm_recipient', summary: 'Add recipient to group DM', description: - 'Adds a user to a group direct message channel. The requesting user must be a member of the group DM. Requires CAPTCHA verification.', + 'Adds a user to a group direct message channel. The requesting user must be a member of the group DM. Requires a solved captcha challenge (X-Captcha-Token).', responseSchema: null, statusCode: 204, security: ['botToken', 'bearerToken', 'sessionToken'], diff --git a/fluxer_api/src/api/channel/tests/GroupDmCaptchaRateLimit.test.ts b/fluxer_api/src/api/channel/tests/GroupDmCaptchaRateLimit.test.ts index f12c6e1af..6be8e43f0 100644 --- a/fluxer_api/src/api/channel/tests/GroupDmCaptchaRateLimit.test.ts +++ b/fluxer_api/src/api/channel/tests/GroupDmCaptchaRateLimit.test.ts @@ -1,13 +1,13 @@ // SPDX-License-Identifier: AGPL-3.0-or-later import {createTestAccount, type TestAccount} from '@app/api/auth/tests/AuthTestUtils'; -import {Config} from '@app/api/Config'; import { createFriendship, createGroupDmChannel, type GroupDmChannelResponse, } from '@app/api/channel/tests/ChannelTestUtils'; import {type ApiTestHarness, createApiTestHarness} from '@app/api/test/ApiTestHarness'; +import {CAPTCHA_TEST_HEADER, issueSolvedCaptchaToken, useCheapCaptcha} from '@app/api/test/CaptchaTestUtils'; import {HTTP_STATUS} from '@app/api/test/TestConstants'; import {createBuilder} from '@app/api/test/TestRequestBuilder'; import {APIErrorCodes} from '@fluxer/constants/src/ApiErrorCodes'; @@ -15,22 +15,8 @@ import {ChannelTypes} from '@fluxer/constants/src/ChannelConstants'; import {afterAll, beforeAll, beforeEach, describe, expect, it} from 'vitest'; const HTTP_TOO_MANY_REQUESTS = 429; -const TEST_CAPTCHA_TOKEN = 'test-captcha-token'; const RATE_LIMIT_TEST_HEADER = 'x-fluxer-test-enable-rate-limits'; -async function withCaptchaEnabled(run: () => Promise): Promise { - const previousEnabled = Config.captcha.enabled; - const previousTestModeEnabled = Config.dev.testModeEnabled; - Config.captcha.enabled = true; - Config.dev.testModeEnabled = true; - try { - return await run(); - } finally { - Config.captcha.enabled = previousEnabled; - Config.dev.testModeEnabled = previousTestModeEnabled; - } -} - async function createGroupDmWithCaptcha( harness: ApiTestHarness, owner: TestAccount, @@ -38,7 +24,8 @@ async function createGroupDmWithCaptcha( ): Promise { return await createBuilder(harness, owner.token) .post('/users/@me/channels') - .header('x-captcha-token', TEST_CAPTCHA_TOKEN) + .header(CAPTCHA_TEST_HEADER, 'true') + .header('x-captcha-token', await issueSolvedCaptchaToken(harness)) .body({recipients: recipientIds}) .expect(HTTP_STATUS.OK) .execute(); @@ -51,6 +38,7 @@ describe('Group DM captcha and rate limits', () => { }); beforeEach(async () => { await harness.reset(); + await useCheapCaptcha(); }); afterAll(async () => { await harness?.shutdown(); @@ -62,21 +50,20 @@ describe('Group DM captcha and rate limits', () => { const groupDmRecipient = await createTestAccount(harness); await createFriendship(harness, owner, dmRecipient); await createFriendship(harness, owner, groupDmRecipient); - await withCaptchaEnabled(async () => { - const dm = await createBuilder<{type: number}>(harness, owner.token) - .post('/users/@me/channels') - .body({recipient_id: dmRecipient.userId}) - .expect(HTTP_STATUS.OK) - .execute(); - expect(dm.type).toBe(ChannelTypes.DM); - await createBuilder(harness, owner.token) - .post('/users/@me/channels') - .body({recipients: [groupDmRecipient.userId]}) - .expect(HTTP_STATUS.BAD_REQUEST, APIErrorCodes.CAPTCHA_REQUIRED) - .execute(); - const groupDm = await createGroupDmWithCaptcha(harness, owner, [groupDmRecipient.userId]); - expect(groupDm.type).toBe(ChannelTypes.GROUP_DM); - }); + const dm = await createBuilder<{type: number}>(harness, owner.token) + .post('/users/@me/channels') + .body({recipient_id: dmRecipient.userId}) + .expect(HTTP_STATUS.OK) + .execute(); + expect(dm.type).toBe(ChannelTypes.DM); + await createBuilder(harness, owner.token) + .post('/users/@me/channels') + .header(CAPTCHA_TEST_HEADER, 'true') + .body({recipients: [groupDmRecipient.userId]}) + .expect(HTTP_STATUS.BAD_REQUEST, APIErrorCodes.CAPTCHA_REQUIRED) + .execute(); + const groupDm = await createGroupDmWithCaptcha(harness, owner, [groupDmRecipient.userId]); + expect(groupDm.type).toBe(ChannelTypes.GROUP_DM); }); it('requires captcha when adding a recipient to an existing group DM', async () => { @@ -86,43 +73,43 @@ describe('Group DM captcha and rate limits', () => { await createFriendship(harness, owner, member); await createFriendship(harness, owner, newMember); const groupDm = await createGroupDmChannel(harness, owner.token, [member.userId]); - await withCaptchaEnabled(async () => { - await createBuilder(harness, owner.token) - .put(`/channels/${groupDm.id}/recipients/${newMember.userId}`) - .body(null) - .expect(HTTP_STATUS.BAD_REQUEST, APIErrorCodes.CAPTCHA_REQUIRED) - .execute(); - await createBuilder(harness, owner.token) - .put(`/channels/${groupDm.id}/recipients/${newMember.userId}`) - .header('x-captcha-token', TEST_CAPTCHA_TOKEN) - .body(null) - .expect(HTTP_STATUS.NO_CONTENT) - .execute(); - }); + await createBuilder(harness, owner.token) + .put(`/channels/${groupDm.id}/recipients/${newMember.userId}`) + .header(CAPTCHA_TEST_HEADER, 'true') + .body(null) + .expect(HTTP_STATUS.BAD_REQUEST, APIErrorCodes.CAPTCHA_REQUIRED) + .execute(); + await createBuilder(harness, owner.token) + .put(`/channels/${groupDm.id}/recipients/${newMember.userId}`) + .header(CAPTCHA_TEST_HEADER, 'true') + .header('x-captcha-token', await issueSolvedCaptchaToken(harness)) + .body(null) + .expect(HTTP_STATUS.NO_CONTENT) + .execute(); }); it('limits group DM creation to 10 per user per hour', async () => { const owner = await createTestAccount(harness); const recipient = await createTestAccount(harness); await createFriendship(harness, owner, recipient); - await withCaptchaEnabled(async () => { - for (let index = 0; index < 10; index++) { - await createBuilder(harness, owner.token) - .post('/users/@me/channels') - .header(RATE_LIMIT_TEST_HEADER, 'true') - .header('x-captcha-token', TEST_CAPTCHA_TOKEN) - .body({recipients: [recipient.userId]}) - .expect(HTTP_STATUS.OK) - .execute(); - } + for (let index = 0; index < 10; index++) { await createBuilder(harness, owner.token) .post('/users/@me/channels') .header(RATE_LIMIT_TEST_HEADER, 'true') - .header('x-captcha-token', TEST_CAPTCHA_TOKEN) + .header(CAPTCHA_TEST_HEADER, 'true') + .header('x-captcha-token', await issueSolvedCaptchaToken(harness)) .body({recipients: [recipient.userId]}) - .expect(HTTP_TOO_MANY_REQUESTS, APIErrorCodes.RATE_LIMITED) + .expect(HTTP_STATUS.OK) .execute(); - }); + } + await createBuilder(harness, owner.token) + .post('/users/@me/channels') + .header(RATE_LIMIT_TEST_HEADER, 'true') + .header(CAPTCHA_TEST_HEADER, 'true') + .header('x-captcha-token', await issueSolvedCaptchaToken(harness)) + .body({recipients: [recipient.userId]}) + .expect(HTTP_TOO_MANY_REQUESTS, APIErrorCodes.RATE_LIMITED) + .execute(); }); it('limits group DM recipient additions to 10 per user per hour', async () => { @@ -136,23 +123,23 @@ describe('Group DM captcha and rate limits', () => { newMembers.push(member); } const groupDm = await createGroupDmChannel(harness, owner.token, [initialMember.userId]); - await withCaptchaEnabled(async () => { - for (let index = 0; index < 10; index++) { - await createBuilder(harness, owner.token) - .put(`/channels/${groupDm.id}/recipients/${newMembers[index].userId}`) - .header(RATE_LIMIT_TEST_HEADER, 'true') - .header('x-captcha-token', TEST_CAPTCHA_TOKEN) - .body(null) - .expect(HTTP_STATUS.NO_CONTENT) - .execute(); - } + for (let index = 0; index < 10; index++) { await createBuilder(harness, owner.token) - .put(`/channels/${groupDm.id}/recipients/${newMembers[10].userId}`) + .put(`/channels/${groupDm.id}/recipients/${newMembers[index].userId}`) .header(RATE_LIMIT_TEST_HEADER, 'true') - .header('x-captcha-token', TEST_CAPTCHA_TOKEN) + .header(CAPTCHA_TEST_HEADER, 'true') + .header('x-captcha-token', await issueSolvedCaptchaToken(harness)) .body(null) - .expect(HTTP_TOO_MANY_REQUESTS, APIErrorCodes.RATE_LIMITED) + .expect(HTTP_STATUS.NO_CONTENT) .execute(); - }); + } + await createBuilder(harness, owner.token) + .put(`/channels/${groupDm.id}/recipients/${newMembers[10].userId}`) + .header(RATE_LIMIT_TEST_HEADER, 'true') + .header(CAPTCHA_TEST_HEADER, 'true') + .header('x-captcha-token', await issueSolvedCaptchaToken(harness)) + .body(null) + .expect(HTTP_TOO_MANY_REQUESTS, APIErrorCodes.RATE_LIMITED) + .execute(); }); }); diff --git a/fluxer_api/src/api/config/APIConfig.ts b/fluxer_api/src/api/config/APIConfig.ts index 1f876eafd..53fd1642b 100644 --- a/fluxer_api/src/api/config/APIConfig.ts +++ b/fluxer_api/src/api/config/APIConfig.ts @@ -191,18 +191,6 @@ export interface APIConfig { breachedPasswordCheck: { enabled: boolean; }; - captcha: { - enabled: boolean; - provider: 'hcaptcha' | 'turnstile' | 'none'; - hcaptcha?: { - siteKey: string; - secretKey: string; - }; - turnstile?: { - siteKey: string; - secretKey: string; - }; - }; contentModeration: { nsfwThreshold: number; }; diff --git a/fluxer_api/src/api/experiment/ExperimentController.ts b/fluxer_api/src/api/experiment/ExperimentController.ts index 3d16f592a..63fddf48f 100644 --- a/fluxer_api/src/api/experiment/ExperimentController.ts +++ b/fluxer_api/src/api/experiment/ExperimentController.ts @@ -9,7 +9,6 @@ import {RateLimitConfigs} from '@app/api/RateLimitConfig'; import type {HonoApp} from '@app/api/types/HonoEnv'; import {entityTagMatches} from '@app/api/utils/EntityTag'; import {Headers as HttpHeaders} from '@fluxer/constants/src/Headers'; -import {resolveAltchaCaptchaAssignment} from '@fluxer/schema/src/domains/admin/AltchaCaptchaSchemas'; import {resolveDomainMigrationAssignment} from '@fluxer/schema/src/domains/admin/DomainMigrationSchemas'; import {ExperimentAssignmentsResponse} from '@fluxer/schema/src/domains/experiment/ExperimentSchemas'; @@ -30,20 +29,18 @@ export function ExperimentController(app: HonoApp) { }), async (ctx) => { const instanceConfigRepository = ctx.get('instanceConfigRepository'); - const [delivery, domainMigrationConfig, altchaCaptchaConfig] = await Promise.all([ + const [delivery, domainMigrationConfig] = await Promise.all([ instanceConfigRepository.getExperimentDeliveryConfig(), instanceConfigRepository.getDomainMigrationConfig(), - instanceConfigRepository.getAltchaCaptchaConfig(), ]); const user = ctx.get('user'); const userId = user.id.toString(); - const targeting = await resolveExperimentTargeting(user, [domainMigrationConfig, altchaCaptchaConfig]); + const targeting = await resolveExperimentTargeting(user, [domainMigrationConfig]); const body: ExperimentAssignmentsResponse = { poll_interval_seconds: delivery.poll_interval_seconds, poll_jitter_percent: delivery.poll_jitter_percent, assignments: { domain_migration: resolveDomainMigrationAssignment(domainMigrationConfig, userId, targeting), - altcha_captcha: resolveAltchaCaptchaAssignment(altchaCaptchaConfig, userId, targeting), }, }; const etag = `"${createHash('sha256').update(JSON.stringify(body)).digest('hex')}"`; diff --git a/fluxer_api/src/api/experiment/ExperimentTargeting.ts b/fluxer_api/src/api/experiment/ExperimentTargeting.ts index 3ac741bd8..f6aded31f 100644 --- a/fluxer_api/src/api/experiment/ExperimentTargeting.ts +++ b/fluxer_api/src/api/experiment/ExperimentTargeting.ts @@ -11,11 +11,6 @@ interface TargetableExperimentConfig { const NO_GUILDS: ReadonlySet = new Set(); -export const ANONYMOUS_EXPERIMENT_TARGETING: ExperimentTargeting = { - memberGuildIds: NO_GUILDS, - premium: false, -}; - export async function resolveExperimentTargeting( user: User, configs: ReadonlyArray, diff --git a/fluxer_api/src/api/experiment/tests/ExperimentController.test.ts b/fluxer_api/src/api/experiment/tests/ExperimentController.test.ts index 19eb82e1a..e08228f0f 100644 --- a/fluxer_api/src/api/experiment/tests/ExperimentController.test.ts +++ b/fluxer_api/src/api/experiment/tests/ExperimentController.test.ts @@ -9,10 +9,6 @@ import {createBuilder, createBuilderWithoutAuth} from '@app/api/test/TestRequest import {grantPremium} from '@app/api/user/tests/UserTestUtils'; import {AdminACLs} from '@fluxer/constants/src/AdminACLs'; import {UserPremiumTypes} from '@fluxer/constants/src/UserConstants'; -import { - DEFAULT_ALTCHA_CAPTCHA_CONFIG, - INERT_ALTCHA_CAPTCHA_ASSIGNMENT, -} from '@fluxer/schema/src/domains/admin/AltchaCaptchaSchemas'; import { DEFAULT_DOMAIN_MIGRATION_CONFIG, INERT_DOMAIN_MIGRATION_ASSIGNMENT, @@ -58,7 +54,6 @@ describe('GET /experiments', () => { poll_jitter_percent: DEFAULT_EXPERIMENT_POLL_JITTER_PERCENT, assignments: { domain_migration: INERT_DOMAIN_MIGRATION_ASSIGNMENT, - altcha_captcha: INERT_ALTCHA_CAPTCHA_ASSIGNMENT, }, }); }); @@ -109,62 +104,6 @@ describe('GET /experiments', () => { expect(body.assignments.domain_migration).toEqual({enabled: false}); }); - it('resolves the altcha captcha caller through the allowlist and the exclusion list', async () => { - const targeted = await createTestAccount(harness); - const excluded = await createTestAccount(harness); - await getInstanceConfigRepository().setAltchaCaptchaConfig({ - ...DEFAULT_ALTCHA_CAPTCHA_CONFIG, - enabled: true, - rollout_basis_points: 10000, - anonymous_enabled: true, - included_user_ids: [targeted.userId], - excluded_user_ids: [excluded.userId], - }); - - const targetedBody = await createBuilder(harness, targeted.token) - .get(ENDPOINT) - .execute(); - expect(targetedBody.assignments.altcha_captcha).toEqual({enabled: true}); - - const excludedBody = await createBuilder(harness, excluded.token) - .get(ENDPOINT) - .execute(); - expect(excludedBody.assignments.altcha_captcha).toEqual({enabled: false}); - }); - - it('bumps the altcha captcha config version on every admin update without the client sending one', async () => { - const admin = await setUserACLs(harness, await createTestAccount(harness), [ - AdminACLs.AUTHENTICATE, - AdminACLs.INSTANCE_CONFIG_VIEW, - AdminACLs.INSTANCE_CONFIG_UPDATE, - ]); - - const afterFirst = await createBuilder<{altcha_captcha: {config_version: number; enabled: boolean}}>( - harness, - admin.token, - ) - .patch('/admin/instance/config') - .body({altcha_captcha: {enabled: true, included_user_ids: [admin.userId]}}) - .execute(); - expect(afterFirst.altcha_captcha).toMatchObject({config_version: 1, enabled: true}); - - const afterSecond = await createBuilder<{ - altcha_captcha: {config_version: number; anonymous_enabled: boolean; cost: number; max_counter: number}; - }>(harness, admin.token) - .patch('/admin/instance/config') - .body({altcha_captcha: {anonymous_enabled: true, cost: 2000, max_counter: 400}}) - .execute(); - expect(afterSecond.altcha_captcha).toMatchObject({ - config_version: 2, - anonymous_enabled: true, - cost: 2000, - max_counter: 400, - }); - - const body = await createBuilder(harness, admin.token).get(ENDPOINT).execute(); - expect(body.assignments.altcha_captcha).toEqual({enabled: true}); - }); - it('enrols members of an included guild in every experiment and leaves everyone else out', async () => { const owner = await createTestAccount(harness); const member = await createTestAccount(harness); @@ -179,23 +118,16 @@ describe('GET /experiments', () => { enabled: true, included_guild_ids: [guild.id], }); - await repository.setAltchaCaptchaConfig({ - ...DEFAULT_ALTCHA_CAPTCHA_CONFIG, - enabled: true, - included_guild_ids: [guild.id], - }); const memberBody = await createBuilder(harness, member.token) .get(ENDPOINT) .execute(); expect(memberBody.assignments.domain_migration).toEqual({enabled: true}); - expect(memberBody.assignments.altcha_captcha).toEqual({enabled: true}); const outsiderBody = await createBuilder(harness, outsider.token) .get(ENDPOINT) .execute(); expect(outsiderBody.assignments.domain_migration).toEqual({enabled: false}); - expect(outsiderBody.assignments.altcha_captcha).toEqual({enabled: false}); }); it('enrols premium users, subscription and lifetime alike, when the switch is on', async () => { @@ -227,19 +159,15 @@ describe('GET /experiments', () => { ]); const guildIds = ['1500000000000000001', '1500000000000000002']; const body = await createBuilder< - Record<'domain_migration' | 'altcha_captcha', {included_guild_ids: Array; include_premium_users: boolean}> + Record<'domain_migration', {included_guild_ids: Array; include_premium_users: boolean}> >(harness, admin.token) .patch('/admin/instance/config') .body({ domain_migration: {included_guild_ids: guildIds, include_premium_users: true}, - altcha_captcha: {included_guild_ids: guildIds, include_premium_users: true}, }) .execute(); expect(body.domain_migration.included_guild_ids).toEqual(guildIds); - expect(body.altcha_captcha.included_guild_ids).toEqual(guildIds); - for (const section of [body.domain_migration, body.altcha_captcha]) { - expect(section.include_premium_users).toBe(true); - } + expect(body.domain_migration.include_premium_users).toBe(true); }); it('revalidates with a strong etag and answers 304 when nothing changed', async () => { diff --git a/fluxer_api/src/api/instance/InstanceConfigRepository.test.ts b/fluxer_api/src/api/instance/InstanceConfigRepository.test.ts index 672c54691..d2e2a3eaf 100644 --- a/fluxer_api/src/api/instance/InstanceConfigRepository.test.ts +++ b/fluxer_api/src/api/instance/InstanceConfigRepository.test.ts @@ -39,6 +39,7 @@ const EXPERIMENT_DELIVERY_CONFIG_KEY = 'experiment_delivery_config'; const APP_PUBLIC_CONFIG_KEY = 'app_public_config'; const INSTANCE_POLICY_CONFIG_KEY = 'instance_policy_config'; const INSTANCE_INTEGRATIONS_CONFIG_KEY = 'instance_integrations_config'; +const LEGACY_ALTCHA_CAPTCHA_CONFIG_KEY = 'altcha_captcha_config'; const REGISTRATION_CONFIG_KEY = 'registration_config'; const REGISTRATION_URLS_KEY = 'registration_urls'; const REGISTRATION_PENDING_APPROVALS_KEY = 'registration_pending_approvals'; @@ -150,36 +151,54 @@ describe('InstanceConfigRepository', () => { }); }); - it('reports the effective captcha provider as none while the selected pair is incomplete', async () => { - const executor = new CountingInMemoryCassandraQueryExecutor(); - setCassandraQueryExecutorForTesting(executor); - const kvProvider = new MockKVProvider(); - const repository = createRepository(kvProvider); + it('turns the captcha on at the default difficulty when no row is stored', async () => { + setCassandraQueryExecutorForTesting(new CountingInMemoryCassandraQueryExecutor()); + const repository = createRepository(new MockKVProvider()); - await repository.setInstanceIntegrationsConfig({ - captcha: { - provider: 'turnstile', - hcaptcha_site_key: 'hcaptcha-site-key', - hcaptcha_secret_key: 'hcaptcha-secret-key', - }, - }); + await expect(repository.getCaptchaConfig()).resolves.toEqual({enabled: true, cost: 5000, max_counter: 1000}); + }); - await expect(repository.getEffectiveCaptchaConfig()).resolves.toMatchObject({ - enabled: false, - provider: 'none', - }); + it('ignores a legacy altcha captcha row that turned the experiment off', async () => { + setCassandraQueryExecutorForTesting(new CountingInMemoryCassandraQueryExecutor()); + const repository = createRepository(new MockKVProvider()); - await repository.setInstanceIntegrationsConfig({ - captcha: { - turnstile_site_key: 'turnstile-site-key', - turnstile_secret_key: 'turnstile-secret-key', - }, - }); + await repository.setConfig( + LEGACY_ALTCHA_CAPTCHA_CONFIG_KEY, + JSON.stringify({enabled: false, config_version: 4, cost: 5000, max_counter: 10000}), + ); - await expect(repository.getEffectiveCaptchaConfig()).resolves.toMatchObject({ - enabled: true, - provider: 'turnstile', - }); + await expect(repository.getCaptchaConfig()).resolves.toEqual({enabled: true, cost: 5000, max_counter: 1000}); + }); + + it('merges a partial captcha update onto the stored config', async () => { + setCassandraQueryExecutorForTesting(new CountingInMemoryCassandraQueryExecutor()); + const repository = createRepository(new MockKVProvider()); + + await repository.updateCaptchaConfig({cost: 2000}); + await repository.updateCaptchaConfig({enabled: false}); + + await expect(repository.getCaptchaConfig()).resolves.toEqual({enabled: false, cost: 2000, max_counter: 1000}); + }); + + it('drops a legacy captcha integration, secrets included, on the next integrations write', async () => { + setCassandraQueryExecutorForTesting(new CountingInMemoryCassandraQueryExecutor()); + const repository = createRepository(new MockKVProvider()); + + await repository.setConfig( + INSTANCE_INTEGRATIONS_CONFIG_KEY, + JSON.stringify({ + captcha: {provider: 'legacy-provider', site_key: 'legacy-site-key', secret_key: 'legacy-secret-key'}, + youtube: {api_key: 'youtube-key'}, + }), + ); + expect(await repository.getInstanceIntegrationsConfig()).not.toHaveProperty('captcha'); + + await repository.setInstanceIntegrationsConfig({gif: {klipy_api_key: 'klipy-key'}}); + + const stored = JSON.parse((await repository.getConfig(INSTANCE_INTEGRATIONS_CONFIG_KEY)) ?? '{}'); + expect(stored).not.toHaveProperty('captcha'); + expect(stored.youtube.api_key).toBe('youtube-key'); + expect(stored.gif.klipy_api_key).toBe('klipy-key'); }); it('keeps the stored setup state when a branding field is invalid', async () => { diff --git a/fluxer_api/src/api/instance/InstanceConfigRepository.ts b/fluxer_api/src/api/instance/InstanceConfigRepository.ts index 9487f6704..f4a6cd07c 100644 --- a/fluxer_api/src/api/instance/InstanceConfigRepository.ts +++ b/fluxer_api/src/api/instance/InstanceConfigRepository.ts @@ -34,9 +34,10 @@ import { type RegistrationUrlResponse, } from '@fluxer/schema/src/domains/admin/AdminSchemas'; import { - type AltchaCaptchaConfig, - AltchaCaptchaConfigSchema, -} from '@fluxer/schema/src/domains/admin/AltchaCaptchaSchemas'; + type CaptchaConfig, + CaptchaConfigSchema, + type CaptchaConfigUpdateRequest, +} from '@fluxer/schema/src/domains/admin/CaptchaSchemas'; import { type DomainMigrationConfig, DomainMigrationConfigSchema, @@ -64,8 +65,6 @@ import { type InstanceAppPublic, InstanceAppPublicSchema, type InstanceBranding, - type InstanceCaptchaProvider, - InstanceCaptchaProviderSchema, type InstanceCommunity, type InstanceRegistration, InstanceRegistrationSchema, @@ -79,7 +78,7 @@ import {z} from 'zod'; const GATEWAY_ROLLOUT_CONFIG_KEY = 'gateway_rollout_config'; const PUSH_RELAY_CONFIG_KEY = 'push_service_delivery_config'; const DOMAIN_MIGRATION_CONFIG_KEY = 'domain_migration_config'; -const ALTCHA_CAPTCHA_CONFIG_KEY = 'altcha_captcha_config'; +const CAPTCHA_CONFIG_KEY = 'captcha_config'; const EXPERIMENT_DELIVERY_CONFIG_KEY = 'experiment_delivery_config'; const REGISTRATION_CONFIG_KEY = 'registration_config'; const REGISTRATION_URLS_KEY = 'registration_urls'; @@ -189,14 +188,6 @@ interface InstanceYoutubeIntegrationConfig { api_key: string | null; } -interface InstanceCaptchaIntegrationConfig { - provider: InstanceCaptchaProvider | null; - hcaptcha_site_key: string | null; - hcaptcha_secret_key: string | null; - turnstile_site_key: string | null; - turnstile_secret_key: string | null; -} - interface InstanceEmailSmtpIntegrationConfig { host: string | null; port: number | null; @@ -232,7 +223,6 @@ interface InstanceBlueskyIntegrationConfig { interface InstanceIntegrationsConfig { gif: InstanceGifIntegrationConfig; youtube: InstanceYoutubeIntegrationConfig; - captcha: InstanceCaptchaIntegrationConfig; email: InstanceEmailIntegrationConfig; bluesky: InstanceBlueskyIntegrationConfig; } @@ -243,15 +233,6 @@ interface InstanceGifEffectiveConfig { available: boolean; } -export interface InstanceCaptchaEffectiveConfig { - enabled: boolean; - provider: InstanceCaptchaProvider; - hcaptcha_site_key: string | null; - hcaptcha_secret_key: string | null; - turnstile_site_key: string | null; - turnstile_secret_key: string | null; -} - interface InstanceIntegrationsAdminConfig { gif: { klipy_api_key_set: boolean; @@ -261,15 +242,6 @@ interface InstanceIntegrationsAdminConfig { api_key_set: boolean; effective_available: boolean; }; - captcha: { - provider: InstanceCaptchaProvider | null; - effective_provider: InstanceCaptchaProvider; - hcaptcha_site_key: string | null; - hcaptcha_secret_key_set: boolean; - turnstile_site_key: string | null; - turnstile_secret_key_set: boolean; - effective_enabled: boolean; - }; email: { enabled: boolean | null; effective_enabled: boolean; @@ -336,7 +308,6 @@ interface InstanceMediaAdminConfig { interface InstanceIntegrationsConfigPatch { gif?: Partial; youtube?: Partial; - captcha?: Partial; email?: Partial> & { smtp?: Partial; }; @@ -435,7 +406,7 @@ type StoredConfigSection = | 'gateway rollout' | 'push relay' | 'domain migration' - | 'altcha captcha' + | 'captcha' | 'experiment delivery' | 'instance policy' | 'integrations' @@ -596,8 +567,8 @@ function parseStoredDomainMigrationConfig(raw: string | null): DomainMigrationCo return parseStoredConfigOrDefault(DomainMigrationConfigSchema, raw, 'domain migration'); } -function parseStoredAltchaCaptchaConfig(raw: string | null): AltchaCaptchaConfig { - return parseStoredConfigOrDefault(AltchaCaptchaConfigSchema, raw, 'altcha captcha'); +function parseStoredCaptchaConfig(raw: string | null): CaptchaConfig { + return parseStoredConfigOrDefault(CaptchaConfigSchema, raw, 'captcha'); } function parseStoredExperimentDeliveryConfig(raw: string | null): ExperimentDeliveryConfig { @@ -718,15 +689,6 @@ const StoredBlueskyKeysSchema = z const StoredInstanceIntegrationsSchema = z.object({ gif: z.object({klipy_api_key: StoredIntegrationStringSchema}).prefault({}), youtube: z.object({api_key: StoredIntegrationStringSchema}).prefault({}), - captcha: z - .object({ - provider: InstanceCaptchaProviderSchema.nullable().default(null), - hcaptcha_site_key: StoredIntegrationStringSchema, - hcaptcha_secret_key: StoredIntegrationStringSchema, - turnstile_site_key: StoredIntegrationStringSchema, - turnstile_secret_key: StoredIntegrationStringSchema, - }) - .prefault({}), email: z .object({ enabled: StoredNullableBooleanSchema, @@ -1270,7 +1232,7 @@ export class InstanceConfigRepository { ); parseStoredPushRelayConfig(snapshot.get(PUSH_RELAY_CONFIG_KEY) ?? null); parseStoredDomainMigrationConfig(snapshot.get(DOMAIN_MIGRATION_CONFIG_KEY) ?? null); - parseStoredAltchaCaptchaConfig(snapshot.get(ALTCHA_CAPTCHA_CONFIG_KEY) ?? null); + parseStoredCaptchaConfig(snapshot.get(CAPTCHA_CONFIG_KEY) ?? null); parseStoredExperimentDeliveryConfig(snapshot.get(EXPERIMENT_DELIVERY_CONFIG_KEY) ?? null); parseStoredInstancePolicyConfig(snapshot.get(INSTANCE_POLICY_CONFIG_KEY) ?? null); checkStoredConfig('registration', () => @@ -1384,20 +1346,14 @@ export class InstanceConfigRepository { ); } - async getAltchaCaptchaConfig(): Promise { - const raw = await this.getConfig(ALTCHA_CAPTCHA_CONFIG_KEY); - return parseStoredAltchaCaptchaConfig(raw); + async getCaptchaConfig(): Promise { + const raw = await this.getConfig(CAPTCHA_CONFIG_KEY); + return parseStoredCaptchaConfig(raw); } - async setAltchaCaptchaConfig(config: AltchaCaptchaConfig): Promise { - await this.updateAltchaCaptchaConfig(() => config); - } - - updateAltchaCaptchaConfig( - update: (current: AltchaCaptchaConfig) => AltchaCaptchaConfig, - ): Promise { - return this.updateStoredConfig(ALTCHA_CAPTCHA_CONFIG_KEY, (raw) => - validateStoredConfig(AltchaCaptchaConfigSchema, update(parseStoredAltchaCaptchaConfig(raw)), 'altcha captcha'), + updateCaptchaConfig(patch: CaptchaConfigUpdateRequest): Promise { + return this.updateStoredConfig(CAPTCHA_CONFIG_KEY, (raw) => + validateStoredConfig(CaptchaConfigSchema, {...parseStoredCaptchaConfig(raw), ...patch}, 'captcha'), ); } @@ -1545,10 +1501,6 @@ export class InstanceConfigRepository { ...current.youtube, ...(config.youtube ?? {}), }, - captcha: { - ...current.captcha, - ...(config.captcha ?? {}), - }, email: { ...current.email, ...(config.email ?? {}), @@ -1642,33 +1594,6 @@ export class InstanceConfigRepository { return integrations.youtube.api_key ?? normalizeOptionalString(Config.youtube.apiKey); } - async getEffectiveCaptchaConfig(): Promise { - const integrations = await this.getInstanceIntegrationsConfig(); - const provider = integrations.captcha.provider ?? (Config.captcha.enabled ? Config.captcha.provider : 'none'); - const hcaptchaSiteKey = - integrations.captcha.hcaptcha_site_key ?? normalizeOptionalString(Config.captcha.hcaptcha?.siteKey); - const hcaptchaSecretKey = - integrations.captcha.hcaptcha_secret_key ?? normalizeOptionalString(Config.captcha.hcaptcha?.secretKey); - const turnstileSiteKey = - integrations.captcha.turnstile_site_key ?? normalizeOptionalString(Config.captcha.turnstile?.siteKey); - const turnstileSecretKey = - integrations.captcha.turnstile_secret_key ?? normalizeOptionalString(Config.captcha.turnstile?.secretKey); - const providerReady = - provider === 'hcaptcha' - ? Boolean(hcaptchaSiteKey && hcaptchaSecretKey) - : provider === 'turnstile' - ? Boolean(turnstileSiteKey && turnstileSecretKey) - : false; - return { - enabled: providerReady, - provider: providerReady ? provider : 'none', - hcaptcha_site_key: hcaptchaSiteKey, - hcaptcha_secret_key: hcaptchaSecretKey, - turnstile_site_key: turnstileSiteKey, - turnstile_secret_key: turnstileSecretKey, - }; - } - async getEffectiveEmailConfig(): Promise { const integrations = await this.getInstanceIntegrationsConfig(); const provider = integrations.email.provider ?? Config.email.provider; @@ -1731,11 +1656,10 @@ export class InstanceConfigRepository { } async getInstanceIntegrationsAdminConfig(): Promise { - const [integrations, gif, youtubeApiKey, captcha, email, bluesky] = await Promise.all([ + const [integrations, gif, youtubeApiKey, email, bluesky] = await Promise.all([ this.getInstanceIntegrationsConfig(), this.getEffectiveGifConfig(), this.getEffectiveYoutubeApiKey(), - this.getEffectiveCaptchaConfig(), this.getEffectiveEmailConfig(), this.getEffectiveBlueskyConfig(), ]); @@ -1748,17 +1672,6 @@ export class InstanceConfigRepository { api_key_set: secretIsSet(integrations.youtube.api_key) || secretIsSet(Config.youtube.apiKey), effective_available: Boolean(youtubeApiKey), }, - captcha: { - provider: integrations.captcha.provider, - effective_provider: captcha.provider, - hcaptcha_site_key: captcha.hcaptcha_site_key, - hcaptcha_secret_key_set: - secretIsSet(integrations.captcha.hcaptcha_secret_key) || secretIsSet(Config.captcha.hcaptcha?.secretKey), - turnstile_site_key: captcha.turnstile_site_key, - turnstile_secret_key_set: - secretIsSet(integrations.captcha.turnstile_secret_key) || secretIsSet(Config.captcha.turnstile?.secretKey), - effective_enabled: captcha.enabled, - }, email: { enabled: integrations.email.enabled, effective_enabled: email.enabled, diff --git a/fluxer_api/src/api/instance/InstanceController.test.ts b/fluxer_api/src/api/instance/InstanceController.test.ts index 4b29c83a5..94dc69ad9 100644 --- a/fluxer_api/src/api/instance/InstanceController.test.ts +++ b/fluxer_api/src/api/instance/InstanceController.test.ts @@ -14,8 +14,6 @@ import {afterEach, describe, expect, it} from 'vitest'; interface DiscoveryCaptcha { provider: string; - hcaptcha_site_key: string | null; - turnstile_site_key: string | null; } describe('InstanceController discovery captcha', () => { @@ -62,40 +60,15 @@ describe('InstanceController discovery captcha', () => { return ((await response.json()) as {captcha: DiscoveryCaptcha}).captcha; } - it('advertises no provider and no site key while the selected pair is incomplete', async () => { - const repository = createRepository(); - await repository.setInstanceIntegrationsConfig({ - captcha: { - provider: 'turnstile', - hcaptcha_site_key: 'hcaptcha-site-key', - hcaptcha_secret_key: 'hcaptcha-secret-key', - }, - }); - - await expect(readCaptcha(repository)).resolves.toEqual({ - provider: 'none', - hcaptcha_site_key: null, - turnstile_site_key: null, - }); + it('advertises altcha by default', async () => { + await expect(readCaptcha(createRepository())).resolves.toEqual({provider: 'altcha'}); }); - it('advertises only the site key that matches the named provider', async () => { + it('advertises no provider once an admin turns the captcha off', async () => { const repository = createRepository(); - await repository.setInstanceIntegrationsConfig({ - captcha: { - provider: 'turnstile', - hcaptcha_site_key: 'hcaptcha-site-key', - hcaptcha_secret_key: 'hcaptcha-secret-key', - turnstile_site_key: 'turnstile-site-key', - turnstile_secret_key: 'turnstile-secret-key', - }, - }); + await repository.updateCaptchaConfig({enabled: false}); - await expect(readCaptcha(repository)).resolves.toEqual({ - provider: 'turnstile', - hcaptcha_site_key: null, - turnstile_site_key: 'turnstile-site-key', - }); + await expect(readCaptcha(repository)).resolves.toEqual({provider: 'none'}); }); it('publishes the domain migration kill switch and anonymous rollout without the targeting lists', async () => { diff --git a/fluxer_api/src/api/instance/InstanceController.ts b/fluxer_api/src/api/instance/InstanceController.ts index a825eb106..f060e44c0 100644 --- a/fluxer_api/src/api/instance/InstanceController.ts +++ b/fluxer_api/src/api/instance/InstanceController.ts @@ -8,7 +8,6 @@ import { isDiscoveryNotModified, nextDiscoveryValidators, } from '@app/api/instance/DiscoveryValidators'; -import type {InstanceCaptchaEffectiveConfig} from '@app/api/instance/InstanceConfigRepository'; import {RateLimitMiddleware} from '@app/api/middleware/RateLimitMiddleware'; import {OpenAPI} from '@app/api/middleware/ResponseTypeMiddleware'; import {RateLimitConfigs} from '@app/api/RateLimitConfig'; @@ -17,6 +16,7 @@ import type {HonoEnv} from '@app/api/types/HonoEnv'; import {API_CODE_VERSION} from '@fluxer/constants/src/AppConstants'; import {buildDiscoveryResponse, type DiscoveryStaticInput} from '@fluxer/instance_bootstrap/src/BuildDiscovery'; import type {InstanceAppPublic} from '@fluxer/instance_bootstrap/src/Types'; +import type {CaptchaConfig} from '@fluxer/schema/src/domains/admin/CaptchaSchemas'; import {toDomainMigrationDiscovery} from '@fluxer/schema/src/domains/admin/DomainMigrationSchemas'; import {WellKnownFluxerResponse} from '@fluxer/schema/src/domains/instance/InstanceSchemas'; import type {Hono} from 'hono'; @@ -27,7 +27,7 @@ function buildDiscoveryStaticInput( gifService: GifService | undefined, appPublic: InstanceAppPublic, runtime: { - captcha: InstanceCaptchaEffectiveConfig; + captcha: CaptchaConfig; emailEnabled: boolean; }, ): DiscoveryStaticInput { @@ -61,9 +61,7 @@ function buildDiscoveryStaticInput( webapp: Config.endpoints.webApp, }, captcha: { - provider: runtime.captcha.provider, - hcaptcha_site_key: runtime.captcha.provider === 'hcaptcha' ? runtime.captcha.hcaptcha_site_key : null, - turnstile_site_key: runtime.captcha.provider === 'turnstile' ? runtime.captcha.turnstile_site_key : null, + provider: runtime.captcha.enabled ? 'altcha' : 'none', }, features: { voice_enabled: Config.voice.enabled, @@ -111,7 +109,7 @@ export function InstanceController(app: Hono) { instanceConfigRepository.getInstanceCommunityPublicConfig(), instanceConfigRepository.getResolvedServicesConfig(), instanceConfigRepository.getAppPublicConfig(), - instanceConfigRepository.getEffectiveCaptchaConfig(), + instanceConfigRepository.getCaptchaConfig(), instanceConfigRepository.getEffectiveEmailConfig(), instanceConfigRepository.getDomainMigrationConfig(), ]); diff --git a/fluxer_api/src/api/middleware/CaptchaMiddleware.ts b/fluxer_api/src/api/middleware/CaptchaMiddleware.ts index e7e60beee..95fcd4130 100644 --- a/fluxer_api/src/api/middleware/CaptchaMiddleware.ts +++ b/fluxer_api/src/api/middleware/CaptchaMiddleware.ts @@ -2,9 +2,7 @@ import {createHmac} from 'node:crypto'; import {Config} from '@app/api/Config'; -import {ANONYMOUS_EXPERIMENT_TARGETING, resolveExperimentTargeting} from '@app/api/experiment/ExperimentTargeting'; import {sharedListHas} from '@app/api/infrastructure/activity/SharedLists'; -import type {InstanceCaptchaEffectiveConfig} from '@app/api/instance/InstanceConfigRepository'; import {Logger} from '@app/api/Logger'; import {getKVClient} from '@app/api/middleware/ServiceRegistry'; import type {User} from '@app/api/models/User'; @@ -13,22 +11,19 @@ import {extractEmailDomain} from '@app/api/utils/EmailDomainUtils'; import {Headers} from '@fluxer/constants/src/Headers'; import {UserFlags} from '@fluxer/constants/src/UserConstants'; import {CaptchaRequiredError, InvalidCaptchaError} from '@fluxer/errors/src/CaptchaErrors'; -import {extractClientIp} from '@fluxer/ip_utils/src/ClientIp'; -import {type AltchaCaptchaConfig, altchaCaptchaAppliesTo} from '@fluxer/schema/src/domains/admin/AltchaCaptchaSchemas'; -import type {InstanceCaptchaProvider} from '@fluxer/schema/src/domains/instance/InstanceSchemas'; -import {createCaptchaProvider} from '@pkgs/captcha/src/CaptchaProviderFactory'; -import type {ICaptchaProvider} from '@pkgs/captcha/src/ICaptchaProvider'; +import type {CaptchaConfig} from '@fluxer/schema/src/domains/admin/CaptchaSchemas'; import {AltchaProvider} from '@pkgs/captcha/src/providers/AltchaProvider'; import type {Context} from 'hono'; import {createMiddleware} from 'hono/factory'; const ALTCHA_SPENT_CHALLENGE_KEY_PREFIX = 'captcha:altcha:spent:'; +const TEST_ENABLE_CAPTCHA_HEADER = 'x-fluxer-test-enable-captcha'; function deriveAltchaSecret(label: string): string { return createHmac('sha256', Config.auth.sudoModeSecret).update(label).digest('hex'); } -function createAltchaProvider(config: AltchaCaptchaConfig): AltchaProvider { +function createAltchaProvider(config: CaptchaConfig): AltchaProvider { return new AltchaProvider({ hmacSignatureSecret: deriveAltchaSecret('fluxer-altcha-challenge-signature-v1'), hmacKeySignatureSecret: deriveAltchaSecret('fluxer-altcha-key-signature-v1'), @@ -40,85 +35,27 @@ function createAltchaProvider(config: AltchaCaptchaConfig): AltchaProvider { }); } -async function altchaChallengeData(altcha: AltchaProvider | null): Promise | undefined> { - if (!altcha) return undefined; +async function altchaChallengeData(altcha: AltchaProvider): Promise> { return {captcha_provider: 'altcha', altcha_challenge: await altcha.createChallenge()}; } -async function resolveAltchaProvider(ctx: Context, user: User | undefined): Promise { - const config = await ctx.get('instanceConfigRepository').getAltchaCaptchaConfig(); - const targeting = user ? await resolveExperimentTargeting(user, [config]) : ANONYMOUS_EXPERIMENT_TARGETING; - if (!altchaCaptchaAppliesTo(config, user ? user.id.toString() : null, targeting)) return null; - return createAltchaProvider(config); -} - -function resolveProviderSecret( - config: InstanceCaptchaEffectiveConfig, - provider: InstanceCaptchaProvider, -): string | null { - if (provider === 'hcaptcha') { - return config.hcaptcha_secret_key; - } - if (provider === 'turnstile') { - return config.turnstile_secret_key; - } - return null; -} - -function resolveCaptchaProvider( - config: InstanceCaptchaEffectiveConfig, - requestedType: string | undefined, -): ICaptchaProvider { - if (Config.dev.testModeEnabled) { - return createCaptchaProvider({mode: 'test'}); - } - const requestedProvider = - requestedType === 'hcaptcha' || requestedType === 'turnstile' - ? requestedType - : config.provider === 'hcaptcha' || config.provider === 'turnstile' - ? config.provider - : null; - if (!requestedProvider) { - throw new Error('Captcha is enabled but no provider is configured'); - } - const secretKey = resolveProviderSecret(config, requestedProvider); - if (!secretKey) { - throw new InvalidCaptchaError(); - } - return createCaptchaProvider({mode: requestedProvider, secretKey}); -} - -export async function verifyCaptchaToken(ctx: Context): Promise { - const captchaConfig = await ctx.get('instanceConfigRepository').getEffectiveCaptchaConfig(); - if (!captchaConfig.enabled && !(Config.dev.testModeEnabled && Config.captcha.enabled)) return; +export async function verifyCaptchaToken(ctx: Context): Promise { + if (Config.dev.testModeEnabled && ctx.req.header(TEST_ENABLE_CAPTCHA_HEADER) !== 'true') return false; + const config = await ctx.get('instanceConfigRepository').getCaptchaConfig(); + if (!config.enabled) return false; const user = ctx.get('user') as User | undefined; - if (sharedListHas('email_domain_exempt', extractEmailDomain(user?.email))) return; - if (userHasCaptchaExemptFlag(user)) return; - if (await requestUserHasCaptchaExemptFlag(ctx)) return; - const altcha = await resolveAltchaProvider(ctx, user); + if (sharedListHas('email_domain_exempt', extractEmailDomain(user?.email))) return false; + if (userHasCaptchaExemptFlag(user)) return false; + if (await requestUserHasCaptchaExemptFlag(ctx)) return false; + const altcha = createAltchaProvider(config); const token = ctx.req.header(Headers.X_CAPTCHA_TOKEN); if (!token) { throw new CaptchaRequiredError(await altchaChallengeData(altcha)); } - const requestedType = ctx.req.header(Headers.X_CAPTCHA_TYPE); - if (requestedType === 'altcha') { - if (!altcha || !(await altcha.verify({token}))) { - throw new InvalidCaptchaError(await altchaChallengeData(altcha)); - } - return; - } - const provider = resolveCaptchaProvider(captchaConfig, requestedType); - const isValid = await provider.verify({ - token, - remoteIp: - extractClientIp(ctx.req.raw, { - trustClientIpHeader: Config.proxy.trust_client_ip_header, - clientIpHeaderName: Config.proxy.client_ip_header, - }) ?? undefined, - }); - if (!isValid) { + if (!(await altcha.verify({token}))) { throw new InvalidCaptchaError(await altchaChallengeData(altcha)); } + return true; } function userHasCaptchaExemptFlag(user: User | null | undefined): boolean { diff --git a/fluxer_api/src/api/middleware/tests/CaptchaMiddleware.test.ts b/fluxer_api/src/api/middleware/tests/CaptchaMiddleware.test.ts new file mode 100644 index 000000000..66f06f9ea --- /dev/null +++ b/fluxer_api/src/api/middleware/tests/CaptchaMiddleware.test.ts @@ -0,0 +1,73 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import {Config} from '@app/api/Config'; +import type {InstanceConfigRepository} from '@app/api/instance/InstanceConfigRepository'; +import {CaptchaMiddleware} from '@app/api/middleware/CaptchaMiddleware'; +import {CAPTCHA_TEST_HEADER} from '@app/api/test/CaptchaTestUtils'; +import type {HonoEnv} from '@app/api/types/HonoEnv'; +import {AppErrorHandler} from '@fluxer/errors/src/domains/core/ErrorHandlers'; +import {type CaptchaConfig, DEFAULT_CAPTCHA_CONFIG} from '@fluxer/schema/src/domains/admin/CaptchaSchemas'; +import {Hono} from 'hono'; +import {afterEach, beforeEach, describe, expect, it} from 'vitest'; + +const CHEAP_CAPTCHA_CONFIG: CaptchaConfig = {...DEFAULT_CAPTCHA_CONFIG, cost: 1000, max_counter: 100}; + +function createHarness(captcha: CaptchaConfig): (headers: Record) => Promise { + const repository = { + getCaptchaConfig: async () => captcha, + } as unknown as InstanceConfigRepository; + const app = new Hono(); + app.use(async (ctx, next) => { + ctx.set('instanceConfigRepository', repository); + await next(); + }); + app.use(CaptchaMiddleware); + app.post('/auth/register', (ctx) => ctx.text('ok')); + app.onError(AppErrorHandler); + return async (headers) => app.request('http://localhost/auth/register', {method: 'POST', headers}); +} + +describe('CaptchaMiddleware', () => { + let previousTestModeEnabled: boolean; + + beforeEach(() => { + previousTestModeEnabled = Config.dev.testModeEnabled; + Config.dev.testModeEnabled = false; + }); + + afterEach(() => { + Config.dev.testModeEnabled = previousTestModeEnabled; + }); + + it('passes every request while the captcha is disabled', async () => { + const response = await createHarness({...CHEAP_CAPTCHA_CONFIG, enabled: false})({}); + expect(response.status).toBe(200); + }); + + it('passes a test-mode request that does not opt in', async () => { + Config.dev.testModeEnabled = true; + const request = createHarness(CHEAP_CAPTCHA_CONFIG); + expect((await request({})).status).toBe(200); + expect((await request({[CAPTCHA_TEST_HEADER]: 'true'})).status).toBe(400); + }); + + it('answers a request with no token with CAPTCHA_REQUIRED and an ALTCHA challenge', async () => { + const response = await createHarness(CHEAP_CAPTCHA_CONFIG)({}); + expect(response.status).toBe(400); + expect(await response.json()).toMatchObject({ + code: 'CAPTCHA_REQUIRED', + captcha_provider: 'altcha', + altcha_challenge: {parameters: {algorithm: 'PBKDF2/SHA-256', cost: 1000}}, + }); + }); + + it('answers a token that is not an ALTCHA payload with INVALID_CAPTCHA and a fresh challenge', async () => { + const response = await createHarness(CHEAP_CAPTCHA_CONFIG)({'x-captcha-token': 'legacy-provider-token'}); + expect(response.status).toBe(400); + expect(await response.json()).toMatchObject({ + code: 'INVALID_CAPTCHA', + captcha_provider: 'altcha', + altcha_challenge: {parameters: {algorithm: 'PBKDF2/SHA-256'}}, + }); + }); +}); diff --git a/fluxer_api/src/api/middleware/tests/CaptchaProviderHeader.test.ts b/fluxer_api/src/api/middleware/tests/CaptchaProviderHeader.test.ts deleted file mode 100644 index 7460a6cf9..000000000 --- a/fluxer_api/src/api/middleware/tests/CaptchaProviderHeader.test.ts +++ /dev/null @@ -1,67 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -import {Config} from '@app/api/Config'; -import type { - InstanceCaptchaEffectiveConfig, - InstanceConfigRepository, -} from '@app/api/instance/InstanceConfigRepository'; -import {CaptchaMiddleware} from '@app/api/middleware/CaptchaMiddleware'; -import type {HonoEnv} from '@app/api/types/HonoEnv'; -import {AppErrorHandler} from '@fluxer/errors/src/domains/core/ErrorHandlers'; -import {DEFAULT_ALTCHA_CAPTCHA_CONFIG} from '@fluxer/schema/src/domains/admin/AltchaCaptchaSchemas'; -import {Hono} from 'hono'; -import {afterEach, beforeEach, describe, expect, it} from 'vitest'; - -const HCAPTCHA_ONLY: InstanceCaptchaEffectiveConfig = { - enabled: true, - provider: 'hcaptcha', - hcaptcha_site_key: 'hcaptcha-site-key', - hcaptcha_secret_key: 'hcaptcha-secret-key', - turnstile_site_key: null, - turnstile_secret_key: null, -}; - -function createHarness( - captcha: InstanceCaptchaEffectiveConfig, -): (headers: Record) => Promise { - const repository = { - getEffectiveCaptchaConfig: async () => captcha, - getAltchaCaptchaConfig: async () => DEFAULT_ALTCHA_CAPTCHA_CONFIG, - } as unknown as InstanceConfigRepository; - const app = new Hono(); - app.use(async (ctx, next) => { - ctx.set('instanceConfigRepository', repository); - await next(); - }); - app.use(CaptchaMiddleware); - app.post('/auth/register', (ctx) => ctx.text('ok')); - app.onError(AppErrorHandler); - return async (headers) => app.request('http://localhost/auth/register', {method: 'POST', headers}); -} - -describe('CaptchaMiddleware provider header', () => { - let previousTestModeEnabled: boolean; - - beforeEach(() => { - previousTestModeEnabled = Config.dev.testModeEnabled; - Config.dev.testModeEnabled = false; - }); - - afterEach(() => { - Config.dev.testModeEnabled = previousTestModeEnabled; - }); - - it('rejects a header naming a provider the instance holds no secret key for with 400 INVALID_CAPTCHA', async () => { - const request = createHarness(HCAPTCHA_ONLY); - const response = await request({'x-captcha-token': 'solution', 'x-captcha-type': 'turnstile'}); - expect(response.status).toBe(400); - expect(await response.json()).toMatchObject({code: 'INVALID_CAPTCHA'}); - }); - - it('rejects a request with no proof with 400 CAPTCHA_REQUIRED', async () => { - const request = createHarness(HCAPTCHA_ONLY); - const response = await request({}); - expect(response.status).toBe(400); - expect(await response.json()).toMatchObject({code: 'CAPTCHA_REQUIRED'}); - }); -}); diff --git a/fluxer_api/src/api/oauth/OAuth2ApplicationsController.ts b/fluxer_api/src/api/oauth/OAuth2ApplicationsController.ts index 7ddbe2497..5c62e120c 100644 --- a/fluxer_api/src/api/oauth/OAuth2ApplicationsController.ts +++ b/fluxer_api/src/api/oauth/OAuth2ApplicationsController.ts @@ -84,7 +84,7 @@ export function OAuth2ApplicationsController(app: HonoApp) { security: ['bearerToken', 'sessionToken'], tags: ['OAuth2'], description: - 'Creates a new bot-backed OAuth2 application (client). Requires CAPTCHA verification. Returns client credentials including ID and secret. Application can be used for authorization flows and API access.', + 'Creates a new bot-backed OAuth2 application (client). Requires a solved captcha challenge (X-Captcha-Token). Returns client credentials including ID and secret. Application can be used for authorization flows and API access.', }), async (ctx) => { const userId = ctx.get('user').id; diff --git a/fluxer_api/src/api/oauth/tests/OAuth2ApplicationCreate.test.ts b/fluxer_api/src/api/oauth/tests/OAuth2ApplicationCreate.test.ts index e2edaadd4..ab69f7767 100644 --- a/fluxer_api/src/api/oauth/tests/OAuth2ApplicationCreate.test.ts +++ b/fluxer_api/src/api/oauth/tests/OAuth2ApplicationCreate.test.ts @@ -1,9 +1,9 @@ // SPDX-License-Identifier: AGPL-3.0-or-later import {createTestAccount} from '@app/api/auth/tests/AuthTestUtils'; -import {Config} from '@app/api/Config'; import {createOAuth2Application, createUniqueApplicationName} from '@app/api/oauth/tests/OAuth2TestUtils'; import {type ApiTestHarness, createApiTestHarness} from '@app/api/test/ApiTestHarness'; +import {CAPTCHA_TEST_HEADER, issueSolvedCaptchaToken, useCheapCaptcha} from '@app/api/test/CaptchaTestUtils'; import {HTTP_STATUS} from '@app/api/test/TestConstants'; import {createBuilder} from '@app/api/test/TestRequestBuilder'; import {APIErrorCodes} from '@fluxer/constants/src/ApiErrorCodes'; @@ -18,19 +18,6 @@ interface ValidationErrorResponse { }>; } -async function withCaptchaEnabled(run: () => Promise): Promise { - const previousEnabled = Config.captcha.enabled; - const previousTestModeEnabled = Config.dev.testModeEnabled; - Config.captcha.enabled = true; - Config.dev.testModeEnabled = true; - try { - return await run(); - } finally { - Config.captcha.enabled = previousEnabled; - Config.dev.testModeEnabled = previousTestModeEnabled; - } -} - describe('OAuth2 Application Create', () => { let harness: ApiTestHarness; beforeEach(async () => { @@ -94,24 +81,24 @@ describe('OAuth2 Application Create', () => { }); test('requires captcha when creating a bot application', async () => { const account = await createTestAccount(harness); - await withCaptchaEnabled(async () => - createBuilder(harness, account.token) - .post('/oauth2/applications') - .body({name: createUniqueApplicationName()}) - .expect(HTTP_STATUS.BAD_REQUEST, APIErrorCodes.CAPTCHA_REQUIRED) - .execute(), - ); + await useCheapCaptcha(); + await createBuilder(harness, account.token) + .post('/oauth2/applications') + .header(CAPTCHA_TEST_HEADER, 'true') + .body({name: createUniqueApplicationName()}) + .expect(HTTP_STATUS.BAD_REQUEST, APIErrorCodes.CAPTCHA_REQUIRED) + .execute(); }); test('creates a bot application with a valid captcha token', async () => { const account = await createTestAccount(harness); - await withCaptchaEnabled(async () => - createBuilder(harness, account.token) - .post('/oauth2/applications') - .header('x-captcha-token', 'test-captcha-token') - .body({name: createUniqueApplicationName()}) - .expect(HTTP_STATUS.OK) - .execute(), - ); + await useCheapCaptcha(); + await createBuilder(harness, account.token) + .post('/oauth2/applications') + .header(CAPTCHA_TEST_HEADER, 'true') + .header('x-captcha-token', await issueSolvedCaptchaToken(harness)) + .body({name: createUniqueApplicationName()}) + .expect(HTTP_STATUS.OK) + .execute(); }); test('rejects missing name', async () => { const account = await createTestAccount(harness); diff --git a/fluxer_api/src/api/openapi/openapi.json b/fluxer_api/src/api/openapi/openapi.json index 3e665ca90..8fc43e112 100644 --- a/fluxer_api/src/api/openapi/openapi.json +++ b/fluxer_api/src/api/openapi/openapi.json @@ -295,7 +295,7 @@ "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}} } }, - "description": "Initiate password reset process by email. A password reset link will be sent to the user's email address. Requires CAPTCHA verification.", + "description": "Initiate password reset process by email. A password reset link will be sent to the user's email address. Requires a solved captcha challenge (X-Captcha-Token).", "requestBody": { "required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ForgotPasswordRequest"}}} @@ -745,7 +745,7 @@ "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}} } }, - "description": "Authenticate with email and password. Returns authentication token if credentials are valid and MFA is not required. If MFA is enabled, returns a ticket for MFA verification.", + "description": "Authenticate with email and password. Returns authentication token if credentials are valid and MFA is not required. If MFA is enabled, returns a ticket for MFA verification. Requires a solved captcha challenge (X-Captcha-Token).", "requestBody": { "required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/LoginRequest"}}} @@ -1380,7 +1380,7 @@ "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}} } }, - "description": "Create a new user account with email and password. Requires CAPTCHA verification. User account is created but must verify email before logging in.", + "description": "Create a new user account with email and password. Requires a solved captcha challenge (X-Captcha-Token). User account is created but must verify email before logging in.", "requestBody": { "required": false, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/RegisterRequest"}}} @@ -4683,7 +4683,7 @@ "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}} } }, - "description": "Adds a user to a group direct message channel. The requesting user must be a member of the group DM. Requires CAPTCHA verification.", + "description": "Adds a user to a group direct message channel. The requesting user must be a member of the group DM. Requires a solved captcha challenge (X-Captcha-Token).", "security": [{"botToken": []}, {"sessionToken": []}], "parameters": [ { @@ -10238,7 +10238,7 @@ "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}} } }, - "description": "Creates a new bot-backed OAuth2 application (client). Requires CAPTCHA verification. Returns client credentials including ID and secret. Application can be used for authorization flows and API access.", + "description": "Creates a new bot-backed OAuth2 application (client). Requires a solved captcha challenge (X-Captcha-Token). Returns client credentials including ID and secret. Application can be used for authorization flows and API access.", "security": [{"sessionToken": []}], "requestBody": { "required": true, @@ -13674,7 +13674,7 @@ "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}} } }, - "description": "Creates a new private channel (direct message) between the current user and one or more recipients. Group DM creation requires CAPTCHA verification. Returns the newly created channel object.", + "description": "Creates a new private channel (direct message) between the current user and one or more recipients. Group DM creation requires a solved captcha challenge (X-Captcha-Token). Returns the newly created channel object.", "security": [{"botToken": []}, {"sessionToken": []}], "requestBody": { "required": true, @@ -18392,7 +18392,7 @@ "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}} } }, - "description": "Send a one-time code on the requested channel. Defaults to the first available channel from server policy. Pass channel=\"sms\" to request SMS (only honoured for SMS-allowlisted destinations) or channel=\"inbound_challenge\" to receive challenge details to text in. Expensive outbound destinations always downgrade to an inbound challenge.", + "description": "Send a one-time code on the requested channel. Defaults to the first available channel from server policy. Pass channel=\"sms\" to request SMS (only honoured for SMS-allowlisted destinations) or channel=\"inbound_challenge\" to receive challenge details to text in. Expensive outbound destinations always downgrade to an inbound challenge. Requires a solved captcha challenge (X-Captcha-Token) when the phone verification service asks for one.", "security": [{"sessionToken": []}], "requestBody": { "required": true, @@ -27939,10 +27939,7 @@ "poll_jitter_percent": {"type": "integer", "minimum": 0, "maximum": 50}, "assignments": { "type": "object", - "properties": { - "domain_migration": {"$ref": "#/components/schemas/DomainMigrationAssignmentResponse"}, - "altcha_captcha": {"$ref": "#/components/schemas/AltchaCaptchaAssignmentResponse"} - }, + "properties": {"domain_migration": {"$ref": "#/components/schemas/DomainMigrationAssignmentResponse"}}, "additionalProperties": false } }, @@ -29905,16 +29902,11 @@ "type": "object", "properties": { "provider": { - "description": "Captcha provider name (hcaptcha, turnstile, none)", + "description": "Captcha provider (altcha or none)", "$ref": "#/components/schemas/InstanceCaptchaProviderSchema" - }, - "hcaptcha_site_key": {"description": "hCaptcha site key if using hCaptcha", "type": ["string", "null"]}, - "turnstile_site_key": { - "description": "Cloudflare Turnstile site key if using Turnstile", - "type": ["string", "null"] } }, - "required": ["provider", "hcaptcha_site_key", "turnstile_site_key"], + "required": ["provider"], "additionalProperties": false, "description": "Captcha configuration" }, @@ -29949,7 +29941,7 @@ "additionalProperties": false, "description": "Endpoint URLs for various services" }, - "InstanceCaptchaProviderSchema": {"type": "string", "enum": ["hcaptcha", "turnstile", "none"]}, + "InstanceCaptchaProviderSchema": {"type": "string", "enum": ["altcha", "none"]}, "InstanceRegistrationModeSchema": { "description": "Registration mode", "x-enumNames": ["open", "approval", "closed"], @@ -31640,12 +31632,6 @@ "additionalProperties": false }, "DonationCurrency": {"type": "string", "enum": ["usd", "eur", "brl", "inr", "pln", "try", "sek", "dkk", "nok"]}, - "AltchaCaptchaAssignmentResponse": { - "type": "object", - "properties": {"enabled": {"type": "boolean"}}, - "required": ["enabled"], - "additionalProperties": false - }, "DomainMigrationAssignmentResponse": { "type": "object", "properties": {"enabled": {"type": "boolean"}}, diff --git a/fluxer_api/src/api/stripe/tests/GiftCodeRedeemCaptcha.test.ts b/fluxer_api/src/api/stripe/tests/GiftCodeRedeemCaptcha.test.ts index 6ff2b0432..06e4a57bf 100644 --- a/fluxer_api/src/api/stripe/tests/GiftCodeRedeemCaptcha.test.ts +++ b/fluxer_api/src/api/stripe/tests/GiftCodeRedeemCaptcha.test.ts @@ -1,49 +1,35 @@ // SPDX-License-Identifier: AGPL-3.0-or-later import {createTestAccount} from '@app/api/auth/tests/AuthTestUtils'; -import {Config} from '@app/api/Config'; import {type ApiTestHarness, createApiTestHarness} from '@app/api/test/ApiTestHarness'; +import {CAPTCHA_TEST_HEADER, useCheapCaptcha} from '@app/api/test/CaptchaTestUtils'; import {HTTP_STATUS} from '@app/api/test/TestConstants'; import {createBuilder, createBuilderWithoutAuth} from '@app/api/test/TestRequestBuilder'; import {APIErrorCodes} from '@fluxer/constants/src/ApiErrorCodes'; import {afterEach, beforeEach, describe, test} from 'vitest'; -async function withCaptchaEnabled(run: () => Promise): Promise { - const previousEnabled = Config.captcha.enabled; - const previousTestModeEnabled = Config.dev.testModeEnabled; - Config.captcha.enabled = true; - Config.dev.testModeEnabled = true; - try { - return await run(); - } finally { - Config.captcha.enabled = previousEnabled; - Config.dev.testModeEnabled = previousTestModeEnabled; - } -} - describe('Gift Code Redeem Captcha', () => { let harness: ApiTestHarness; beforeEach(async () => { harness = await createApiTestHarness(); + await useCheapCaptcha(); }); afterEach(async () => { await harness?.shutdown(); }); test('rejects an unauthenticated redeem before reading the captcha', async () => { - await withCaptchaEnabled(async () => - createBuilderWithoutAuth(harness) - .post('/gifts/test-gift-code/redeem') - .expect(HTTP_STATUS.UNAUTHORIZED, APIErrorCodes.UNAUTHORIZED) - .execute(), - ); + await createBuilderWithoutAuth(harness) + .post('/gifts/test-gift-code/redeem') + .header(CAPTCHA_TEST_HEADER, 'true') + .expect(HTTP_STATUS.UNAUTHORIZED, APIErrorCodes.UNAUTHORIZED) + .execute(); }); test('requires captcha when redeeming with a credential', async () => { const account = await createTestAccount(harness); - await withCaptchaEnabled(async () => - createBuilder(harness, account.token) - .post('/gifts/test-gift-code/redeem') - .expect(HTTP_STATUS.BAD_REQUEST, APIErrorCodes.CAPTCHA_REQUIRED) - .execute(), - ); + await createBuilder(harness, account.token) + .post('/gifts/test-gift-code/redeem') + .header(CAPTCHA_TEST_HEADER, 'true') + .expect(HTTP_STATUS.BAD_REQUEST, APIErrorCodes.CAPTCHA_REQUIRED) + .execute(); }); }); diff --git a/fluxer_api/src/api/test/CaptchaTestUtils.ts b/fluxer_api/src/api/test/CaptchaTestUtils.ts new file mode 100644 index 000000000..cee09ae91 --- /dev/null +++ b/fluxer_api/src/api/test/CaptchaTestUtils.ts @@ -0,0 +1,41 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import {getInstanceConfigRepository} from '@app/api/middleware/ServiceSingletons'; +import type {ApiTestHarness} from '@app/api/test/ApiTestHarness'; +import {HTTP_STATUS} from '@app/api/test/TestConstants'; +import {createBuilderWithoutAuth} from '@app/api/test/TestRequestBuilder'; +import {APIErrorCodes} from '@fluxer/constants/src/ApiErrorCodes'; +import {solveChallenge} from 'altcha-lib'; +import {deriveKey} from 'altcha-lib/algorithms/pbkdf2'; +import type {Challenge} from 'altcha-lib/types'; + +export const CAPTCHA_TEST_HEADER = 'x-fluxer-test-enable-captcha'; + +export interface CaptchaErrorBody { + code: string; + captcha_provider?: string; + altcha_challenge?: Challenge; +} + +export async function useCheapCaptcha(): Promise { + await getInstanceConfigRepository().updateCaptchaConfig({enabled: true, cost: 1000, max_counter: 100}); +} + +export async function solveCaptchaChallenge(body: CaptchaErrorBody): Promise { + const challenge = body.altcha_challenge; + if (!challenge) throw new Error('The response carried no ALTCHA challenge'); + const solution = await solveChallenge({challenge, deriveKey, timeout: 0}); + if (!solution) throw new Error('The ALTCHA challenge was not solved'); + const payload = {challenge: {parameters: challenge.parameters, signature: challenge.signature}, solution}; + return Buffer.from(JSON.stringify(payload), 'utf8').toString('base64'); +} + +export async function issueSolvedCaptchaToken(harness: ApiTestHarness): Promise { + const {json} = await createBuilderWithoutAuth(harness) + .post('/auth/forgot') + .header(CAPTCHA_TEST_HEADER, 'true') + .body({email: 'captcha-token-source@example.com'}) + .expect(HTTP_STATUS.BAD_REQUEST, APIErrorCodes.CAPTCHA_REQUIRED) + .executeWithResponse(); + return await solveCaptchaChallenge(json); +} diff --git a/fluxer_api/src/api/test/Setup.ts b/fluxer_api/src/api/test/Setup.ts index 1b80b99ee..2dc8e5091 100644 --- a/fluxer_api/src/api/test/Setup.ts +++ b/fluxer_api/src/api/test/Setup.ts @@ -89,8 +89,6 @@ function setDefaultTestEnv(): void { FLUXER_SEARCH_ENGINE: 'elasticsearch', FLUXER_SEARCH_URL: 'http://127.0.0.1:9200', FLUXER_SEARCH_API_KEY: 'test', - FLUXER_CAPTCHA_ENABLED: 'false', - FLUXER_CAPTCHA_PROVIDER: 'none', FLUXER_DISCOVERY_ENABLED: 'true', FLUXER_RELAX_REGISTRATION_RATE_LIMITS: 'true', FLUXER_DISABLE_RATE_LIMITS: 'true', diff --git a/fluxer_api/src/api/user/controllers/UserAuthController.ts b/fluxer_api/src/api/user/controllers/UserAuthController.ts index 5e2449350..75503eb7a 100644 --- a/fluxer_api/src/api/user/controllers/UserAuthController.ts +++ b/fluxer_api/src/api/user/controllers/UserAuthController.ts @@ -8,12 +8,14 @@ import { import {requireSudoMode} from '@app/api/auth/services/SudoVerificationService'; import {Config} from '@app/api/Config'; import {DefaultUserOnly, LoginRequired, LoginRequiredAllowSuspicious} from '@app/api/middleware/AuthMiddleware'; +import {verifyCaptchaToken} from '@app/api/middleware/CaptchaMiddleware'; import {RateLimitMiddleware} from '@app/api/middleware/RateLimitMiddleware'; import {OpenAPI} from '@app/api/middleware/ResponseTypeMiddleware'; import {SudoModeMiddleware} from '@app/api/middleware/SudoModeMiddleware'; import {RateLimitConfigs} from '@app/api/RateLimitConfig'; import type {HonoApp} from '@app/api/types/HonoEnv'; import {Validator} from '@app/api/Validator'; +import {Headers} from '@fluxer/constants/src/Headers'; import {requireClientIp} from '@fluxer/ip_utils/src/ClientIp'; import { DisableTotpRequest, @@ -234,7 +236,7 @@ export function UserAuthController(app: HonoApp) { security: ['bearerToken', 'sessionToken'], tags: ['Users'], description: - 'Send a one-time code on the requested channel. Defaults to the first available channel from server policy. Pass channel="sms" to request SMS (only honoured for SMS-allowlisted destinations) or channel="inbound_challenge" to receive challenge details to text in. Expensive outbound destinations always downgrade to an inbound challenge.', + 'Send a one-time code on the requested channel. Defaults to the first available channel from server policy. Pass channel="sms" to request SMS (only honoured for SMS-allowlisted destinations) or channel="inbound_challenge" to receive challenge details to text in. Expensive outbound destinations always downgrade to an inbound challenge. Requires a solved captcha challenge (X-Captcha-Token) when the phone verification service asks for one.', }), async (ctx) => { return ctx.json( @@ -245,6 +247,8 @@ export function UserAuthController(app: HonoApp) { trustClientIpHeader: Config.proxy.trust_client_ip_header, clientIpHeaderName: Config.proxy.client_ip_header, }), + hasCaptchaToken: ctx.req.header(Headers.X_CAPTCHA_TOKEN) !== undefined, + verifyCaptcha: () => verifyCaptchaToken(ctx), }), ); }, diff --git a/fluxer_api/src/api/user/controllers/UserChannelController.ts b/fluxer_api/src/api/user/controllers/UserChannelController.ts index 7521c5337..4998d2757 100644 --- a/fluxer_api/src/api/user/controllers/UserChannelController.ts +++ b/fluxer_api/src/api/user/controllers/UserChannelController.ts @@ -50,7 +50,7 @@ export function UserChannelController(app: HonoApp) { security: ['botToken', 'bearerToken', 'sessionToken'], tags: ['Users'], description: - 'Creates a new private channel (direct message) between the current user and one or more recipients. Group DM creation requires CAPTCHA verification. Returns the newly created channel object.', + 'Creates a new private channel (direct message) between the current user and one or more recipients. Group DM creation requires a solved captcha challenge (X-Captcha-Token). Returns the newly created channel object.', }), async (ctx) => { const user = ctx.get('user'); diff --git a/fluxer_api/src/api/user/services/UserAuthRequestService.ts b/fluxer_api/src/api/user/services/UserAuthRequestService.ts index 5ceb112e9..cfdb7e63d 100644 --- a/fluxer_api/src/api/user/services/UserAuthRequestService.ts +++ b/fluxer_api/src/api/user/services/UserAuthRequestService.ts @@ -126,13 +126,19 @@ export class UserAuthRequestService { user, data, clientIp, + hasCaptchaToken, + verifyCaptcha, }: UserAuthRequest & { clientIp: string; + hasCaptchaToken: boolean; + verifyCaptcha: () => Promise; }): Promise { await this.assertPhoneEligible(user); const result = await AuthPhone.sendPhoneVerificationCode(this.apiContext, data.phone, user.id, { clientIp, channel: data.channel, + hasCaptchaToken, + verifyCaptcha, }); if (result.channel === 'inbound_challenge') { return { diff --git a/fluxer_app/package.json b/fluxer_app/package.json index 07af24745..10b5efb7c 100644 --- a/fluxer_app/package.json +++ b/fluxer_app/package.json @@ -183,7 +183,6 @@ "@fluxer/schema": "workspace:*", "@fluxer/snowflake": "workspace:*", "@fluxer/voice_engine_v2": "workspace:*", - "@hcaptcha/react-hcaptcha": "catalog:", "@lexical/history": "catalog:", "@lexical/react": "catalog:", "@lexical/utils": "catalog:", @@ -191,7 +190,6 @@ "@lingui/core": "catalog:", "@lingui/react": "catalog:", "@livekit/components-react": "catalog:", - "@marsidev/react-turnstile": "catalog:", "@phosphor-icons/react": "catalog:", "@pkgs/list_utils": "workspace:*", "@pkgs/number_utils": "workspace:*", diff --git a/fluxer_app/src/app/AppBootstrap.tsx b/fluxer_app/src/app/AppBootstrap.tsx index 3f381a453..e71696309 100644 --- a/fluxer_app/src/app/AppBootstrap.tsx +++ b/fluxer_app/src/app/AppBootstrap.tsx @@ -154,7 +154,7 @@ async function bootstrapApp(): Promise { ] = await Promise.all([ loadLazyModule(() => import('@app/app/App')), loadLazyModule(() => import('@app/app/SetupHttp')), - loadLazyModule(() => import('@app/features/auth/components/CaptchaInterceptor')), + loadLazyModule(() => import('@app/features/auth/altcha/CaptchaInterceptor')), loadLazyModule(() => import('@app/features/messaging/utils/markdown/EmojiProviderSetup')), loadLazyModule(() => import('@app/features/platform/service_worker/Register')), loadLazyModule(() => import('@app/features/auth/state/AccountManager')), diff --git a/fluxer_app/src/features/app/components/dialogs/Modal.tsx b/fluxer_app/src/features/app/components/dialogs/Modal.tsx index c15c93608..743cb5c85 100644 --- a/fluxer_app/src/features/app/components/dialogs/Modal.tsx +++ b/fluxer_app/src/features/app/components/dialogs/Modal.tsx @@ -250,7 +250,6 @@ const RootComponent = React.forwardRef( return []; } const inside: Array = []; - modalDocument.querySelectorAll('iframe[src*="hcaptcha"], .h-captcha').forEach((el) => inside.push(el)); const popoutsRoot = modalDocument.querySelector('[data-popouts-root]'); if (popoutsRoot) inside.push(popoutsRoot); const mediaViewerPortalRoot = modalDocument.querySelector('[data-media-viewer-portal-root]'); diff --git a/fluxer_app/src/features/app/components/setup/SelfHostedSetupWizardGate.tsx b/fluxer_app/src/features/app/components/setup/SelfHostedSetupWizardGate.tsx index 84ab518b2..c12244fab 100644 --- a/fluxer_app/src/features/app/components/setup/SelfHostedSetupWizardGate.tsx +++ b/fluxer_app/src/features/app/components/setup/SelfHostedSetupWizardGate.tsx @@ -156,12 +156,6 @@ const DEFAULT_INTEGRATION_DRAFT: ServiceIntegrationDraft = { klipyApiKey: '', youtubeMode: 'later', youtubeApiKey: '', - captchaMode: 'later', - captchaProvider: 'hcaptcha', - hcaptchaSiteKey: '', - hcaptchaSecretKey: '', - turnstileSiteKey: '', - turnstileSecretKey: '', emailMode: 'later', emailEnabled: true, emailFromEmail: '', @@ -200,8 +194,6 @@ function wizardStepToIntegrationKind(step: WizardStep): IntegrationStepKind | nu return 'gif'; case 'integration_youtube': return 'youtube'; - case 'integration_captcha': - return 'captcha'; case 'integration_email': return 'email'; case 'integration_bluesky': @@ -278,11 +270,6 @@ function isIntegrationStepValid(kind: IntegrationStepKind, draft: ServiceIntegra return draft.klipyApiKey.trim().length > 0; case 'youtube': return draft.youtubeMode === 'later' || draft.youtubeApiKey.trim().length > 0; - case 'captcha': - if (draft.captchaMode === 'later') return true; - return draft.captchaProvider === 'hcaptcha' - ? draft.hcaptchaSiteKey.trim().length > 0 && draft.hcaptchaSecretKey.trim().length > 0 - : draft.turnstileSiteKey.trim().length > 0 && draft.turnstileSecretKey.trim().length > 0; case 'email': if (draft.emailMode === 'later' || !draft.emailEnabled) return true; return ( @@ -313,13 +300,6 @@ function buildIntegrationsPatch(draft: ServiceIntegrationDraft) { youtube?: { api_key: string; }; - captcha?: { - provider: 'hcaptcha' | 'turnstile'; - hcaptcha_site_key?: string; - hcaptcha_secret_key?: string; - turnstile_site_key?: string; - turnstile_secret_key?: string; - }; email?: { enabled: boolean; provider: 'smtp'; @@ -349,20 +329,6 @@ function buildIntegrationsPatch(draft: ServiceIntegrationDraft) { if (draft.youtubeMode === 'configure') { integrations.youtube = {api_key: draft.youtubeApiKey.trim()}; } - if (draft.captchaMode === 'configure') { - integrations.captcha = - draft.captchaProvider === 'hcaptcha' - ? { - provider: 'hcaptcha', - hcaptcha_site_key: draft.hcaptchaSiteKey.trim(), - hcaptcha_secret_key: draft.hcaptchaSecretKey.trim(), - } - : { - provider: 'turnstile', - turnstile_site_key: draft.turnstileSiteKey.trim(), - turnstile_secret_key: draft.turnstileSecretKey.trim(), - }; - } if (draft.emailMode === 'configure') { integrations.email = { enabled: draft.emailEnabled, @@ -580,7 +546,6 @@ export const SelfHostedSetupWizardGate = observer(() => { }); setIntegrationDraft((current) => ({ ...current, - captchaProvider: next.integrations.captcha.effective_provider === 'turnstile' ? 'turnstile' : 'hcaptcha', emailEnabled: next.integrations.email.effective_enabled || next.integrations.email.enabled !== false, emailFromEmail: next.integrations.email.from_email ?? current.emailFromEmail, emailFromName: next.integrations.email.from_name ?? current.emailFromName, diff --git a/fluxer_app/src/features/app/components/setup/SetupWizardStateMachine.ts b/fluxer_app/src/features/app/components/setup/SetupWizardStateMachine.ts index 999afe111..898557595 100644 --- a/fluxer_app/src/features/app/components/setup/SetupWizardStateMachine.ts +++ b/fluxer_app/src/features/app/components/setup/SetupWizardStateMachine.ts @@ -14,7 +14,6 @@ export type WizardStep = | 'media_expiry' | 'integration_gif' | 'integration_youtube' - | 'integration_captcha' | 'integration_email' | 'integration_bluesky' | 'push_relay_consent' @@ -34,7 +33,6 @@ export const CONFIGURE_STEPS: ReadonlyArray = [ 'media_expiry', 'integration_gif', 'integration_youtube', - 'integration_captcha', 'integration_email', 'integration_bluesky', 'push_relay_consent', diff --git a/fluxer_app/src/features/app/components/setup/SetupWizardSteps.tsx b/fluxer_app/src/features/app/components/setup/SetupWizardSteps.tsx index dd913518b..d0861eaa1 100644 --- a/fluxer_app/src/features/app/components/setup/SetupWizardSteps.tsx +++ b/fluxer_app/src/features/app/components/setup/SetupWizardSteps.tsx @@ -915,21 +915,14 @@ export interface MediaExpiryDraft { renewWindowDays: string; } -export type IntegrationStepKind = 'gif' | 'youtube' | 'captcha' | 'email' | 'bluesky'; +export type IntegrationStepKind = 'gif' | 'youtube' | 'email' | 'bluesky'; export type IntegrationSetupMode = 'later' | 'configure'; -export type CaptchaProvider = 'hcaptcha' | 'turnstile'; export interface ServiceIntegrationDraft { gifMode: IntegrationSetupMode; klipyApiKey: string; youtubeMode: IntegrationSetupMode; youtubeApiKey: string; - captchaMode: IntegrationSetupMode; - captchaProvider: CaptchaProvider; - hcaptchaSiteKey: string; - hcaptchaSecretKey: string; - turnstileSiteKey: string; - turnstileSecretKey: string; emailMode: IntegrationSetupMode; emailEnabled: boolean; emailFromEmail: string; @@ -982,14 +975,6 @@ const YOUTUBE_SETUP_BODY_DESCRIPTOR = msg({ message: 'Add a YouTube Data API key to enrich YouTube links.', comment: 'Setup wizard body for YouTube integration credentials.', }); -const CAPTCHA_SETUP_TITLE_DESCRIPTOR = msg({ - message: 'Bot protection', - comment: 'Setup wizard title for CAPTCHA integration credentials.', -}); -const CAPTCHA_SETUP_BODY_DESCRIPTOR = msg({ - message: 'Choose hCaptcha or Cloudflare Turnstile for signup challenges.', - comment: 'Setup wizard body for CAPTCHA integration credentials.', -}); const EMAIL_SETUP_TITLE_DESCRIPTOR = msg({ message: 'Email delivery', comment: 'Setup wizard title for SMTP integration credentials.', @@ -1006,18 +991,7 @@ const BLUESKY_SETUP_BODY_DESCRIPTOR = msg({ message: 'Add Bluesky OAuth client metadata and a signing key.', comment: 'Setup wizard body for Bluesky integration credentials.', }); -const PROVIDER_LABEL_DESCRIPTOR = msg({ - message: 'Provider', - comment: 'Label for an integration provider choice.', -}); -const HCAPTCHA_NAME_DESCRIPTOR = msg({message: 'hCaptcha', comment: 'hCaptcha provider option.'}); -const TURNSTILE_NAME_DESCRIPTOR = msg({ - message: 'Cloudflare Turnstile', - comment: 'Cloudflare Turnstile provider option.', -}); const API_KEY_LABEL_DESCRIPTOR = msg({message: 'API key', comment: 'Label for an integration API key input.'}); -const SITE_KEY_LABEL_DESCRIPTOR = msg({message: 'Site key', comment: 'Label for a CAPTCHA site key input.'}); -const SECRET_KEY_LABEL_DESCRIPTOR = msg({message: 'Secret key', comment: 'Label for a CAPTCHA secret key input.'}); const ENABLE_EMAIL_LABEL_DESCRIPTOR = msg({ message: 'Enable email delivery', comment: 'Label for enabling SMTP email delivery in setup.', @@ -1106,8 +1080,6 @@ function getIntegrationMode(draft: ServiceIntegrationDraft, kind: IntegrationSte return draft.gifMode; case 'youtube': return draft.youtubeMode; - case 'captcha': - return draft.captchaMode; case 'email': return draft.emailMode; case 'bluesky': @@ -1121,8 +1093,6 @@ function getIntegrationCopy(kind: IntegrationStepKind): {title: MessageDescripto return {title: GIF_SETUP_TITLE_DESCRIPTOR, body: GIF_SETUP_BODY_DESCRIPTOR}; case 'youtube': return {title: YOUTUBE_SETUP_TITLE_DESCRIPTOR, body: YOUTUBE_SETUP_BODY_DESCRIPTOR}; - case 'captcha': - return {title: CAPTCHA_SETUP_TITLE_DESCRIPTOR, body: CAPTCHA_SETUP_BODY_DESCRIPTOR}; case 'email': return {title: EMAIL_SETUP_TITLE_DESCRIPTOR, body: EMAIL_SETUP_BODY_DESCRIPTOR}; case 'bluesky': @@ -1302,9 +1272,6 @@ export const IntegrationStep = observer( case 'youtube': onDraftChange({youtubeMode: next}); break; - case 'captcha': - onDraftChange({captchaMode: next}); - break; case 'email': onDraftChange({emailMode: next}); break; @@ -1315,10 +1282,6 @@ export const IntegrationStep = observer( }, [kind, onDraftChange], ); - const captchaOptions: ReadonlyArray> = [ - {value: 'hcaptcha', name: i18n._(HCAPTCHA_NAME_DESCRIPTOR), desc: i18n._(CAPTCHA_SETUP_BODY_DESCRIPTOR)}, - {value: 'turnstile', name: i18n._(TURNSTILE_NAME_DESCRIPTOR), desc: i18n._(CAPTCHA_SETUP_BODY_DESCRIPTOR)}, - ]; return (
)} - {kind === 'captcha' && ( - <> -
- {i18n._(PROVIDER_LABEL_DESCRIPTOR)} -
- onDraftChange({captchaProvider: value})} - disabled={disabled} - aria-label={i18n._(PROVIDER_LABEL_DESCRIPTOR)} - data-flx="app.setup.setup-wizard-steps.integration-step.radio-group.draft-change" - /> - - onDraftChange( - draft.captchaProvider === 'hcaptcha' - ? {hcaptchaSiteKey: event.target.value} - : {turnstileSiteKey: event.target.value}, - ) - } - disabled={disabled} - data-flx="app.setup.setup-wizard-steps.integration-step.input.draft-change--3" - /> - - onDraftChange( - draft.captchaProvider === 'hcaptcha' - ? {hcaptchaSecretKey: event.target.value} - : {turnstileSecretKey: event.target.value}, - ) - } - disabled={disabled} - data-flx="app.setup.setup-wizard-steps.integration-step.input.draft-change.password" - /> - - )} {kind === 'email' && ( <> { +export async function solveAltchaChallenge(challenge: AltchaChallenge): Promise { const solution = await solveChallengeWorkers({ challenge, concurrency: Math.min(MAX_SOLVER_WORKERS, navigator.hardwareConcurrency || 2), - controller, createWorker: createSolverWorker, timeout: SOLVE_TIMEOUT_MS, }); diff --git a/fluxer_app/src/features/auth/altcha/CaptchaInterceptor.ts b/fluxer_app/src/features/auth/altcha/CaptchaInterceptor.ts new file mode 100644 index 000000000..59121cd35 --- /dev/null +++ b/fluxer_app/src/features/auth/altcha/CaptchaInterceptor.ts @@ -0,0 +1,102 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import {type AltchaChallenge, readAltchaChallenge, solveAltchaChallenge} from '@app/features/auth/altcha/AltchaSolver'; +import {http} from '@app/features/platform/transport/RestTransport'; +import {HttpError} from '@app/features/platform/types/EndpointError'; +import type {RestResponse} from '@app/features/platform/types/TransportTypes'; +import {Logger} from '@app/features/platform/utils/AppLogger'; +import {replyCode} from '@app/features/platform/utils/ResponseInspection'; +import * as ToastCommands from '@app/features/ui/commands/ToastCommands'; +import type {I18n} from '@lingui/core'; +import {msg} from '@lingui/core/macro'; + +const STILL_WORKING_DESCRIPTOR = msg({ + message: 'Still working on it…', + comment: + 'Small toast shown only when an automatic background check before sign-in, sign-up or a similar request takes more than a couple of seconds. No user action needed. Keep it short and calm.', +}); + +const logger = new Logger('CaptchaInterceptor'); + +const MAX_SOLVES = 2; +const SLOW_SOLVE_HINT_DELAY_MS = 2000; +const SLOW_SOLVE_HINT_TIMEOUT_MS = 60_000; + +function readCaptchaChallenge(status: number, body: unknown): AltchaChallenge | null { + if (status !== 400) return null; + const code = replyCode(body); + if (code !== 'CAPTCHA_REQUIRED' && code !== 'INVALID_CAPTCHA') return null; + return readAltchaChallenge(body); +} + +class CaptchaInterceptor { + private i18n: I18n | null = null; + + constructor() { + http.installHooks({ + intercept: this.intercept.bind(this), + }); + } + + setI18n(i18n: I18n) { + this.i18n = i18n; + } + + private intercept( + reply: RestResponse, + retry: (extraHeaders: Record) => Promise, + ): Promise | undefined { + const challenge = readCaptchaChallenge(reply.status, reply.body); + if (!challenge) return undefined; + return this.solveAndRetry(challenge, retry); + } + + private async solveAndRetry( + initialChallenge: AltchaChallenge, + retry: (extraHeaders: Record) => Promise, + ): Promise { + let challenge = initialChallenge; + let failed: () => RestResponse | undefined = () => undefined; + for (let solves = 1; ; solves++) { + const token = await this.solveWithHint(challenge); + if (!token) return failed(); + try { + const next = await retry({'X-Captcha-Token': token, 'X-Captcha-Type': 'altcha'}); + const again = solves < MAX_SOLVES ? readCaptchaChallenge(next.status, next.body) : null; + if (!again) return next; + challenge = again; + failed = () => next; + } catch (error) { + const again = + solves < MAX_SOLVES && error instanceof HttpError ? readCaptchaChallenge(error.status, error.body) : null; + if (!again) throw error; + challenge = again; + failed = () => { + throw error; + }; + } + } + } + + private async solveWithHint(challenge: AltchaChallenge): Promise { + let toastId: string | null = null; + const timer = setTimeout(() => { + toastId = ToastCommands.createToast({ + type: 'info', + children: this.i18n?._(STILL_WORKING_DESCRIPTOR), + timeout: SLOW_SOLVE_HINT_TIMEOUT_MS, + }); + }, SLOW_SOLVE_HINT_DELAY_MS); + try { + return await solveAltchaChallenge(challenge); + } catch (error) { + logger.error('ALTCHA solve failed:', error); + return null; + } finally { + clearTimeout(timer); + if (toastId !== null) ToastCommands.destroyToast(toastId); + } + } +} + +export default new CaptchaInterceptor(); diff --git a/fluxer_app/src/features/auth/commands/AuthenticationCommands.ts b/fluxer_app/src/features/auth/commands/AuthenticationCommands.ts index 2df992af5..ffaf5baba 100644 --- a/fluxer_app/src/features/auth/commands/AuthenticationCommands.ts +++ b/fluxer_app/src/features/auth/commands/AuthenticationCommands.ts @@ -36,13 +36,6 @@ export const VerificationResult = { export type VerificationResult = ValueOf; -type CaptchaType = 'turnstile' | 'hcaptcha'; - -type RegisterData = RegisterRequest & { - captchaToken?: string; - captchaType?: CaptchaType; -}; - export type AuthResponseUser = UserPartial & { email?: string | null; }; @@ -142,24 +135,7 @@ export interface DesktopHandoffInfoResponse { interface LoginParams { email: string; password: string; - captchaToken?: string; inviteCode?: string; - captchaType?: CaptchaType; -} - -interface CaptchaParams { - captchaToken?: string; - captchaType?: CaptchaType; -} - -function captchaHeaders({captchaToken, captchaType}: CaptchaParams): Record { - if (!captchaToken) { - return {}; - } - return { - 'X-Captcha-Token': captchaToken, - 'X-Captcha-Type': captchaType || 'hcaptcha', - }; } function withInviteCode(body: T, inviteCode?: string): T & {invite_code?: string} { @@ -199,11 +175,6 @@ function webAuthnBody( return withInviteCode({response, challenge}, inviteCode); } -function registerBody(data: RegisterData): RegisterRequest { - const {captchaToken: _, captchaType: __, ...bodyData} = data; - return bodyData; -} - function ticketBody(ticket: string): {ticket: string} { return {ticket}; } @@ -250,14 +221,12 @@ function verificationResultFromError( export async function login({ email, password, - captchaToken, inviteCode, - captchaType, }: LoginParams): Promise { try { const response = await http.post(Endpoints.AUTH_LOGIN, { body: loginBody({email, password, inviteCode}), - headers: withAuthLocaleHeader(captchaHeaders({captchaToken, captchaType})), + headers: withAuthLocaleHeader(), }); logger.debug('Login successful', {mfa: response.body?.mfa}); return response.body; @@ -357,11 +326,11 @@ export async function authenticateWithWebAuthn( } } -export async function register(data: RegisterData): Promise { +export async function register(data: RegisterRequest): Promise { try { const response = await http.post(Endpoints.AUTH_REGISTER, { - body: registerBody(data), - headers: withAuthLocaleHeader(captchaHeaders(data)), + body: data, + headers: withAuthLocaleHeader(), }); const responseBody = response.body; logger.info('Registration successful'); @@ -391,15 +360,11 @@ export async function getUsernameSuggestions(globalName: string): Promise { +export async function forgotPassword(email: string): Promise { try { await http.post(Endpoints.AUTH_FORGOT_PASSWORD, { body: {email}, - headers: withAuthLocaleHeader(captchaHeaders({captchaToken, captchaType})), + headers: withAuthLocaleHeader(), }); logger.debug('Password reset email sent'); } catch (error) { diff --git a/fluxer_app/src/features/auth/components/AltchaVerification.module.css b/fluxer_app/src/features/auth/components/AltchaVerification.module.css deleted file mode 100644 index ee4360231..000000000 --- a/fluxer_app/src/features/auth/components/AltchaVerification.module.css +++ /dev/null @@ -1,16 +0,0 @@ -/* SPDX-License-Identifier: AGPL-3.0-or-later */ - -.container { - display: flex; - flex-direction: column; - align-items: center; - gap: 0.75rem; - padding: 1rem 0; -} - -.text { - font-size: 0.875rem; - line-height: 1.25rem; - text-align: center; - color: var(--text-secondary); -} diff --git a/fluxer_app/src/features/auth/components/AltchaVerification.tsx b/fluxer_app/src/features/auth/components/AltchaVerification.tsx deleted file mode 100644 index 3a546e3a8..000000000 --- a/fluxer_app/src/features/auth/components/AltchaVerification.tsx +++ /dev/null @@ -1,66 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -import {type AltchaChallenge, solveAltchaChallenge} from '@app/features/auth/altcha/AltchaSolver'; -import styles from '@app/features/auth/components/AltchaVerification.module.css'; -import {Logger} from '@app/features/platform/utils/AppLogger'; -import {Button} from '@app/features/ui/button/Button'; -import {Spinner} from '@app/features/ui/components/Spinner'; -import {Trans} from '@lingui/react/macro'; -import {useCallback, useEffect, useRef, useState} from 'react'; - -const logger = new Logger('AltchaVerification'); - -interface AltchaVerificationProps { - challenge: AltchaChallenge; - onVerify: (token: string) => void; -} - -export function AltchaVerification({challenge, onVerify}: AltchaVerificationProps) { - const onVerifyRef = useRef(onVerify); - const [attempt, setAttempt] = useState(0); - const [failed, setFailed] = useState(false); - useEffect(() => { - onVerifyRef.current = onVerify; - }, [onVerify]); - useEffect(() => { - const controller = new AbortController(); - setFailed(false); - solveAltchaChallenge(challenge, controller).then( - (token) => { - if (controller.signal.aborted) return; - if (token) { - onVerifyRef.current(token); - } else { - setFailed(true); - } - }, - (error: unknown) => { - if (controller.signal.aborted) return; - logger.error('ALTCHA solve failed:', error); - setFailed(true); - }, - ); - return () => controller.abort(); - }, [challenge, attempt]); - const handleRetry = useCallback(() => setAttempt((value) => value + 1), []); - if (failed) { - return ( -
-

- Your browser couldn't finish the check. -

- -
- ); - } - return ( -
- -

- Checking your browser. This takes a few seconds. -

-
- ); -} diff --git a/fluxer_app/src/features/auth/components/CaptchaInterceptor.tsx b/fluxer_app/src/features/auth/components/CaptchaInterceptor.tsx deleted file mode 100644 index 323a6800d..000000000 --- a/fluxer_app/src/features/auth/components/CaptchaInterceptor.tsx +++ /dev/null @@ -1,146 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -import {type AltchaChallenge, readAltchaChallenge} from '@app/features/auth/altcha/AltchaSolver'; -import {CaptchaModal, type CaptchaType} from '@app/features/auth/components/modals/CaptchaModal'; -import {http} from '@app/features/platform/transport/RestTransport'; -import type {RestResponse} from '@app/features/platform/types/TransportTypes'; -import {replyCode, replyMessage} from '@app/features/platform/utils/ResponseInspection'; -import * as ModalCommands from '@app/features/ui/commands/ModalCommands'; -import {modal} from '@app/features/ui/commands/ModalCommands'; -import type {I18n} from '@lingui/core'; -import {msg} from '@lingui/core/macro'; -import {action, makeObservable, observable} from 'mobx'; -import {observer} from 'mobx-react-lite'; - -const CAPTCHA_VERIFICATION_FAILED_PLEASE_TRY_AGAIN_DESCRIPTOR = msg({ - message: 'Captcha verification failed. Try again.', - comment: 'Toast error shown when captcha verification fails inside the auth captcha interceptor.', -}); - -export interface CaptchaResult { - token: string; - type: CaptchaType; -} - -class CaptchaState { - error: string | null = null; - isVerifying = false; - - constructor() { - makeObservable(this, { - error: observable, - isVerifying: observable, - setError: action, - setIsVerifying: action, - reset: action, - }); - } - - setError(error: string | null) { - this.error = error; - } - - setIsVerifying(isVerifying: boolean) { - this.isVerifying = isVerifying; - } - - reset() { - this.error = null; - this.isVerifying = false; - } -} - -class CaptchaInterceptorState { - private state = new CaptchaState(); - private pendingPromise: {resolve: (result: CaptchaResult) => void; reject: (error: Error) => void} | null = null; - private i18n: I18n | null = null; - - setI18n(i18n: I18n) { - this.i18n = i18n; - } - - constructor() { - http.installHooks({ - intercept: this.intercept.bind(this), - }); - } - - private isCaptchaError(reply: RestResponse): boolean { - const code = replyCode(reply.body); - return code === 'CAPTCHA_REQUIRED' || code === 'INVALID_CAPTCHA'; - } - - private showCaptchaModal(altchaChallenge: AltchaChallenge | null): Promise { - if (this.pendingPromise) { - this.pendingPromise.reject(new Error('Captcha cancelled')); - this.pendingPromise = null; - } - this.state.reset(); - return new Promise((resolve, reject) => { - this.pendingPromise = {resolve, reject}; - const handleVerify = (token: string, captchaType: CaptchaType) => { - const result = {token, type: captchaType}; - this.state.setIsVerifying(true); - if (this.pendingPromise) { - this.pendingPromise.resolve(result); - this.pendingPromise = null; - } - }; - const handleCancel = () => { - this.state.reset(); - if (this.pendingPromise) { - this.pendingPromise.reject(new Error('Captcha cancelled')); - this.pendingPromise = null; - } - ModalCommands.pop(); - }; - const CaptchaModalWrapper = observer(() => ( - - )); - ModalCommands.push( - modal(() => ), - ); - }); - } - - private intercept( - reply: RestResponse, - retry: (extraHeaders: Record) => Promise, - reject: (error: Error) => void, - ): boolean | Promise | undefined { - if (reply.status === 400 && this.isCaptchaError(reply)) { - const i18n = this.i18n!; - const errorMessage = replyMessage(reply.body) || i18n._(CAPTCHA_VERIFICATION_FAILED_PLEASE_TRY_AGAIN_DESCRIPTOR); - this.state.setError(errorMessage); - this.state.setIsVerifying(false); - const promise = this.showCaptchaModal(readAltchaChallenge(reply.body)) - .then((captchaResult) => { - this.state.setError(null); - this.state.setIsVerifying(false); - ModalCommands.pop(); - return retry({ - 'X-Captcha-Token': captchaResult.token, - 'X-Captcha-Type': captchaResult.type, - }); - }) - .catch((error) => { - this.state.reset(); - ModalCommands.pop(); - reject(error); - throw error; - }); - return promise; - } - return undefined; - } -} - -export default new CaptchaInterceptorState(); diff --git a/fluxer_app/src/features/auth/components/TurnstileWidget.tsx b/fluxer_app/src/features/auth/components/TurnstileWidget.tsx deleted file mode 100644 index 0500d2ff4..000000000 --- a/fluxer_app/src/features/auth/components/TurnstileWidget.tsx +++ /dev/null @@ -1,29 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -import {Turnstile} from '@marsidev/react-turnstile'; -import {observer} from 'mobx-react-lite'; - -interface TurnstileWidgetProps { - sitekey: string; - onVerify: (token: string) => void; - onError?: (error: string) => void; - onExpire?: () => void; - theme?: 'light' | 'dark' | 'auto'; -} - -export const TurnstileWidget = observer( - ({sitekey, onVerify, onError, onExpire, theme = 'dark'}: TurnstileWidgetProps) => { - return ( - onError?.('Turnstile error')} - onExpire={onExpire} - options={{ - theme, - }} - data-flx="auth.turnstile-widget.turnstile" - /> - ); - }, -); diff --git a/fluxer_app/src/features/auth/components/modals/CaptchaModal.module.css b/fluxer_app/src/features/auth/components/modals/CaptchaModal.module.css deleted file mode 100644 index 094a025e6..000000000 --- a/fluxer_app/src/features/auth/components/modals/CaptchaModal.module.css +++ /dev/null @@ -1,48 +0,0 @@ -/* SPDX-License-Identifier: AGPL-3.0-or-later */ - -.container { - align-items: center; -} - -.errorBox { - width: 100%; - padding: 0.75rem; - border-radius: 0.375rem; - border: 0.0625rem solid var(--status-danger); - background-color: rgb(from var(--status-danger) r g b / 0.1); -} - -.errorText { - font-size: 0.875rem; - line-height: 1.25rem; - text-align: center; - color: var(--status-danger); -} - -.captchaContainer { - display: flex; - width: 100%; - justify-content: center; - margin-bottom: 1rem; -} - -.switchContainer { - text-align: center; -} - -.switchButton { - font-size: 0.875rem; - line-height: 1.25rem; - color: var(--text-link); - text-decoration: underline; - cursor: pointer; -} - -.switchButton:hover { - color: var(--text-link); -} - -.switchButton:disabled { - cursor: not-allowed; - opacity: 0.5; -} diff --git a/fluxer_app/src/features/auth/components/modals/CaptchaModal.tsx b/fluxer_app/src/features/auth/components/modals/CaptchaModal.tsx deleted file mode 100644 index b3cc9042b..000000000 --- a/fluxer_app/src/features/auth/components/modals/CaptchaModal.tsx +++ /dev/null @@ -1,187 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -import * as Modal from '@app/features/app/components/dialogs/Modal'; -import RuntimeConfig from '@app/features/app/state/RuntimeConfig'; -import type {AltchaChallenge} from '@app/features/auth/altcha/AltchaSolver'; -import {AltchaVerification} from '@app/features/auth/components/AltchaVerification'; -import styles from '@app/features/auth/components/modals/CaptchaModal.module.css'; -import {TurnstileWidget} from '@app/features/auth/components/TurnstileWidget'; -import {Logger} from '@app/features/platform/utils/AppLogger'; -import * as ModalCommands from '@app/features/ui/commands/ModalCommands'; -import HCaptcha from '@hcaptcha/react-hcaptcha'; -import {msg} from '@lingui/core/macro'; -import {Trans, useLingui} from '@lingui/react/macro'; -import {observer} from 'mobx-react-lite'; -import {useCallback, useEffect, useRef, useState} from 'react'; - -const VERIFY_YOU_RE_HUMAN_DESCRIPTOR = msg({ - message: "Verify you're human", - comment: 'Short label in the authentication captcha modal. Keep the tone plain and specific.', -}); -const logger = new Logger('CaptchaModal'); - -export type CaptchaType = 'turnstile' | 'hcaptcha' | 'altcha'; - -interface HCaptchaComponentProps { - sitekey: string; - onVerify?: (token: string) => void; - onExpire?: () => void; - onError?: (error: string) => void; - theme?: 'light' | 'dark'; - ref?: React.Ref; -} - -const HCaptchaComponent = HCaptcha as React.ComponentType; - -interface CaptchaModalProps { - onVerify: (token: string, captchaType: CaptchaType) => void; - onCancel?: () => void; - preferredType?: CaptchaType; - altchaChallenge?: AltchaChallenge | null; - error?: string | null; - isVerifying?: boolean; - closeOnVerify?: boolean; -} - -export const CaptchaModal = observer( - ({ - onVerify, - onCancel, - preferredType, - altchaChallenge, - error, - isVerifying, - closeOnVerify = true, - }: CaptchaModalProps) => { - const {i18n} = useLingui(); - const hcaptchaRef = useRef(null); - const [captchaType, setCaptchaType] = useState(() => { - if (altchaChallenge) return 'altcha'; - if (preferredType) return preferredType; - if (RuntimeConfig.captchaProvider === 'turnstile' && RuntimeConfig.turnstileSiteKey) { - return 'turnstile'; - } - if (RuntimeConfig.captchaProvider === 'hcaptcha' && RuntimeConfig.hcaptchaSiteKey) { - return 'hcaptcha'; - } - return RuntimeConfig.turnstileSiteKey ? 'turnstile' : 'hcaptcha'; - }); - useEffect(() => { - if (captchaType === 'hcaptcha') { - const timer = setTimeout(() => { - hcaptchaRef.current?.resetCaptcha(); - }, 100); - return () => clearTimeout(timer); - } - return; - }, [captchaType]); - useEffect(() => { - if (error) { - if (captchaType === 'hcaptcha') { - hcaptchaRef.current?.resetCaptcha(); - } - } - }, [error, captchaType]); - const handleVerify = useCallback( - (token: string) => { - onVerify(token, captchaType); - if (closeOnVerify) { - ModalCommands.pop(); - } - }, - [onVerify, captchaType, closeOnVerify], - ); - const handleCancel = useCallback(() => { - onCancel?.(); - ModalCommands.pop(); - }, [onCancel]); - const handleExpire = useCallback(() => { - if (captchaType === 'hcaptcha') { - hcaptchaRef.current?.resetCaptcha(); - } - }, [captchaType]); - const handleError = useCallback( - (error: string) => { - logger.error(`${captchaType} error:`, error); - }, - [captchaType], - ); - const handleSwitchToHCaptcha = useCallback(() => { - setCaptchaType('hcaptcha'); - }, []); - const handleSwitchToTurnstile = useCallback(() => { - setCaptchaType('turnstile'); - }, []); - const showSwitchButton = - (captchaType === 'turnstile' && RuntimeConfig.hcaptchaSiteKey) || - (captchaType === 'hcaptcha' && RuntimeConfig.turnstileSiteKey); - return ( - - - - - - We need to make sure you're not a bot. Complete the verification below. - - {error && ( -
-

- {error} -

-
- )} -
- {captchaType === 'altcha' && altchaChallenge ? ( - - ) : captchaType === 'turnstile' ? ( - - ) : ( - - )} -
- {showSwitchButton && ( -
- -
- )} -
-
-
- ); - }, -); diff --git a/fluxer_app/src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts b/fluxer_app/src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts index f090cfc43..503928bee 100644 --- a/fluxer_app/src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts +++ b/fluxer_app/src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts @@ -573,10 +573,6 @@ export const PHONE_NEEDS_REVIEW_DESCRIPTOR = msg({ comment: 'Required-action form error when a phone attempt cannot be verified automatically and needs a support review. Keep it non-specific.', }); -export const CAPTCHA_REQUIRED_DESCRIPTOR = msg({ - message: 'A browser check is required before phone verification. Try again from the sign-in page or contact support.', - comment: 'Required-action error when the API requires a captcha for phone verification.', -}); export const SOMETHING_WENT_WRONG_TRY_AGAIN_DESCRIPTOR = msg({ message: 'Something went wrong. Try again.', comment: 'Generic required-action error fallback.', diff --git a/fluxer_app/src/features/auth/components/modals/required_action/RequiredActionShared.tsx b/fluxer_app/src/features/auth/components/modals/required_action/RequiredActionShared.tsx index 053e5cafe..d31d989ad 100644 --- a/fluxer_app/src/features/auth/components/modals/required_action/RequiredActionShared.tsx +++ b/fluxer_app/src/features/auth/components/modals/required_action/RequiredActionShared.tsx @@ -11,7 +11,6 @@ import { ALT_ROUTES_HUMAN_REVIEW_DESCRIPTOR, ALT_ROUTES_HUMAN_REVIEW_SELF_HOSTED_DESCRIPTOR, ALT_ROUTES_TITLE_DESCRIPTOR, - CAPTCHA_REQUIRED_DESCRIPTOR, CODE_DID_NOT_WORK_DESCRIPTOR, CODE_EXPIRED_DESCRIPTOR, CODE_NOT_REQUESTED_DESCRIPTOR, @@ -192,9 +191,6 @@ export function resolveRequiredActionErrorMessage( case APIErrorCodes.BOT_USER_AUTH_ENDPOINT_ACCESS_DENIED: case APIErrorCodes.PHONE_VERIFICATION_REQUIRED: return i18n._(PHONE_NOT_ELIGIBLE_DESCRIPTOR); - case APIErrorCodes.CAPTCHA_REQUIRED: - case APIErrorCodes.INVALID_CAPTCHA: - return i18n._(CAPTCHA_REQUIRED_DESCRIPTOR); case APIErrorCodes.ACCESS_DENIED: case APIErrorCodes.FORBIDDEN: return i18n._(EMAIL_CHANGE_UNAVAILABLE_DESCRIPTOR); diff --git a/fluxer_app/src/features/auth/hooks/useAuthForm.ts b/fluxer_app/src/features/auth/hooks/useAuthForm.ts index 39f49df6d..69a6f5b46 100644 --- a/fluxer_app/src/features/auth/hooks/useAuthForm.ts +++ b/fluxer_app/src/features/auth/hooks/useAuthForm.ts @@ -1,7 +1,6 @@ // SPDX-License-Identifier: AGPL-3.0-or-later import {type FormSubmission, type UseFormReturn, useForm} from '@app/features/app/hooks/useForm'; -import {CaptchaCancelledError, CaptchaValidationError} from '@app/features/auth/hooks/useCaptcha'; import * as RouterUtils from '@app/features/navigation/utils/RouterUtils'; import {HttpError} from '@app/features/platform/types/EndpointError'; import {failureMessage, failureValidationErrors} from '@app/features/platform/utils/ResponseInspection'; @@ -96,12 +95,6 @@ export function useAuthForm({initialValues, onSubmit, redirectPath, firstFieldNa RouterUtils.replaceWith(redirectPath); } } catch (err) { - if (err instanceof CaptchaCancelledError) { - return; - } - if (err instanceof CaptchaValidationError) { - return; - } if (!submission.isCurrent()) { return; } diff --git a/fluxer_app/src/features/auth/hooks/useCaptcha.ts b/fluxer_app/src/features/auth/hooks/useCaptcha.ts deleted file mode 100644 index 46810f265..000000000 --- a/fluxer_app/src/features/auth/hooks/useCaptcha.ts +++ /dev/null @@ -1,15 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -export class CaptchaCancelledError extends Error { - constructor() { - super('Captcha cancelled'); - this.name = 'CaptchaCancelledError'; - } -} - -export class CaptchaValidationError extends Error { - constructor(message: string) { - super(message); - this.name = 'CaptchaValidationError'; - } -} diff --git a/fluxer_app/src/features/auth/hooks/useLoginFlow.ts b/fluxer_app/src/features/auth/hooks/useLoginFlow.ts index 63883332d..0cfe5f945 100644 --- a/fluxer_app/src/features/auth/hooks/useLoginFlow.ts +++ b/fluxer_app/src/features/auth/hooks/useLoginFlow.ts @@ -2,7 +2,6 @@ import {showBrowserLoginHandoffModal} from '@app/features/auth/flow/BrowserLoginHandoffModal'; import {useAuthForm} from '@app/features/auth/hooks/useAuthForm'; -import {CaptchaCancelledError} from '@app/features/auth/hooks/useCaptcha'; import { isPasskeyCeremonyDismissed, runPasskeyBridgeNativeLogin, @@ -174,9 +173,6 @@ export function useLoginFormController({ RouterUtils.replaceWith(redirectPath); } } catch (err) { - if (err instanceof CaptchaCancelledError) { - return; - } logger.error('Passkey login failed', err); const userCancelled = err instanceof DOMException && (err.name === 'NotAllowedError' || err.name === 'AbortError'); diff --git a/fluxer_app/src/features/auth/state/AccountStorage.ts b/fluxer_app/src/features/auth/state/AccountStorage.ts index b91f6c3e2..d6592a818 100644 --- a/fluxer_app/src/features/auth/state/AccountStorage.ts +++ b/fluxer_app/src/features/auth/state/AccountStorage.ts @@ -267,9 +267,6 @@ class AccountStorage { gifProvider: instance.gifProvider, gifProviderDisplayName: instance.gifProviderDisplayName, gifAttributionRequired: instance.gifAttributionRequired, - captchaProvider: instance.captchaProvider, - hcaptchaSiteKey: instance.hcaptchaSiteKey, - turnstileSiteKey: instance.turnstileSiteKey, apiCodeVersion: instance.apiCodeVersion, features: {...instance.features}, sso: instance.sso, diff --git a/fluxer_app/src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx b/fluxer_app/src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx index b96d0ae71..b6b3019d0 100644 --- a/fluxer_app/src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx +++ b/fluxer_app/src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx @@ -1,7 +1,6 @@ // SPDX-License-Identifier: AGPL-3.0-or-later import RuntimeCrash from '@app/features/app/state/RuntimeCrash'; -import {CaptchaModal} from '@app/features/auth/components/modals/CaptchaModal'; import {openClaimAccountModal} from '@app/features/auth/components/modals/ClaimAccountModal'; import {useSudo} from '@app/features/auth/hooks/useSudo'; import NewDeviceMonitoring from '@app/features/auth/state/NewDeviceMonitoring'; @@ -121,23 +120,6 @@ export const ToolsMenu: React.FC<{onClose: () => void}> = observer(({onClose}) = const [isResettingPremiumState, setIsResettingPremiumState] = useState(false); const socket = GatewayConnection.socket; const trustedDomainsCount = TrustedDomain.getTrustedDomainsCount(); - const handleOpenCaptchaModal = useCallback(() => { - ModalCommands.pushAfterBottomSheetClose( - onClose, - ModalCommands.modal(() => ( - { - logger.debug('Captcha solved from developer tools menu', {token, captchaType}); - }} - onCancel={() => { - logger.debug('Captcha cancelled from developer tools menu'); - }} - data-flx="channel.channel-header-components.developer-tools-context-menu.handle-open-captcha-modal.captcha-modal" - /> - )), - ); - }, [onClose]); const handleForgetAuthorizedIps = useCallback(async () => { setIsForgettingAuthorizedIps(true); try { @@ -281,12 +263,6 @@ export const ToolsMenu: React.FC<{onClose: () => void}> = observer(({onClose}) = > Show new device modal - - Open captcha modal - {0}" msgstr "من <0>{0}" #. Label for SMTP from email input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1025 +#: src/features/app/components/setup/SetupWizardSteps.tsx:999 msgid "From email" msgstr "البريد الإلكتروني للمرسل" #. Label for SMTP from name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1029 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1003 msgid "From name" msgstr "اسم المرسل" @@ -16204,7 +16175,7 @@ msgid "GIF preview" msgstr "معاينة GIF" #. Setup wizard title for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:969 +#: src/features/app/components/setup/SetupWizardSteps.tsx:962 msgid "GIF search" msgstr "البحث عن صور GIF" @@ -16853,21 +16824,12 @@ msgstr "هل لديك رمز هدية؟ استبدله لفتح {PREMIUM_PRODUCT msgid "Having fun?" msgstr "هل تستمتع بوقتك؟" -#: src/features/auth/components/modals/CaptchaModal.tsx:175 -msgid "Having issues? Try hCaptcha instead" -msgstr "هل تواجه مشكلات؟ جرّب hCaptcha بدلاً من ذلك" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:63 msgctxt "us-state" msgid "Hawaii" msgstr "هاواي" -#. hCaptcha provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1013 -msgid "hCaptcha" -msgstr "hCaptcha" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:238 msgid "HD" @@ -19768,7 +19730,7 @@ msgid "Logo" msgstr "الشعار" #. Label for Bluesky OAuth logo URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1065 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1039 msgid "Logo URL" msgstr "رابط الشعار" @@ -22941,7 +22903,7 @@ msgid "No tokens match \"{searchQuery}\"." msgstr "لا توجد رموز مطابقة لـ \"{searchQuery}\"." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:92 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:91 msgid "No trusted domains" msgstr "لا توجد نطاقات موثوقة" @@ -23696,10 +23658,6 @@ msgstr "فتح منتقي المتصفح" msgid "Open call view" msgstr "فتح عرض المكالمة" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:288 -msgid "Open captcha modal" -msgstr "فتح نافذة الكابتشا" - #. Accessible label for the channel header title button in a community channel. #: src/features/channel/components/channel_header/shared.ts:14 msgid "Open channel details for {channelName}" @@ -23712,7 +23670,7 @@ msgstr "فتح تفاصيل القناة لـ {channelName}" msgid "Open chat" msgstr "فتح الدردشة" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:314 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:290 msgid "Open claim account modal" msgstr "فتح نافذة المطالبة بالحساب" @@ -23944,11 +23902,11 @@ msgstr "فتح الملصق في المتصفح" msgid "Open streaming privacy settings" msgstr "فتح إعدادات خصوصية البث" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:327 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:303 msgid "Open sudo verification modal" msgstr "فتح نافذة إعادة التحقق من الهوية (sudo)" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:342 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:318 msgid "Open system DM" msgstr "فتح رسالة مباشرة من النظام" @@ -24430,7 +24388,7 @@ msgstr "تتطلب مفاتيح المرور حزمة macOS موقّعة بمع #. Generic form-field label for a password. #. Label for SMTP password input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1036 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1010 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:146 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:183 @@ -25212,7 +25170,7 @@ msgid "Popup" msgstr "نافذة منبثقة" #. Label for SMTP port input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1034 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1008 msgid "Port" msgstr "المنفذ" @@ -25338,7 +25296,7 @@ msgid "Premium since date" msgstr "تاريخ بدء Premium" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:71 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:70 msgid "Premium state reset on the backend." msgstr "تمت إعادة تعيين حالة Premium في الواجهة الخلفية." @@ -25608,7 +25566,7 @@ msgid "Privacy settings" msgstr "إعدادات الخصوصية" #. Label for Bluesky OAuth privacy URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1073 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1047 msgid "Privacy URL" msgstr "رابط سياسة الخصوصية" @@ -25633,7 +25591,7 @@ msgid "Private details" msgstr "التفاصيل الخاصة" #. Label for Bluesky OAuth private key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1081 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1055 msgid "Private key" msgstr "المفتاح الخاص" @@ -25699,18 +25657,18 @@ msgstr "لون الملف الشخصي" #. Settings section label for editing profile appearance and identity. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:105 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:104 #: src/features/user/components/settings_utils/section_registry/GeneralSettingsSections.ts:6 msgid "Profile customization" msgstr "تخصيص الملف الشخصي" #. Label in the my profile tab. Preserve {selectedGuildName}; it is inserted by code. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:101 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:100 msgid "Profile customization for {selectedGuildName}" msgstr "تخصيص الملف الشخصي لـ {selectedGuildName}" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:97 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:96 msgid "Profile customization form" msgstr "نموذج تخصيص الملف الشخصي" @@ -25775,7 +25733,7 @@ msgid "Profile type" msgstr "نوع الملف الشخصي" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:77 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:76 msgid "Profile updated" msgstr "تم تحديث الملف الشخصي" @@ -25812,7 +25770,7 @@ msgstr "السؤال عند توصيل أجهزة صوت جديدة" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:142 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:141 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:177 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:160 msgid "Pronouns" @@ -25842,11 +25800,6 @@ msgstr "أدخل معرف المستخدم أو اسم المستخدم للشخ msgid "Provide your full legal name for the declaration." msgstr "يرجى تقديم اسمك القانوني الكامل للإقرار." -#. Label for an integration provider choice. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 -msgid "Provider" -msgstr "مزود" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27626,7 +27579,7 @@ msgid "Reset password" msgstr "إعادة تعيين كلمة المرور" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:79 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:78 msgid "Reset premium state" msgstr "إعادة تعيين حالة Premium" @@ -27635,7 +27588,7 @@ msgstr "إعادة تعيين حالة Premium" msgid "Reset slider to default value" msgstr "إعادة تعيين شريط التمرير إلى القيمة الافتراضية" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:247 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:229 msgid "Reset socket" msgstr "إعادة تعيين المقبس" @@ -27684,7 +27637,7 @@ msgid "Reset zoom" msgstr "إعادة ضبط التكبير" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:112 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:111 msgid "Resetting premium state..." msgstr "جارٍ إعادة تعيين حالة Premium..." @@ -28315,7 +28268,7 @@ msgid "Run the instance as one community instead of many. This can only be enabl msgstr "شغّل المثيل كمجتمع واحد بدلاً من مجتمعات متعددة. يمكن تفعيل هذا الآن فقط، أثناء الإعداد." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:100 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:99 msgid "Runtime utilities" msgstr "أدوات مساعدة لوقت التشغيل" @@ -29103,11 +29056,6 @@ msgstr "تم النقر على الزر الثانوي." msgid "Secret" msgstr "سري" -#. Label for a CAPTCHA secret key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1020 -msgid "Secret key" -msgstr "مفتاح سري" - #. Settings search entry label. Names the settings search entry in the settings UI. #. Short label in the secrets section. Keep it concise. Keep the tone plain and specific. #: src/features/user/components/modals/tabs/applications_tab/application_detail/SecretsSection.tsx:11 @@ -29925,7 +29873,7 @@ msgid "Set up authenticator app" msgstr "إعداد تطبيق المصادقة" #. Option for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:953 +#: src/features/app/components/setup/SetupWizardSteps.tsx:946 msgid "Set up later" msgstr "الإعداد لاحقًا" @@ -30427,7 +30375,7 @@ msgstr "إظهار قائمة الرسائل المباشرة المضمنة" msgid "Show just the typing indicator without avatars" msgstr "إظهار مؤشر الكتابة فقط بدون صور رمزية" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:308 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:284 msgid "Show keyboard mode intro" msgstr "إظهار مقدمة وضع لوحة المفاتيح" @@ -30538,7 +30486,7 @@ msgstr "إظهار Neko" msgid "Show new device alerts" msgstr "إظهار تنبيهات الأجهزة الجديدة" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:282 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:264 msgid "Show new device modal" msgstr "إظهار نافذة الجهاز الجديد المنبثقة" @@ -30820,7 +30768,7 @@ msgid "Signed-in devices" msgstr "الأجهزة التي سجّلت الدخول منها" #. Label for Bluesky OAuth signing key ID input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1077 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1051 msgid "Signing key ID" msgstr "معرف مفتاح التوقيع" @@ -30910,11 +30858,6 @@ msgstr "سطر واحد" msgid "Single user (all statuses)" msgstr "مستخدم واحد (جميع الحالات)" -#. Label for a CAPTCHA site key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 -msgid "Site key" -msgstr "مفتاح الموقع" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:98 @@ -30964,7 +30907,7 @@ msgid "Skip the system leave notice — nobody gets pinged." msgstr "تخطَّ إشعار المغادرة الذي يرسله النظام، فلن يتلقى أحد تنبيهًا." #. Description for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:957 +#: src/features/app/components/setup/SetupWizardSteps.tsx:950 msgid "Skip this now and configure it from the admin panel." msgstr "تخطَّ هذا الآن واضبطه من لوحة المسؤول." @@ -31212,17 +31155,17 @@ msgid "SMS verification is unavailable right now. Try again later or contact sup msgstr "التحقق عبر الرسائل النصية غير متاح حاليًا. حاول مرة أخرى لاحقًا أو تواصل مع فريق الدعم." #. Success message after validating SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1045 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 msgid "SMTP connection verified." msgstr "تم التحقق من اتصال SMTP." #. Label for SMTP host input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1033 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1007 msgid "SMTP host" msgstr "مضيف SMTP" #. Failure message after validating SMTP credentials when the server returns no error detail. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1049 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1023 msgid "SMTP validation failed." msgstr "فشل التحقق من إعدادات SMTP." @@ -31402,7 +31345,7 @@ msgstr "حدث خطأ ما. يُرجى المحاولة مرة أخرى لاحق #. Inline error in the web deep-link prompt when opening the desktop app fails. #. Toast error shown when the mature content check request fails unexpectedly. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:18 -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:580 +#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 #: src/features/auth/flow/DesktopDeepLinkPrompt.tsx:31 msgid "Something went wrong. Try again." msgstr "حدث خطأ ما. يُرجى المحاولة مرة أخرى." @@ -32099,6 +32042,11 @@ msgstr "لا تزال الفهرسة جارية. تحقق مجددًا بعد ق msgid "Still Neko" msgstr "نيكو ساكن" +#. Small toast shown only when an automatic background check before sign-in, sign-up or a similar request takes more than a couple of seconds. No user action needed. Keep it short and calm. +#: src/features/auth/altcha/CaptchaInterceptor.ts:13 +msgid "Still working on it…" +msgstr "لا يزال قيد المعالجة…" + #. Stop-recording button label in the desktop voice message composer. #: src/features/voice/components/VoiceMessageComposerModal.tsx:65 msgid "Stop" @@ -33013,7 +32961,7 @@ msgid "Terms of service" msgstr "شروط الخدمة" #. Label for Bluesky OAuth terms URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1069 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1043 msgid "Terms URL" msgstr "رابط الشروط" @@ -33023,7 +32971,7 @@ msgid "Terrorism or violent extremism" msgstr "الإرهاب أو التطرف العنيف" #. Button that validates SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1041 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1015 msgid "Test SMTP" msgstr "اختبار SMTP" @@ -33800,7 +33748,7 @@ msgid "This clears quick CSS, imported themes, uploaded assets, and local file r msgstr "سيؤدي هذا إلى مسح CSS السريع والسمات المستوردة والأصول التي تم تحميلها ومراجع الملفات المحلية على هذا الجهاز." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:83 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:82 msgid "This clears your backend premium state entirely, including premium type, billing metadata, and override flags." msgstr "يمحو هذا حالة Premium في الواجهة الخلفية بالكامل، بما في ذلك نوع Premium وبيانات الفوترة الوصفية وعلامات التجاوز." @@ -34200,7 +34148,7 @@ msgid "This message no longer exists." msgstr "لم تعد هذه الرسالة موجودة." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:130 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:129 msgid "This nickname will only be visible in this community" msgstr "سيظهر هذا الاسم المستعار في هذا المجتمع فقط" @@ -34277,12 +34225,12 @@ msgid "This removes all custom CSS overrides. Theme files in your library are no msgstr "سيؤدي هذا إلى إزالة جميع تجاوزات CSS المخصصة. لن تتأثر ملفات السمات في مكتبتك." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:50 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:49 msgid "This removes all previously authorized IP addresses on your account. The next login from any IP will require email verification." msgstr "سيؤدي هذا إلى إزالة جميع عناوين IP المصرح بها مسبقًا في حسابك. سيتطلب تسجيل الدخول التالي من أي عنوان IP التحقق عبر البريد الإلكتروني." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:67 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:66 msgid "This removes all trusted domains. You will see the external link warning for all domains again." msgstr "سيؤدي هذا إلى إزالة جميع النطاقات الموثوقة. ستظهر لك رسالة تحذير الرابط الخارجي لجميع النطاقات مرة أخرى." @@ -34949,7 +34897,7 @@ msgstr "لا تنطبق تغييرات أيقونة علبة النظام إلا msgid "Trending GIFs" msgstr "صور GIF رائجة" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:383 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:359 msgid "Trigger React crash" msgstr "افتعال عطل في React" @@ -35008,7 +34956,7 @@ msgid "Trusted domains" msgstr "النطاقات الموثوقة" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:55 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:54 msgid "Trusted domains cleared." msgstr "تم مسح النطاقات الموثوقة." @@ -35054,7 +35002,6 @@ msgid "Try a different variable name or clear the search." msgstr "جرّب اسم متغير مختلف أو امسح البحث." #. Generic action label for retrying a failed or interrupted operation. -#: src/features/auth/components/AltchaVerification.tsx:53 #: src/features/auth/flow/AuthRouteLoadError.tsx:22 #: src/features/i18n/utils/CommonMessageDescriptors.ts:75 msgid "Try again" @@ -35132,10 +35079,6 @@ msgstr "جرّب مفتاح الأمان / مفتاح المرور بدلاً م msgid "Try sending your message again." msgstr "حاول إرسال رسالتك مرة أخرى." -#: src/features/auth/components/modals/CaptchaModal.tsx:177 -msgid "Try Turnstile instead" -msgstr "جرّب Turnstile بدلاً من ذلك" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:135 msgid "TTS" @@ -36890,7 +36833,7 @@ msgid "Use this when troubleshooting the client or collecting logs. It may add v msgstr "استخدم هذا عند استكشاف أخطاء العميل وإصلاحها أو جمع السجلات. قد يضيف رسائل مطولة إلى وحدة تحكم المتصفح للعميل الحالي." #. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1037 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1011 msgid "Use TLS" msgstr "استخدام TLS" @@ -37056,7 +36999,7 @@ msgstr "مستوى صوت المستخدم" #. Generic form-field label for a username. #. Label for SMTP username input. #. Settings search entry label. Also used as a search synonym in the settings search bar. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 #: src/features/i18n/utils/CommonMessageDescriptors.ts:572 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:218 #: src/features/user/components/modals/tabs/my_profile_tab/MyProfileTabUsernameSection.tsx:56 @@ -37337,11 +37280,6 @@ msgstr "التحقق من رقم الهاتف" msgid "Verify phone number form" msgstr "نموذج التحقق من رقم الهاتف" -#. Short label in the authentication captcha modal. Keep the tone plain and specific. -#: src/features/auth/components/modals/CaptchaModal.tsx:17 -msgid "Verify you're human" -msgstr "تأكيد أنك لست روبوتًا" - #. Title of the error modal shown when an unverified account tries to start a DM. #. Title shown when an unverified account cannot start a DM or group DM. #: src/features/app/components/alerts/DmActionErrorModal.tsx:40 @@ -37369,22 +37307,22 @@ msgid "Verify your email before adding an authenticator app." msgstr "تحقق من بريدك الإلكتروني قبل إضافة تطبيق مصادقة." #. Description text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:117 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:116 msgid "Verify your email before changing your community nickname, avatar, banner, bio, pronouns, or accent color." msgstr "تحقق من بريدك الإلكتروني قبل تغيير اسمك المستعار في المجتمع أو صورتك الرمزية أو لافتتك أو نبذتك الشخصية أو الضمائر أو لون التمييز." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:121 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:120 msgid "Verify your email before changing your username, display name, avatar, banner, bio, pronouns, time zone, or {premiumProductName} badge privacy." msgstr "تحقق من بريدك الإلكتروني قبل تغيير اسم المستخدم أو اسم العرض أو الصورة الرمزية أو اللافتة أو النبذة الشخصية أو الضمائر أو المنطقة الزمنية أو خصوصية شارة {premiumProductName}." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:85 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:84 msgid "Verify your email before editing this community profile. You can still preview it here." msgstr "تحقق من بريدك الإلكتروني قبل تعديل ملفك الشخصي في هذا المجتمع. لا يزال بإمكانك معاينته هنا." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:89 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:88 msgid "Verify your email before editing your profile. You can still preview it here." msgstr "تحقق من بريدك الإلكتروني قبل تعديل ملفك الشخصي. لا يزال بإمكانك معاينته هنا." @@ -37416,12 +37354,12 @@ msgid "Verify your email to continue using {productName}." msgstr "تحقق من بريدك الإلكتروني لمتابعة استخدام {productName}." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:109 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:108 msgid "Verify your email to edit this community profile" msgstr "تحقق من بريدك الإلكتروني لتعديل ملفك الشخصي في هذا المجتمع" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:113 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:112 msgid "Verify your email to edit your profile" msgstr "تحقق من بريدك الإلكتروني لتعديل ملفك الشخصي" @@ -38398,10 +38336,6 @@ msgstr "لقد خفضنا سعر {premiumProductName} في البرازيل. أ msgid "We need one verification step before you continue. This helps protect accounts and keep spam off {productName}." msgstr "نحتاج إلى خطوة تحقق واحدة قبل المتابعة. يساعد هذا في حماية الحسابات وإبعاد الرسائل غير المرغوب فيها عن {productName}." -#: src/features/auth/components/modals/CaptchaModal.tsx:128 -msgid "We need to make sure you're not a bot. Complete the verification below." -msgstr "نحتاج إلى التأكد من أنك لست روبوتًا. أكمل التحقق أدناه." - #. Required-action modal intro text when both email and phone verification are required. #: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:216 msgid "We need two verification steps before you continue. We will show one step at a time." @@ -39256,7 +39190,7 @@ msgid "You can't befriend yourself" msgstr "لا يمكنك إضافة نفسك كصديق" #. Label in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:134 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:133 msgid "You can't change your nickname here" msgstr "لا يمكنك تغيير اسمك المستعار هنا" @@ -39506,7 +39440,7 @@ msgid "You have unsaved changes." msgstr "لديك تغييرات غير محفوظة." #. Warning text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:81 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:80 msgid "You have unsaved changes. Save or reset before leaving." msgstr "لديك تغييرات غير محفوظة. احفظها أو أعد تعيينها قبل المغادرة." @@ -40031,10 +39965,6 @@ msgstr "تعذّر إكمال الإجراء الذي طلبته لأن أنظم msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "طلبك قيد المراجعة. لا يزال بإمكانك تحديث تفاصيل الإدراج أو سحب الطلب." -#: src/features/auth/components/AltchaVerification.tsx:50 -msgid "Your browser couldn't finish the check." -msgstr "لم يتمكن متصفحك من إكمال التحقق." - #. Body of the browser-audio-required modal explaining why the user must click before audio can play. #: src/features/voice/components/modals/AudioPlaybackPermissionModal.tsx:12 msgid "Your browser requires user interaction before audio can be played. Click the button below to enable voice chat." @@ -40386,7 +40316,7 @@ msgid "YouTube enrichment" msgstr "إثراء يوتيوب" #. Setup wizard title for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:977 +#: src/features/app/components/setup/SetupWizardSteps.tsx:970 msgid "YouTube previews" msgstr "معاينات يوتيوب" diff --git a/fluxer_app/src/features/i18n/locales/auto-i18n-reviewed-unchanged.json b/fluxer_app/src/features/i18n/locales/auto-i18n-reviewed-unchanged.json index 5195d5bb3..c046cc281 100644 --- a/fluxer_app/src/features/i18n/locales/auto-i18n-reviewed-unchanged.json +++ b/fluxer_app/src/features/i18n/locales/auto-i18n-reviewed-unchanged.json @@ -14,9 +14,6 @@ { "msgid": "Bluesky OAuth" }, - { - "msgid": "Cloudflare Turnstile" - }, { "msgid": "Ctrl" }, @@ -50,9 +47,6 @@ { "msgid": "deleted-role" }, - { - "msgid": "hCaptcha" - }, { "msgid": "macOS" }, @@ -82,9 +76,6 @@ { "msgid": "Cisco" }, - { - "msgid": "Cloudflare Turnstile" - }, { "msgid": "Ctrl" }, @@ -130,9 +121,6 @@ { "msgid": "deleted-role" }, - { - "msgid": "hCaptcha" - }, { "msgid": "macOS" }, @@ -192,9 +180,6 @@ { "msgid": "Cisco" }, - { - "msgid": "Cloudflare Turnstile" - }, { "msgid": "Ctrl" }, @@ -330,9 +315,6 @@ { "msgid": "emoji {emojiName}" }, - { - "msgid": "hCaptcha" - }, { "msgid": "macOS" }, @@ -454,9 +436,6 @@ { "msgid": "Cisco" }, - { - "msgid": "Cloudflare Turnstile" - }, { "msgid": "Codec" }, @@ -763,9 +742,6 @@ { "msgid": "emoji {emojiName}" }, - { - "msgid": "hCaptcha" - }, { "msgid": "link" }, @@ -933,9 +909,6 @@ { "msgid": "Client" }, - { - "msgid": "Cloudflare Turnstile" - }, { "msgid": "Code" }, @@ -1152,9 +1125,6 @@ { "msgid": "deleted-role" }, - { - "msgid": "hCaptcha" - }, { "msgid": "macOS" }, @@ -1256,9 +1226,6 @@ { "msgid": "Cisco" }, - { - "msgid": "Cloudflare Turnstile" - }, { "msgid": "Ctrl" }, @@ -1337,9 +1304,6 @@ { "msgid": "deleted-role" }, - { - "msgid": "hCaptcha" - }, { "msgid": "macOS" }, @@ -1743,9 +1707,6 @@ { "msgid": "Changed the voice region from {oldRegion} to {newRegion}." }, - { - "msgid": "Checking your browser. This takes a few seconds." - }, { "msgid": "Checkout is blocked for this account." }, @@ -2967,6 +2928,9 @@ { "msgid": "Still Neko" }, + { + "msgid": "Still working on it…" + }, { "msgid": "Stop Neko from chasing your cursor while keeping it draggable and interactive." }, @@ -3381,9 +3345,6 @@ { "msgid": "Your account works normally again straight away and nothing is removed. We can ask for this check again later." }, - { - "msgid": "Your browser couldn't finish the check." - }, { "msgid": "Your capture device is sending {deliveredResolution} instead of {resolution}." }, @@ -4137,9 +4098,6 @@ { "msgid": "Cisco" }, - { - "msgid": "Cloudflare Turnstile" - }, { "msgid": "Color" }, @@ -4308,9 +4266,6 @@ { "msgid": "emoji {emojiName}" }, - { - "msgid": "hCaptcha" - }, { "msgid": "macOS" }, @@ -4426,9 +4381,6 @@ { "msgid": "Cisco" }, - { - "msgid": "Cloudflare Turnstile" - }, { "msgid": "Color" }, @@ -4534,9 +4486,6 @@ { "msgid": "emoji {emojiName}" }, - { - "msgid": "hCaptcha" - }, { "msgid": "macOS" }, @@ -4614,9 +4563,6 @@ { "msgid": "Cisco" }, - { - "msgid": "Cloudflare Turnstile" - }, { "msgid": "Ctrl" }, @@ -4707,9 +4653,6 @@ { "msgid": "emoji {emojiName}" }, - { - "msgid": "hCaptcha" - }, { "msgid": "macOS" }, @@ -4828,9 +4771,6 @@ { "msgid": "Client" }, - { - "msgid": "Cloudflare Turnstile" - }, { "msgid": "Code" }, @@ -5131,9 +5071,6 @@ { "msgid": "deleted-role" }, - { - "msgid": "hCaptcha" - }, { "msgid": "image" }, @@ -5254,9 +5191,6 @@ { "msgid": "Alt" }, - { - "msgid": "Cloudflare Turnstile" - }, { "msgid": "Ctrl" }, @@ -5311,9 +5245,6 @@ { "msgid": "deleted-role" }, - { - "msgid": "hCaptcha" - }, { "msgid": "macOS" }, @@ -5388,9 +5319,6 @@ { "msgid": "deleted-role" }, - { - "msgid": "hCaptcha" - }, { "msgid": "macOS" }, @@ -5453,9 +5381,6 @@ { "msgid": "Cisco" }, - { - "msgid": "Cloudflare Turnstile" - }, { "msgid": "Ctrl" }, @@ -5564,9 +5489,6 @@ { "msgid": "emoji {emojiName}" }, - { - "msgid": "hCaptcha" - }, { "msgid": "macOS" }, @@ -5632,9 +5554,6 @@ { "msgid": "Cisco" }, - { - "msgid": "Cloudflare Turnstile" - }, { "msgid": "Ctrl" }, @@ -5734,9 +5653,6 @@ { "msgid": "deleted-role" }, - { - "msgid": "hCaptcha" - }, { "msgid": "link" }, @@ -5838,9 +5754,6 @@ { "msgid": "Cisco" }, - { - "msgid": "Cloudflare Turnstile" - }, { "msgid": "Codec" }, @@ -6042,9 +5955,6 @@ { "msgid": "deleted-role" }, - { - "msgid": "hCaptcha" - }, { "msgid": "macOS" }, @@ -6174,9 +6084,6 @@ { "msgid": "Client" }, - { - "msgid": "Cloudflare Turnstile" - }, { "msgid": "Codec" }, @@ -6390,9 +6297,6 @@ { "msgid": "deleted-role" }, - { - "msgid": "hCaptcha" - }, { "msgid": "link" }, @@ -6494,9 +6398,6 @@ { "msgid": "Cisco" }, - { - "msgid": "Cloudflare Turnstile" - }, { "msgid": "Ctrl" }, @@ -6566,9 +6467,6 @@ { "msgid": "deleted-role" }, - { - "msgid": "hCaptcha" - }, { "msgid": "macOS" }, @@ -6619,9 +6517,6 @@ { "msgid": "Bluesky OAuth" }, - { - "msgid": "Cloudflare Turnstile" - }, { "msgid": "Ctrl" }, @@ -6658,9 +6553,6 @@ { "msgid": "deleted-role" }, - { - "msgid": "hCaptcha" - }, { "msgid": "macOS" }, @@ -6830,9 +6722,6 @@ { "msgid": "Client" }, - { - "msgid": "Cloudflare Turnstile" - }, { "msgid": "Code" }, @@ -7196,9 +7085,6 @@ { "msgid": "emoji {emojiName}" }, - { - "msgid": "hCaptcha" - }, { "msgid": "link" }, @@ -7343,9 +7229,6 @@ { "msgid": "Cisco" }, - { - "msgid": "Cloudflare Turnstile" - }, { "msgid": "Ctrl" }, @@ -7559,9 +7442,6 @@ { "msgid": "emoji {emojiName}" }, - { - "msgid": "hCaptcha" - }, { "msgid": "macOS" }, @@ -7613,9 +7493,6 @@ { "msgid": "Cisco" }, - { - "msgid": "Cloudflare Turnstile" - }, { "msgid": "Ctrl" }, @@ -7757,9 +7634,6 @@ { "msgid": "deleted-role" }, - { - "msgid": "hCaptcha" - }, { "msgid": "macOS" }, @@ -7826,9 +7700,6 @@ { "msgid": "Cisco" }, - { - "msgid": "Cloudflare Turnstile" - }, { "msgid": "Codec" }, @@ -8009,9 +7880,6 @@ { "msgid": "emoji {emojiName}" }, - { - "msgid": "hCaptcha" - }, { "msgid": "link" }, @@ -8144,9 +8012,6 @@ { "msgid": "Client" }, - { - "msgid": "Cloudflare Turnstile" - }, { "msgid": "Codec" }, @@ -8372,9 +8237,6 @@ { "msgid": "emoji {emojiName}" }, - { - "msgid": "hCaptcha" - }, { "msgid": "link" }, @@ -8469,9 +8331,6 @@ { "msgid": "Cisco" }, - { - "msgid": "Cloudflare Turnstile" - }, { "msgid": "Ctrl" }, @@ -8517,9 +8376,6 @@ { "msgid": "deleted-role" }, - { - "msgid": "hCaptcha" - }, { "msgid": "macOS" }, @@ -8588,9 +8444,6 @@ { "msgid": "Cisco" }, - { - "msgid": "Cloudflare Turnstile" - }, { "msgid": "Codec" }, @@ -8777,9 +8630,6 @@ { "msgid": "emoji {emojiName}" }, - { - "msgid": "hCaptcha" - }, { "msgid": "macOS" }, @@ -8870,9 +8720,6 @@ { "msgid": "Cisco" }, - { - "msgid": "Cloudflare Turnstile" - }, { "msgid": "Ctrl" }, @@ -8924,9 +8771,6 @@ { "msgid": "deleted-role" }, - { - "msgid": "hCaptcha" - }, { "msgid": "macOS" }, @@ -8983,9 +8827,6 @@ { "msgid": "Cisco" }, - { - "msgid": "Cloudflare Turnstile" - }, { "msgid": "Ctrl" }, @@ -9085,9 +8926,6 @@ { "msgid": "deleted-role" }, - { - "msgid": "hCaptcha" - }, { "msgid": "macOS" }, @@ -9140,9 +8978,6 @@ { "msgid": "Cisco" }, - { - "msgid": "Cloudflare Turnstile" - }, { "msgid": "Ctrl" }, @@ -9200,9 +9035,6 @@ { "msgid": "deleted-role" }, - { - "msgid": "hCaptcha" - }, { "msgid": "macOS" }, @@ -9256,9 +9088,6 @@ { "msgid": "Cisco" }, - { - "msgid": "Cloudflare Turnstile" - }, { "msgid": "Croatia" }, @@ -9379,9 +9208,6 @@ { "msgid": "deleted-role" }, - { - "msgid": "hCaptcha" - }, { "msgid": "macOS" }, @@ -9427,9 +9253,6 @@ { "msgid": "Bluesky OAuth" }, - { - "msgid": "Cloudflare Turnstile" - }, { "msgid": "Ctrl" }, @@ -9484,9 +9307,6 @@ { "msgid": "deleted-role" }, - { - "msgid": "hCaptcha" - }, { "msgid": "macOS" }, @@ -9531,9 +9351,6 @@ { "msgid": "Bluesky OAuth" }, - { - "msgid": "Cloudflare Turnstile" - }, { "msgid": "Ctrl" }, @@ -9591,9 +9408,6 @@ { "msgid": "deleted-role" }, - { - "msgid": "hCaptcha" - }, { "msgid": "macOS" }, diff --git a/fluxer_app/src/features/i18n/locales/bg/messages.po b/fluxer_app/src/features/i18n/locales/bg/messages.po index 95d5a16d7..763a3c939 100644 --- a/fluxer_app/src/features/i18n/locales/bg/messages.po +++ b/fluxer_app/src/features/i18n/locales/bg/messages.po @@ -2395,11 +2395,6 @@ msgstr "60 секунди" msgid "7 days" msgstr "7 дни" -#. Required-action error when the API requires a captcha for phone verification. -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 -msgid "A browser check is required before phone verification. Try again from the sign-in page or contact support." -msgstr "Необходима е проверка на браузъра, преди да потвърдиш телефона си. Опитай отново от страницата за вход или се свържи с екипа за поддръжка." - #. Hint shown beside in:. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:77 msgid "a channel" @@ -2928,7 +2923,7 @@ msgid "Add a friend to get started." msgstr "Добави приятел, за да започнеш." #. Setup wizard body for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:973 +#: src/features/app/components/setup/SetupWizardSteps.tsx:966 msgid "Add a Klipy API key to enable GIF search at runtime." msgstr "Добави API ключ за Klipy, за да включиш търсенето на GIF по време на работа." @@ -2965,7 +2960,7 @@ msgid "Add a working email" msgstr "Добави работещ имейл адрес" #. Setup wizard body for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:981 +#: src/features/app/components/setup/SetupWizardSteps.tsx:974 msgid "Add a YouTube Data API key to enrich YouTube links." msgstr "Добави ключ за YouTube Data API, за да обогатиш линковете към YouTube." @@ -3011,7 +3006,7 @@ msgid "Add another reaction" msgstr "Добавяне на друга реакция" #. Setup wizard body for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1005 +#: src/features/app/components/setup/SetupWizardSteps.tsx:990 msgid "Add Bluesky OAuth client metadata and a signing key." msgstr "Добави метаданни за OAuth клиента на Bluesky и ключ за подписване." @@ -3161,7 +3156,7 @@ msgid "Add shortcut" msgstr "Добавяне на клавишна комбинация" #. Setup wizard body for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:997 +#: src/features/app/components/setup/SetupWizardSteps.tsx:982 msgid "Add SMTP credentials so the instance can send verification and notification email." msgstr "Добави SMTP идентификационни данни, за да може инстанцията да изпраща имейли за потвърждение и известия." @@ -3188,7 +3183,7 @@ msgid "Add stream" msgstr "Добавяне на стрийм" #. Description for configuring an optional setup wizard integration now. -#: src/features/app/components/setup/SetupWizardSteps.tsx:965 +#: src/features/app/components/setup/SetupWizardSteps.tsx:958 msgid "Add the credentials during setup." msgstr "Добави идентификационните данни по време на настройката." @@ -3954,7 +3949,7 @@ msgid "An invalid status was provided. You can now close this tab and return to msgstr "Получен е невалиден статус. Вече можеш да затвориш този раздел и да се върнеш в приложението." #. Short label in the authentication auth form. Keep the tone plain and specific. -#: src/features/auth/hooks/useAuthForm.ts:13 +#: src/features/auth/hooks/useAuthForm.ts:12 msgid "An unexpected error occurred" msgstr "Възникна неочаквана грешка" @@ -4262,7 +4257,7 @@ msgid "Anyone can request an account, but an administrator must approve it." msgstr "Всеки може да поиска акаунт, но администратор трябва да го одобри." #. Label for an integration API key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1018 +#: src/features/app/components/setup/SetupWizardSteps.tsx:994 msgid "API key" msgstr "API ключ" @@ -4958,7 +4953,7 @@ msgid "Authorized apps" msgstr "Оторизирани приложения" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:38 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:37 msgid "Authorized IPs cleared. New logins will require email verification." msgstr "Оторизираните IP адреси са изчистени. Новите влизания ще изискват потвърждение по имейл." @@ -5730,7 +5725,7 @@ msgid "Bluesky connections" msgstr "Връзки с Bluesky" #. Setup wizard title for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1001 +#: src/features/app/components/setup/SetupWizardSteps.tsx:986 msgid "Bluesky OAuth" msgstr "Bluesky OAuth" @@ -5897,11 +5892,6 @@ msgstr "Разрешенията за бот не могат да бъдат о msgid "Bot profile" msgstr "Профил на бота" -#. Setup wizard title for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:985 -msgid "Bot protection" -msgstr "Защита от ботове" - #. Short label in the authentication OAUTH scopes step. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/OAuthScopesStep.tsx:20 msgid "Bot scope requested" @@ -6554,11 +6544,6 @@ msgstr "Не може да се редактира" msgid "Cannot delete account" msgstr "Акаунтът не може да бъде изтрит" -#. Toast error shown when captcha verification fails inside the auth captcha interceptor. -#: src/features/auth/components/CaptchaInterceptor.tsx:15 -msgid "Captcha verification failed. Try again." -msgstr "Проверката с CAPTCHA не бе успешна. Опитай пак." - #. Section header in the Linux audio source picker. Lists capture-target options (entire system / specific apps). #: src/features/voice/components/AudioSourcePickerLinux.tsx:50 msgid "Capture" @@ -7398,10 +7383,6 @@ msgstr "Проверка на достъпа..." msgid "Checking screen recording permission..." msgstr "Проверка на разрешението за запис на екрана..." -#: src/features/auth/components/AltchaVerification.tsx:62 -msgid "Checking your browser. This takes a few seconds." -msgstr "Проверяваме браузъра ви. Това отнема няколко секунди." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -7571,11 +7552,6 @@ msgstr "Избери „Файл“, след това „Добавяне в Do msgid "Choose friends to message." msgstr "Избери приятели, на които да пишеш." -#. Setup wizard body for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:989 -msgid "Choose hCaptcha or Cloudflare Turnstile for signup challenges." -msgstr "Избери hCaptcha или Cloudflare Turnstile за проверките при регистрация." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:455 msgid "Choose how chat moves after you send a message" @@ -7982,17 +7958,17 @@ msgid "Clear selection" msgstr "Изчистване на избора" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:88 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:87 msgid "Clear trust all setting" msgstr "Изчистване на настройката за доверие на всички" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:63 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:62 msgid "Clear trusted domains" msgstr "Изчистване на доверени домейни" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:96 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:95 msgid "Clear trusted domains ({trustedDomainsCount})" msgstr "Изчистване на доверени домейни ({trustedDomainsCount})" @@ -8002,7 +7978,7 @@ msgid "Clearer text" msgstr "По-ясен текст" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:108 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:107 msgid "Clearing trusted domains..." msgstr "Изчистване на доверени домейни..." @@ -8100,7 +8076,7 @@ msgid "Client" msgstr "Клиент" #. Label for Bluesky OAuth client name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1057 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1031 msgid "Client name" msgstr "Име на клиента" @@ -8117,7 +8093,7 @@ msgid "Client secret regenerated. Update any code that uses the old secret." msgstr "Клиентската тайна е генерирана наново. Актуализирай всеки код, който използва старата тайна." #. Label for Bluesky OAuth client URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1061 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 msgid "Client URL" msgstr "URL на клиента" @@ -8269,11 +8245,6 @@ msgstr "Затворени DM" msgid "Cloud upload" msgstr "Качване в облака" -#. Cloudflare Turnstile provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1014 -msgid "Cloudflare Turnstile" -msgstr "Cloudflare Turnstile" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:58 msgid "Coal" @@ -8669,7 +8640,7 @@ msgstr "Име на общността" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:126 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:125 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:113 msgid "Community nickname" msgstr "Прякор в общността" @@ -8722,7 +8693,7 @@ msgid "Community profile" msgstr "Профил на общността" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:73 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:72 msgid "Community profile updated" msgstr "Профилът на общността е актуализиран" @@ -8880,7 +8851,7 @@ msgid "Configure keyboard shortcuts" msgstr "Настройване на клавишните комбинации" #. Option for configuring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:961 +#: src/features/app/components/setup/SetupWizardSteps.tsx:954 msgid "Configure now" msgstr "Конфигуриране сега" @@ -12341,7 +12312,7 @@ msgstr "Прекъсване на връзката с {channel}" msgid "Disconnect from voice" msgstr "Прекъсване на връзката с гласовия чат" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:261 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:243 msgid "Disconnect socket" msgstr "Прекъсване на сокета" @@ -12479,7 +12450,7 @@ msgstr "Режим на показване" #. Short label in the inputs tab. Keep it concise. #. Short label in the my profile tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:22 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:138 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:137 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:61 msgid "Display name" msgstr "Показвано име" @@ -12625,7 +12596,7 @@ msgstr "Искаш ли да се присъединиш към {communityName}? #. Label in the accessibility tab. #. Label in the my profile tab. #: src/features/user/components/modals/tabs/AccessibilityTab.tsx:54 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:146 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:145 msgid "Doc, I'm from the future. I came here in a time machine that you invented. Now, I need your help to get back to the year 1985." msgstr "Док, аз съм от бъдещето. Дойдох тук с машина на времето, която ти изобрети. Сега ми трябва помощта ти, за да се върна в 1985 г." @@ -13262,7 +13233,7 @@ msgid "Edit your messages above or below" msgstr "Редактиране на съобщенията ви отгоре или отдолу" #. Button or menu action label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:93 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:92 msgid "Edit your profile appearance and see a live preview" msgstr "Редактирай изгледа на профила си и виж предварителен преглед на живо" @@ -13330,7 +13301,7 @@ msgid "Email changed" msgstr "Имейлът е променен" #. Setup wizard title for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:993 +#: src/features/app/components/setup/SetupWizardSteps.tsx:978 msgid "Email delivery" msgstr "Доставка на имейли" @@ -13635,7 +13606,7 @@ msgid "Enable beta feature" msgstr "Включване на бета функция" #. Label for enabling Bluesky OAuth in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1053 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1027 msgid "Enable Bluesky OAuth" msgstr "Активиране на Bluesky OAuth" @@ -13668,7 +13639,7 @@ msgid "Enable developer mode" msgstr "Включване на режим за разработчици" #. Label for enabling SMTP email delivery in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1021 +#: src/features/app/components/setup/SetupWizardSteps.tsx:995 msgid "Enable email delivery" msgstr "Активиране на доставка на имейли" @@ -14705,7 +14676,7 @@ msgid "Failed to ban member. Try again." msgstr "Неуспешно забраняване на достъпа на члена. Опитай отново." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:59 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:58 msgid "Failed to clear trusted domains." msgstr "Неуспешно изчистване на доверени домейни." @@ -14762,7 +14733,7 @@ msgid "Failed to enable camera." msgstr "Неуспешно включване на камерата." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:42 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:41 msgid "Failed to forget authorized IPs. Try again." msgstr "Неуспешно забравяне на оторизирани IP адреси. Опитай отново." @@ -14907,7 +14878,7 @@ msgid "Failed to resend verification code. Try again later." msgstr "Неуспешно повторно изпращане на кода за потвърждение. Опитай отново по-късно." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:75 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:74 msgid "Failed to reset premium state." msgstr "Неуспешно нулиране на премиум състоянието." @@ -15581,7 +15552,7 @@ msgstr "Принудително показване на скелета за з msgid "Force mature media" msgstr "Принудително показване на медия за възрастни" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:276 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:258 msgid "Force move to AFK channel" msgstr "Принудително преместване в AFK канал" @@ -15640,7 +15611,7 @@ msgid "Forced off" msgstr "Изключено принудително" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:46 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:45 msgid "Forget authorized IPs" msgstr "Забравяне на оторизирани IP адреси" @@ -15650,7 +15621,7 @@ msgid "Forget subscriptions" msgstr "Забравяне на абонаментите" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:104 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:103 msgid "Forgetting authorized IPs..." msgstr "Забравяне на оторизирани IP адреси..." @@ -15907,12 +15878,12 @@ msgid "from <0>{0}" msgstr "от <0>{0}" #. Label for SMTP from email input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1025 +#: src/features/app/components/setup/SetupWizardSteps.tsx:999 msgid "From email" msgstr "Имейл на подател" #. Label for SMTP from name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1029 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1003 msgid "From name" msgstr "Име на подател" @@ -16204,7 +16175,7 @@ msgid "GIF preview" msgstr "Преглед на GIF" #. Setup wizard title for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:969 +#: src/features/app/components/setup/SetupWizardSteps.tsx:962 msgid "GIF search" msgstr "Търсене на GIF" @@ -16853,21 +16824,12 @@ msgstr "Имате код за подарък? Осребрете го, за д msgid "Having fun?" msgstr "Забавляваш ли се?" -#: src/features/auth/components/modals/CaptchaModal.tsx:175 -msgid "Having issues? Try hCaptcha instead" -msgstr "Имаш проблеми? Опитай hCaptcha вместо това" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:63 msgctxt "us-state" msgid "Hawaii" msgstr "Хаваи" -#. hCaptcha provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1013 -msgid "hCaptcha" -msgstr "hCaptcha" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:238 msgid "HD" @@ -19768,7 +19730,7 @@ msgid "Logo" msgstr "Лого" #. Label for Bluesky OAuth logo URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1065 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1039 msgid "Logo URL" msgstr "URL адрес на логото" @@ -22941,7 +22903,7 @@ msgid "No tokens match \"{searchQuery}\"." msgstr "Няма токени, отговарящи на „{searchQuery}“." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:92 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:91 msgid "No trusted domains" msgstr "Няма доверени домейни" @@ -23696,10 +23658,6 @@ msgstr "Отваряне на браузър" msgid "Open call view" msgstr "Отваряне на разговора" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:288 -msgid "Open captcha modal" -msgstr "Отваряне на модалния прозорец за captcha" - #. Accessible label for the channel header title button in a community channel. #: src/features/channel/components/channel_header/shared.ts:14 msgid "Open channel details for {channelName}" @@ -23712,7 +23670,7 @@ msgstr "Отваряне на подробности за канала „{chann msgid "Open chat" msgstr "Отваряне на чата" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:314 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:290 msgid "Open claim account modal" msgstr "Отваряне на модалния прозорец за заявяване на акаунт" @@ -23944,11 +23902,11 @@ msgstr "Отваряне на стикера в браузър" msgid "Open streaming privacy settings" msgstr "Отваряне на настройките за поверителност на стрийминга" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:327 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:303 msgid "Open sudo verification modal" msgstr "Отваряне на модалния прозорец за sudo потвърждение" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:342 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:318 msgid "Open system DM" msgstr "Отваряне на системно DM" @@ -24430,7 +24388,7 @@ msgstr "Ключовете за достъп изискват подписан #. Generic form-field label for a password. #. Label for SMTP password input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1036 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1010 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:146 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:183 @@ -25212,7 +25170,7 @@ msgid "Popup" msgstr "Изскачащ прозорец" #. Label for SMTP port input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1034 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1008 msgid "Port" msgstr "Порт" @@ -25338,7 +25296,7 @@ msgid "Premium since date" msgstr "Премиум от дата" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:71 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:70 msgid "Premium state reset on the backend." msgstr "Състоянието на премиум е нулирано в бекенда." @@ -25608,7 +25566,7 @@ msgid "Privacy settings" msgstr "Настройки за поверителност" #. Label for Bluesky OAuth privacy URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1073 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1047 msgid "Privacy URL" msgstr "URL адрес за поверителност" @@ -25633,7 +25591,7 @@ msgid "Private details" msgstr "Лични данни" #. Label for Bluesky OAuth private key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1081 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1055 msgid "Private key" msgstr "Частен ключ" @@ -25699,18 +25657,18 @@ msgstr "Цвят на профила" #. Settings section label for editing profile appearance and identity. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:105 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:104 #: src/features/user/components/settings_utils/section_registry/GeneralSettingsSections.ts:6 msgid "Profile customization" msgstr "Персонализиране на профила" #. Label in the my profile tab. Preserve {selectedGuildName}; it is inserted by code. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:101 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:100 msgid "Profile customization for {selectedGuildName}" msgstr "Персонализиране на профила за {selectedGuildName}" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:97 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:96 msgid "Profile customization form" msgstr "Формуляр за персонализиране на профил" @@ -25775,7 +25733,7 @@ msgid "Profile type" msgstr "Тип на профила" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:77 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:76 msgid "Profile updated" msgstr "Профилът е актуализиран" @@ -25812,7 +25770,7 @@ msgstr "Показване на подкана при нови аудиоуст #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:142 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:141 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:177 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:160 msgid "Pronouns" @@ -25842,11 +25800,6 @@ msgstr "Въведи ID на потребител или потребителс msgid "Provide your full legal name for the declaration." msgstr "Посочи пълното си име по лична карта за декларацията." -#. Label for an integration provider choice. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 -msgid "Provider" -msgstr "Доставчик" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27626,7 +27579,7 @@ msgid "Reset password" msgstr "Нулиране на парола" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:79 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:78 msgid "Reset premium state" msgstr "Нулиране на премиум състоянието" @@ -27635,7 +27588,7 @@ msgstr "Нулиране на премиум състоянието" msgid "Reset slider to default value" msgstr "Възстановяване на плъзгача до стойността по подразбиране" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:247 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:229 msgid "Reset socket" msgstr "Нулиране на сокета" @@ -27684,7 +27637,7 @@ msgid "Reset zoom" msgstr "Възстановяване на мащаба" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:112 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:111 msgid "Resetting premium state..." msgstr "Нулиране на премиум състоянието..." @@ -28315,7 +28268,7 @@ msgid "Run the instance as one community instead of many. This can only be enabl msgstr "Пусни инстанцията като една общност, вместо като много. Това може да бъде активирано само сега, по време на настройката." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:100 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:99 msgid "Runtime utilities" msgstr "Помощни програми за изпълнение" @@ -29103,11 +29056,6 @@ msgstr "Натиснат е вторичният бутон." msgid "Secret" msgstr "Тайна" -#. Label for a CAPTCHA secret key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1020 -msgid "Secret key" -msgstr "Секретен ключ" - #. Settings search entry label. Names the settings search entry in the settings UI. #. Short label in the secrets section. Keep it concise. Keep the tone plain and specific. #: src/features/user/components/modals/tabs/applications_tab/application_detail/SecretsSection.tsx:11 @@ -29925,7 +29873,7 @@ msgid "Set up authenticator app" msgstr "Настройване на приложение за удостоверяване" #. Option for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:953 +#: src/features/app/components/setup/SetupWizardSteps.tsx:946 msgid "Set up later" msgstr "Настрой по-късно" @@ -30427,7 +30375,7 @@ msgstr "Показване на вградения списък с DM" msgid "Show just the typing indicator without avatars" msgstr "Показване само на индикатора за писане без аватари" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:308 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:284 msgid "Show keyboard mode intro" msgstr "Показване на въведението за режим „Клавиатура“" @@ -30538,7 +30486,7 @@ msgstr "Показване на Неко" msgid "Show new device alerts" msgstr "Показване на известия за нови устройства" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:282 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:264 msgid "Show new device modal" msgstr "Показване на модалния прозорец за ново устройство" @@ -30820,7 +30768,7 @@ msgid "Signed-in devices" msgstr "Устройства с активен вход" #. Label for Bluesky OAuth signing key ID input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1077 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1051 msgid "Signing key ID" msgstr "ID на ключ за подписване" @@ -30910,11 +30858,6 @@ msgstr "Един ред" msgid "Single user (all statuses)" msgstr "Един потребител (всички статуси)" -#. Label for a CAPTCHA site key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 -msgid "Site key" -msgstr "Ключ на сайта" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:98 @@ -30964,7 +30907,7 @@ msgid "Skip the system leave notice — nobody gets pinged." msgstr "Пропускане на системното съобщение за напускане – никой няма да бъде уведомен." #. Description for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:957 +#: src/features/app/components/setup/SetupWizardSteps.tsx:950 msgid "Skip this now and configure it from the admin panel." msgstr "Пропусни това сега и го конфигурирай от административния панел." @@ -31212,17 +31155,17 @@ msgid "SMS verification is unavailable right now. Try again later or contact sup msgstr "Потвърждението по SMS не е достъпно в момента. Опитай отново по-късно или се свържи с поддръжката." #. Success message after validating SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1045 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 msgid "SMTP connection verified." msgstr "SMTP връзката е проверена." #. Label for SMTP host input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1033 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1007 msgid "SMTP host" msgstr "SMTP хост" #. Failure message after validating SMTP credentials when the server returns no error detail. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1049 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1023 msgid "SMTP validation failed." msgstr "Проверката на SMTP е неуспешна." @@ -31402,7 +31345,7 @@ msgstr "Нещо се обърка. Опитай отново по-късно." #. Inline error in the web deep-link prompt when opening the desktop app fails. #. Toast error shown when the mature content check request fails unexpectedly. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:18 -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:580 +#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 #: src/features/auth/flow/DesktopDeepLinkPrompt.tsx:31 msgid "Something went wrong. Try again." msgstr "Нещо се обърка. Опитай отново." @@ -32099,6 +32042,11 @@ msgstr "Индексирането още тече. Провери отново msgid "Still Neko" msgstr "Неподвижен Неко" +#. Small toast shown only when an automatic background check before sign-in, sign-up or a similar request takes more than a couple of seconds. No user action needed. Keep it short and calm. +#: src/features/auth/altcha/CaptchaInterceptor.ts:13 +msgid "Still working on it…" +msgstr "Все още работим по въпроса…" + #. Stop-recording button label in the desktop voice message composer. #: src/features/voice/components/VoiceMessageComposerModal.tsx:65 msgid "Stop" @@ -33013,7 +32961,7 @@ msgid "Terms of service" msgstr "Общи условия" #. Label for Bluesky OAuth terms URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1069 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1043 msgid "Terms URL" msgstr "URL на условията" @@ -33023,7 +32971,7 @@ msgid "Terrorism or violent extremism" msgstr "Тероризъм или насилствен екстремизъм" #. Button that validates SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1041 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1015 msgid "Test SMTP" msgstr "Тествай SMTP" @@ -33800,7 +33748,7 @@ msgid "This clears quick CSS, imported themes, uploaded assets, and local file r msgstr "Това изчиства бързия CSS, импортираните теми, качените ресурси и препратките към локални файлове на това устройство." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:83 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:82 msgid "This clears your backend premium state entirely, including premium type, billing metadata, and override flags." msgstr "Това изцяло изчиства състоянието ти на премиум абонамент в бекенда, включително типа на абонамента, метаданните за таксуване и флаговете за презаписване." @@ -34200,7 +34148,7 @@ msgid "This message no longer exists." msgstr "Това съобщение вече не съществува." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:130 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:129 msgid "This nickname will only be visible in this community" msgstr "Този прякор ще се вижда само в тази общност" @@ -34277,12 +34225,12 @@ msgid "This removes all custom CSS overrides. Theme files in your library are no msgstr "Това премахва всички персонализирани CSS промени. Файловете на темата в библиотеката ти не се засягат." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:50 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:49 msgid "This removes all previously authorized IP addresses on your account. The next login from any IP will require email verification." msgstr "Това премахва всички предварително оторизирани IP адреси от акаунта ти. Следващото влизане от който и да е IP адрес ще изисква потвърждение по имейл." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:67 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:66 msgid "This removes all trusted domains. You will see the external link warning for all domains again." msgstr "Това премахва всички доверени домейни. Отново ще виждаш предупреждението за външни линкове за всички домейни." @@ -34949,7 +34897,7 @@ msgstr "Промените по иконата в системния трей с msgid "Trending GIFs" msgstr "Популярни GIF файлове" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:383 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:359 msgid "Trigger React crash" msgstr "Предизвикване на срив в React" @@ -35008,7 +34956,7 @@ msgid "Trusted domains" msgstr "Доверени домейни" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:55 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:54 msgid "Trusted domains cleared." msgstr "Доверените домейни са изчистени." @@ -35054,7 +35002,6 @@ msgid "Try a different variable name or clear the search." msgstr "Опитай с друго име на променлива или изчисти търсенето." #. Generic action label for retrying a failed or interrupted operation. -#: src/features/auth/components/AltchaVerification.tsx:53 #: src/features/auth/flow/AuthRouteLoadError.tsx:22 #: src/features/i18n/utils/CommonMessageDescriptors.ts:75 msgid "Try again" @@ -35132,10 +35079,6 @@ msgstr "Опитай със защитен ключ / ключ за достъп msgid "Try sending your message again." msgstr "Опитай да изпратиш съобщението си отново." -#: src/features/auth/components/modals/CaptchaModal.tsx:177 -msgid "Try Turnstile instead" -msgstr "Опитай с Turnstile вместо това" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:135 msgid "TTS" @@ -36890,7 +36833,7 @@ msgid "Use this when troubleshooting the client or collecting logs. It may add v msgstr "Използвай това при отстраняване на неизправности на клиента или събиране на регистрационни файлове. Може да добави подробни съобщения в конзолата на браузъра за текущия клиент." #. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1037 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1011 msgid "Use TLS" msgstr "Използване на TLS" @@ -37056,7 +36999,7 @@ msgstr "Сила на звука на потребителя" #. Generic form-field label for a username. #. Label for SMTP username input. #. Settings search entry label. Also used as a search synonym in the settings search bar. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 #: src/features/i18n/utils/CommonMessageDescriptors.ts:572 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:218 #: src/features/user/components/modals/tabs/my_profile_tab/MyProfileTabUsernameSection.tsx:56 @@ -37337,11 +37280,6 @@ msgstr "Потвърди телефонния номер" msgid "Verify phone number form" msgstr "Формуляр за потвърждаване на телефонен номер" -#. Short label in the authentication captcha modal. Keep the tone plain and specific. -#: src/features/auth/components/modals/CaptchaModal.tsx:17 -msgid "Verify you're human" -msgstr "Потвърди, че си човек" - #. Title of the error modal shown when an unverified account tries to start a DM. #. Title shown when an unverified account cannot start a DM or group DM. #: src/features/app/components/alerts/DmActionErrorModal.tsx:40 @@ -37369,22 +37307,22 @@ msgid "Verify your email before adding an authenticator app." msgstr "Потвърди имейла си, преди да добавиш приложение за удостоверяване." #. Description text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:117 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:116 msgid "Verify your email before changing your community nickname, avatar, banner, bio, pronouns, or accent color." msgstr "Потвърди имейла си, преди да промениш прякора си в общността, аватара, банера, биографията, местоименията или цвета на акцента." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:121 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:120 msgid "Verify your email before changing your username, display name, avatar, banner, bio, pronouns, time zone, or {premiumProductName} badge privacy." msgstr "Потвърди имейла си, преди да промениш потребителското си име, показваното име, аватара, банера, биографията, местоименията, часовата зона или поверителността на значката {premiumProductName}." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:85 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:84 msgid "Verify your email before editing this community profile. You can still preview it here." msgstr "Потвърди имейла си, преди да редактираш този профил на общността. Все още можеш да го прегледаш тук." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:89 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:88 msgid "Verify your email before editing your profile. You can still preview it here." msgstr "Потвърди имейла си, преди да редактираш профила си. Все още можеш да го прегледаш тук." @@ -37416,12 +37354,12 @@ msgid "Verify your email to continue using {productName}." msgstr "Потвърди имейла си, за да продължиш да използваш {productName}." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:109 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:108 msgid "Verify your email to edit this community profile" msgstr "Потвърди имейла си, за да редактираш този профил на общността" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:113 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:112 msgid "Verify your email to edit your profile" msgstr "Потвърди имейла си, за да редактираш профила си" @@ -38398,10 +38336,6 @@ msgstr "Намалихме цената на {premiumProductName} в Брази msgid "We need one verification step before you continue. This helps protect accounts and keep spam off {productName}." msgstr "Необходима е една стъпка за потвърждение, преди да продължиш. Това помага за защитата на акаунтите и предпазва {productName} от спам." -#: src/features/auth/components/modals/CaptchaModal.tsx:128 -msgid "We need to make sure you're not a bot. Complete the verification below." -msgstr "Трябва да се уверим, че не си бот. Завърши проверката по-долу." - #. Required-action modal intro text when both email and phone verification are required. #: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:216 msgid "We need two verification steps before you continue. We will show one step at a time." @@ -39256,7 +39190,7 @@ msgid "You can't befriend yourself" msgstr "Не можеш да си приятел със себе си" #. Label in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:134 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:133 msgid "You can't change your nickname here" msgstr "Не можеш да промениш прякора си тук" @@ -39506,7 +39440,7 @@ msgid "You have unsaved changes." msgstr "Имаш незапазени промени." #. Warning text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:81 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:80 msgid "You have unsaved changes. Save or reset before leaving." msgstr "Имаш незапазени промени. Запази или нулирай, преди да излезеш." @@ -40031,10 +39965,6 @@ msgstr "Действието ти не можа да бъде извършено msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Заявлението ти е в процес на преглед. Все още можеш да актуализираш данните за обявата си или да оттеглиш заявлението." -#: src/features/auth/components/AltchaVerification.tsx:50 -msgid "Your browser couldn't finish the check." -msgstr "Браузърът ви не успя да завърши проверката." - #. Body of the browser-audio-required modal explaining why the user must click before audio can play. #: src/features/voice/components/modals/AudioPlaybackPermissionModal.tsx:12 msgid "Your browser requires user interaction before audio can be played. Click the button below to enable voice chat." @@ -40386,7 +40316,7 @@ msgid "YouTube enrichment" msgstr "Обогатяване за YouTube" #. Setup wizard title for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:977 +#: src/features/app/components/setup/SetupWizardSteps.tsx:970 msgid "YouTube previews" msgstr "Визуализации за YouTube" diff --git a/fluxer_app/src/features/i18n/locales/cs/messages.po b/fluxer_app/src/features/i18n/locales/cs/messages.po index 9829e2763..9a02e57b6 100644 --- a/fluxer_app/src/features/i18n/locales/cs/messages.po +++ b/fluxer_app/src/features/i18n/locales/cs/messages.po @@ -2395,11 +2395,6 @@ msgstr "60 sekund" msgid "7 days" msgstr "7 dní" -#. Required-action error when the API requires a captcha for phone verification. -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 -msgid "A browser check is required before phone verification. Try again from the sign-in page or contact support." -msgstr "Před ověřením telefonu je vyžadována kontrola prohlížeče. Zkuste to znovu z přihlašovací stránky nebo kontaktujte podporu." - #. Hint shown beside in:. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:77 msgid "a channel" @@ -2928,7 +2923,7 @@ msgid "Add a friend to get started." msgstr "Přidejte si přítele a začněte." #. Setup wizard body for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:973 +#: src/features/app/components/setup/SetupWizardSteps.tsx:966 msgid "Add a Klipy API key to enable GIF search at runtime." msgstr "Přidejte klíč API Klipy, aby bylo možné za běhu aplikace vyhledávat GIFy." @@ -2965,7 +2960,7 @@ msgid "Add a working email" msgstr "Přidat funkční e-mailovou adresu" #. Setup wizard body for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:981 +#: src/features/app/components/setup/SetupWizardSteps.tsx:974 msgid "Add a YouTube Data API key to enrich YouTube links." msgstr "Přidejte klíč YouTube Data API pro doplnění informací k odkazům na YouTube." @@ -3011,7 +3006,7 @@ msgid "Add another reaction" msgstr "Přidat další reakci" #. Setup wizard body for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1005 +#: src/features/app/components/setup/SetupWizardSteps.tsx:990 msgid "Add Bluesky OAuth client metadata and a signing key." msgstr "Přidejte metadata klienta OAuth pro Bluesky a podepisovací klíč." @@ -3161,7 +3156,7 @@ msgid "Add shortcut" msgstr "Přidat zkratku" #. Setup wizard body for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:997 +#: src/features/app/components/setup/SetupWizardSteps.tsx:982 msgid "Add SMTP credentials so the instance can send verification and notification email." msgstr "Přidejte přihlašovací údaje SMTP, aby instance mohla odesílat ověřovací e-maily a e-mailová oznámení." @@ -3188,7 +3183,7 @@ msgid "Add stream" msgstr "Přidat stream" #. Description for configuring an optional setup wizard integration now. -#: src/features/app/components/setup/SetupWizardSteps.tsx:965 +#: src/features/app/components/setup/SetupWizardSteps.tsx:958 msgid "Add the credentials during setup." msgstr "Při nastavení přidejte přihlašovací údaje." @@ -3954,7 +3949,7 @@ msgid "An invalid status was provided. You can now close this tab and return to msgstr "Byl poskytnut neplatný stav. Nyní můžete tuto kartu zavřít a vrátit se do aplikace." #. Short label in the authentication auth form. Keep the tone plain and specific. -#: src/features/auth/hooks/useAuthForm.ts:13 +#: src/features/auth/hooks/useAuthForm.ts:12 msgid "An unexpected error occurred" msgstr "Došlo k neočekávané chybě" @@ -4262,7 +4257,7 @@ msgid "Anyone can request an account, but an administrator must approve it." msgstr "O účet může požádat kdokoli, ale správce ho musí schválit." #. Label for an integration API key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1018 +#: src/features/app/components/setup/SetupWizardSteps.tsx:994 msgid "API key" msgstr "Klíč API" @@ -4958,7 +4953,7 @@ msgid "Authorized apps" msgstr "Autorizované aplikace" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:38 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:37 msgid "Authorized IPs cleared. New logins will require email verification." msgstr "Autorizované IP adresy vymazány. Nová přihlášení budou vyžadovat ověření e-mailem." @@ -5730,7 +5725,7 @@ msgid "Bluesky connections" msgstr "Propojení s Bluesky" #. Setup wizard title for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1001 +#: src/features/app/components/setup/SetupWizardSteps.tsx:986 msgid "Bluesky OAuth" msgstr "OAuth pro Bluesky" @@ -5897,11 +5892,6 @@ msgstr "Oprávnění bota nemohou být záporná." msgid "Bot profile" msgstr "Profil bota" -#. Setup wizard title for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:985 -msgid "Bot protection" -msgstr "Ochrana proti botům" - #. Short label in the authentication OAUTH scopes step. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/OAuthScopesStep.tsx:20 msgid "Bot scope requested" @@ -6554,11 +6544,6 @@ msgstr "Nelze upravit" msgid "Cannot delete account" msgstr "Účet nelze smazat" -#. Toast error shown when captcha verification fails inside the auth captcha interceptor. -#: src/features/auth/components/CaptchaInterceptor.tsx:15 -msgid "Captcha verification failed. Try again." -msgstr "Ověření CAPTCHA se nezdařilo. Zkuste to znovu." - #. Section header in the Linux audio source picker. Lists capture-target options (entire system / specific apps). #: src/features/voice/components/AudioSourcePickerLinux.tsx:50 msgid "Capture" @@ -7398,10 +7383,6 @@ msgstr "Kontrola přístupu..." msgid "Checking screen recording permission..." msgstr "Kontrola oprávnění k nahrávání obrazovky..." -#: src/features/auth/components/AltchaVerification.tsx:62 -msgid "Checking your browser. This takes a few seconds." -msgstr "Kontrolujeme váš prohlížeč. Zabere to pár sekund." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -7571,11 +7552,6 @@ msgstr "Vyberte Soubor a poté Přidat do Docku." msgid "Choose friends to message." msgstr "Vyberte přátele, kterým chcete poslat zprávu." -#. Setup wizard body for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:989 -msgid "Choose hCaptcha or Cloudflare Turnstile for signup challenges." -msgstr "Pro ověřování při registraci vyberte hCaptcha nebo Cloudflare Turnstile." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:455 msgid "Choose how chat moves after you send a message" @@ -7982,17 +7958,17 @@ msgid "Clear selection" msgstr "Zrušit výběr" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:88 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:87 msgid "Clear trust all setting" msgstr "Zrušit nastavení „Důvěřovat všem“" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:63 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:62 msgid "Clear trusted domains" msgstr "Vymazat důvěryhodné domény" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:96 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:95 msgid "Clear trusted domains ({trustedDomainsCount})" msgstr "Vymazat důvěryhodné domény ({trustedDomainsCount})" @@ -8002,7 +7978,7 @@ msgid "Clearer text" msgstr "Zřetelnější text" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:108 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:107 msgid "Clearing trusted domains..." msgstr "Mazání důvěryhodných domén..." @@ -8100,7 +8076,7 @@ msgid "Client" msgstr "Klient" #. Label for Bluesky OAuth client name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1057 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1031 msgid "Client name" msgstr "Název klienta" @@ -8117,7 +8093,7 @@ msgid "Client secret regenerated. Update any code that uses the old secret." msgstr "Klientský tajný klíč byl vygenerován znovu. Aktualizujte veškerý kód, který používá starý klíč." #. Label for Bluesky OAuth client URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1061 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 msgid "Client URL" msgstr "URL klienta" @@ -8269,11 +8245,6 @@ msgstr "Zavřené soukromé konverzace" msgid "Cloud upload" msgstr "Nahrát na cloud" -#. Cloudflare Turnstile provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1014 -msgid "Cloudflare Turnstile" -msgstr "Cloudflare Turnstile" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:58 msgid "Coal" @@ -8669,7 +8640,7 @@ msgstr "Název komunity" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:126 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:125 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:113 msgid "Community nickname" msgstr "Přezdívka v komunitě" @@ -8722,7 +8693,7 @@ msgid "Community profile" msgstr "Profil v komunitě" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:73 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:72 msgid "Community profile updated" msgstr "Profil v komunitě aktualizován" @@ -8880,7 +8851,7 @@ msgid "Configure keyboard shortcuts" msgstr "Nastavit klávesové zkratky" #. Option for configuring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:961 +#: src/features/app/components/setup/SetupWizardSteps.tsx:954 msgid "Configure now" msgstr "Nastavit nyní" @@ -12341,7 +12312,7 @@ msgstr "Odpojit od {channel}" msgid "Disconnect from voice" msgstr "Odpojit se od hlasového hovoru" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:261 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:243 msgid "Disconnect socket" msgstr "Odpojit socket" @@ -12479,7 +12450,7 @@ msgstr "Režim zobrazení" #. Short label in the inputs tab. Keep it concise. #. Short label in the my profile tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:22 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:138 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:137 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:61 msgid "Display name" msgstr "Zobrazované jméno" @@ -12625,7 +12596,7 @@ msgstr "Chceš se připojit do komunity {communityName}?" #. Label in the accessibility tab. #. Label in the my profile tab. #: src/features/user/components/modals/tabs/AccessibilityTab.tsx:54 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:146 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:145 msgid "Doc, I'm from the future. I came here in a time machine that you invented. Now, I need your help to get back to the year 1985." msgstr "Doktore, jsem z budoucnosti. Přicestoval jsem sem ve stroji času, který jste vynalezl. Teď potřebuji vaši pomoc, abych se dostal zpět do roku 1985." @@ -13262,7 +13233,7 @@ msgid "Edit your messages above or below" msgstr "Upravit své zprávy výše nebo níže" #. Button or menu action label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:93 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:92 msgid "Edit your profile appearance and see a live preview" msgstr "Upravte si vzhled profilu a podívejte se na živý náhled" @@ -13330,7 +13301,7 @@ msgid "Email changed" msgstr "E-mail změněn" #. Setup wizard title for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:993 +#: src/features/app/components/setup/SetupWizardSteps.tsx:978 msgid "Email delivery" msgstr "Doručování e-mailů" @@ -13635,7 +13606,7 @@ msgid "Enable beta feature" msgstr "Zapnout beta funkci" #. Label for enabling Bluesky OAuth in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1053 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1027 msgid "Enable Bluesky OAuth" msgstr "Povolit OAuth pro Bluesky" @@ -13668,7 +13639,7 @@ msgid "Enable developer mode" msgstr "Zapnout režim pro vývojáře" #. Label for enabling SMTP email delivery in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1021 +#: src/features/app/components/setup/SetupWizardSteps.tsx:995 msgid "Enable email delivery" msgstr "Povolit doručování e-mailů" @@ -14705,7 +14676,7 @@ msgid "Failed to ban member. Try again." msgstr "Člena se nepodařilo zabanovat. Zkuste to znovu." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:59 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:58 msgid "Failed to clear trusted domains." msgstr "Nepodařilo se vymazat důvěryhodné domény." @@ -14762,7 +14733,7 @@ msgid "Failed to enable camera." msgstr "Nepodařilo se zapnout kameru." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:42 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:41 msgid "Failed to forget authorized IPs. Try again." msgstr "Nepodařilo se vymazat autorizované IP adresy. Zkuste to znovu." @@ -14907,7 +14878,7 @@ msgid "Failed to resend verification code. Try again later." msgstr "Nepodařilo se znovu odeslat ověřovací kód. Zkuste to prosím později." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:75 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:74 msgid "Failed to reset premium state." msgstr "Nepodařilo se resetovat stav prémiového účtu." @@ -15581,7 +15552,7 @@ msgstr "Vynutit zástupný náhled načítání" msgid "Force mature media" msgstr "Vynutit označení médií jako určených pro dospělé" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:276 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:258 msgid "Force move to AFK channel" msgstr "Vynutit přesun do AFK kanálu" @@ -15640,7 +15611,7 @@ msgid "Forced off" msgstr "Vynuceně vypnuto" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:46 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:45 msgid "Forget authorized IPs" msgstr "Vymazat autorizované IP adresy" @@ -15650,7 +15621,7 @@ msgid "Forget subscriptions" msgstr "Zrušit odběry oznámení" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:104 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:103 msgid "Forgetting authorized IPs..." msgstr "Mazání autorizovaných IP adres..." @@ -15907,12 +15878,12 @@ msgid "from <0>{0}" msgstr "z <0>{0}" #. Label for SMTP from email input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1025 +#: src/features/app/components/setup/SetupWizardSteps.tsx:999 msgid "From email" msgstr "Odesílatel (e-mail)" #. Label for SMTP from name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1029 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1003 msgid "From name" msgstr "Odesílatel (jméno)" @@ -16204,7 +16175,7 @@ msgid "GIF preview" msgstr "Náhled GIFu" #. Setup wizard title for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:969 +#: src/features/app/components/setup/SetupWizardSteps.tsx:962 msgid "GIF search" msgstr "Vyhledávání GIFů" @@ -16853,21 +16824,12 @@ msgstr "Máte dárkový kód? Uplatněte ho a odemkněte {PREMIUM_PRODUCT_NAME}. msgid "Having fun?" msgstr "Bavíte se?" -#: src/features/auth/components/modals/CaptchaModal.tsx:175 -msgid "Having issues? Try hCaptcha instead" -msgstr "Máte potíže? Zkuste místo toho hCaptcha" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:63 msgctxt "us-state" msgid "Hawaii" msgstr "Havaj" -#. hCaptcha provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1013 -msgid "hCaptcha" -msgstr "hCaptcha" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:238 msgid "HD" @@ -19768,7 +19730,7 @@ msgid "Logo" msgstr "Logo" #. Label for Bluesky OAuth logo URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1065 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1039 msgid "Logo URL" msgstr "URL loga" @@ -22941,7 +22903,7 @@ msgid "No tokens match \"{searchQuery}\"." msgstr "Žádné tokeny neodpovídají hledání „{searchQuery}“." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:92 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:91 msgid "No trusted domains" msgstr "Žádné důvěryhodné domény" @@ -23696,10 +23658,6 @@ msgstr "Otevřít výběr prohlížeče" msgid "Open call view" msgstr "Otevřít zobrazení hovoru" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:288 -msgid "Open captcha modal" -msgstr "Otevřít dialog CAPTCHA" - #. Accessible label for the channel header title button in a community channel. #: src/features/channel/components/channel_header/shared.ts:14 msgid "Open channel details for {channelName}" @@ -23712,7 +23670,7 @@ msgstr "Otevřít podrobnosti kanálu {channelName}" msgid "Open chat" msgstr "Otevřít chat" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:314 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:290 msgid "Open claim account modal" msgstr "Otevřít dialog pro dokončení registrace účtu" @@ -23944,11 +23902,11 @@ msgstr "Otevřít samolepku v prohlížeči" msgid "Open streaming privacy settings" msgstr "Otevřít nastavení ochrany soukromí při streamování" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:327 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:303 msgid "Open sudo verification modal" msgstr "Otevřít modální okno pro ověření sudo" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:342 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:318 msgid "Open system DM" msgstr "Otevřít systémovou soukromou konverzaci" @@ -24430,7 +24388,7 @@ msgstr "Přístupové klíče vyžadují podepsaný balíček macOS s platným i #. Generic form-field label for a password. #. Label for SMTP password input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1036 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1010 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:146 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:183 @@ -25212,7 +25170,7 @@ msgid "Popup" msgstr "Vyskakovací okno" #. Label for SMTP port input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1034 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1008 msgid "Port" msgstr "Port" @@ -25338,7 +25296,7 @@ msgid "Premium since date" msgstr "Datum začátku předplatného" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:71 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:70 msgid "Premium state reset on the backend." msgstr "Stav Premium byl resetován na backendu." @@ -25608,7 +25566,7 @@ msgid "Privacy settings" msgstr "Nastavení soukromí" #. Label for Bluesky OAuth privacy URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1073 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1047 msgid "Privacy URL" msgstr "URL zásad ochrany osobních údajů" @@ -25633,7 +25591,7 @@ msgid "Private details" msgstr "Soukromé údaje" #. Label for Bluesky OAuth private key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1081 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1055 msgid "Private key" msgstr "Soukromý klíč" @@ -25699,18 +25657,18 @@ msgstr "Barva profilu" #. Settings section label for editing profile appearance and identity. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:105 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:104 #: src/features/user/components/settings_utils/section_registry/GeneralSettingsSections.ts:6 msgid "Profile customization" msgstr "Přizpůsobení profilu" #. Label in the my profile tab. Preserve {selectedGuildName}; it is inserted by code. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:101 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:100 msgid "Profile customization for {selectedGuildName}" msgstr "Přizpůsobení profilu pro {selectedGuildName}" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:97 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:96 msgid "Profile customization form" msgstr "Formulář pro úpravu profilu" @@ -25775,7 +25733,7 @@ msgid "Profile type" msgstr "Typ profilu" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:77 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:76 msgid "Profile updated" msgstr "Profil aktualizován" @@ -25812,7 +25770,7 @@ msgstr "Nabídnout přepnutí při připojení nového zvukového zařízení" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:142 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:141 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:177 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:160 msgid "Pronouns" @@ -25842,11 +25800,6 @@ msgstr "Zadejte ID uživatele nebo uživatelské jméno osoby, kterou nahlašuje msgid "Provide your full legal name for the declaration." msgstr "Uveďte své celé jméno, které je uvedeno v úředních dokumentech." -#. Label for an integration provider choice. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 -msgid "Provider" -msgstr "Poskytovatel" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27626,7 +27579,7 @@ msgid "Reset password" msgstr "Obnovit heslo" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:79 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:78 msgid "Reset premium state" msgstr "Resetovat stav prémiového účtu" @@ -27635,7 +27588,7 @@ msgstr "Resetovat stav prémiového účtu" msgid "Reset slider to default value" msgstr "Obnovit výchozí hodnotu posuvníku" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:247 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:229 msgid "Reset socket" msgstr "Resetovat socket" @@ -27684,7 +27637,7 @@ msgid "Reset zoom" msgstr "Obnovit přiblížení" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:112 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:111 msgid "Resetting premium state..." msgstr "Resetování prémiového stavu..." @@ -28315,7 +28268,7 @@ msgid "Run the instance as one community instead of many. This can only be enabl msgstr "Spusťte instanci jako jednu komunitu místo mnoha. Toto lze povolit pouze nyní, během nastavení." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:100 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:99 msgid "Runtime utilities" msgstr "Nástroje za běhu" @@ -29103,11 +29056,6 @@ msgstr "Bylo kliknuto na sekundární tlačítko." msgid "Secret" msgstr "Tajné" -#. Label for a CAPTCHA secret key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1020 -msgid "Secret key" -msgstr "Tajný klíč" - #. Settings search entry label. Names the settings search entry in the settings UI. #. Short label in the secrets section. Keep it concise. Keep the tone plain and specific. #: src/features/user/components/modals/tabs/applications_tab/application_detail/SecretsSection.tsx:11 @@ -29925,7 +29873,7 @@ msgid "Set up authenticator app" msgstr "Nastavit ověřovací aplikaci" #. Option for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:953 +#: src/features/app/components/setup/SetupWizardSteps.tsx:946 msgid "Set up later" msgstr "Nastavit později" @@ -30427,7 +30375,7 @@ msgstr "Zobrazit seznam soukromých konverzací v postranním panelu" msgid "Show just the typing indicator without avatars" msgstr "Zobrazit jen indikátor psaní bez avatarů" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:308 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:284 msgid "Show keyboard mode intro" msgstr "Zobrazit úvod do režimu klávesnice" @@ -30538,7 +30486,7 @@ msgstr "Zobrazit Neko" msgid "Show new device alerts" msgstr "Zobrazovat upozornění na nová zařízení" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:282 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:264 msgid "Show new device modal" msgstr "Zobrazit modální okno nového zařízení" @@ -30820,7 +30768,7 @@ msgid "Signed-in devices" msgstr "Přihlášená zařízení" #. Label for Bluesky OAuth signing key ID input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1077 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1051 msgid "Signing key ID" msgstr "ID podepisovacího klíče" @@ -30910,11 +30858,6 @@ msgstr "Jeden řádek" msgid "Single user (all statuses)" msgstr "Jeden uživatel (všechny stavy)" -#. Label for a CAPTCHA site key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 -msgid "Site key" -msgstr "Klíč webu" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:98 @@ -30964,7 +30907,7 @@ msgid "Skip the system leave notice — nobody gets pinged." msgstr "Přeskočit systémové oznámení o odchodu – nikdo nedostane upozornění." #. Description for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:957 +#: src/features/app/components/setup/SetupWizardSteps.tsx:950 msgid "Skip this now and configure it from the admin panel." msgstr "Přeskočit teď a nakonfigurovat z administračního panelu." @@ -31212,17 +31155,17 @@ msgid "SMS verification is unavailable right now. Try again later or contact sup msgstr "Ověření SMS zprávou momentálně není k dispozici. Zkuste to prosím později, nebo kontaktujte podporu." #. Success message after validating SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1045 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 msgid "SMTP connection verified." msgstr "Spojení SMTP ověřeno." #. Label for SMTP host input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1033 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1007 msgid "SMTP host" msgstr "Hostitel SMTP" #. Failure message after validating SMTP credentials when the server returns no error detail. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1049 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1023 msgid "SMTP validation failed." msgstr "Ověření SMTP se nezdařilo." @@ -31402,7 +31345,7 @@ msgstr "Něco se pokazilo. Zkuste to prosím později." #. Inline error in the web deep-link prompt when opening the desktop app fails. #. Toast error shown when the mature content check request fails unexpectedly. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:18 -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:580 +#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 #: src/features/auth/flow/DesktopDeepLinkPrompt.tsx:31 msgid "Something went wrong. Try again." msgstr "Něco se pokazilo. Zkuste to znovu." @@ -32099,6 +32042,11 @@ msgstr "Indexování stále probíhá – zkuste to za chvíli znovu" msgid "Still Neko" msgstr "Nehybná Neko" +#. Small toast shown only when an automatic background check before sign-in, sign-up or a similar request takes more than a couple of seconds. No user action needed. Keep it short and calm. +#: src/features/auth/altcha/CaptchaInterceptor.ts:13 +msgid "Still working on it…" +msgstr "Ještě pracujeme…" + #. Stop-recording button label in the desktop voice message composer. #: src/features/voice/components/VoiceMessageComposerModal.tsx:65 msgid "Stop" @@ -33013,7 +32961,7 @@ msgid "Terms of service" msgstr "Podmínky služby" #. Label for Bluesky OAuth terms URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1069 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1043 msgid "Terms URL" msgstr "URL podmínek" @@ -33023,7 +32971,7 @@ msgid "Terrorism or violent extremism" msgstr "Terorismus nebo násilný extremismus" #. Button that validates SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1041 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1015 msgid "Test SMTP" msgstr "Otestovat SMTP" @@ -33800,7 +33748,7 @@ msgid "This clears quick CSS, imported themes, uploaded assets, and local file r msgstr "Tím se z tohoto zařízení vymaže rychlé CSS, importované motivy, nahrané podklady a odkazy na místní soubory." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:83 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:82 msgid "This clears your backend premium state entirely, including premium type, billing metadata, and override flags." msgstr "Tím se zcela vymaže váš prémiový stav na backendu, včetně typu prémia, fakturačních metadat a příznaků přepsání." @@ -34200,7 +34148,7 @@ msgid "This message no longer exists." msgstr "Tato zpráva již neexistuje." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:130 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:129 msgid "This nickname will only be visible in this community" msgstr "Tato přezdívka bude viditelná pouze v této komunitě" @@ -34277,12 +34225,12 @@ msgid "This removes all custom CSS overrides. Theme files in your library are no msgstr "Tím se odstraní všechna vlastní přepsání CSS. Soubory motivů ve vaší knihovně to neovlivní." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:50 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:49 msgid "This removes all previously authorized IP addresses on your account. The next login from any IP will require email verification." msgstr "Tímto odeberete všechny dříve autorizované IP adresy z vašeho účtu. Příští přihlášení z jakékoli IP adresy bude vyžadovat ověření e-mailem." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:67 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:66 msgid "This removes all trusted domains. You will see the external link warning for all domains again." msgstr "Tím se odstraní všechny důvěryhodné domény. Znovu se vám bude zobrazovat upozornění na externí odkazy pro všechny domény." @@ -34949,7 +34897,7 @@ msgstr "V Linuxu se změny ikony v oznamovací oblasti projeví až po restartu, msgid "Trending GIFs" msgstr "Populární GIFy" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:383 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:359 msgid "Trigger React crash" msgstr "Spustit pád Reactu" @@ -35008,7 +34956,7 @@ msgid "Trusted domains" msgstr "Důvěryhodné domény" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:55 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:54 msgid "Trusted domains cleared." msgstr "Důvěryhodné domény vymazány." @@ -35054,7 +35002,6 @@ msgid "Try a different variable name or clear the search." msgstr "Zkuste jiný název proměnné nebo vymažte hledání." #. Generic action label for retrying a failed or interrupted operation. -#: src/features/auth/components/AltchaVerification.tsx:53 #: src/features/auth/flow/AuthRouteLoadError.tsx:22 #: src/features/i18n/utils/CommonMessageDescriptors.ts:75 msgid "Try again" @@ -35132,10 +35079,6 @@ msgstr "Zkusit místo toho bezpečnostní klíč / přístupový klíč" msgid "Try sending your message again." msgstr "Zkuste zprávu odeslat znovu." -#: src/features/auth/components/modals/CaptchaModal.tsx:177 -msgid "Try Turnstile instead" -msgstr "Zkusit místo toho Turnstile" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:135 msgid "TTS" @@ -36890,7 +36833,7 @@ msgid "Use this when troubleshooting the client or collecting logs. It may add v msgstr "Použijte to při řešení problémů s klientem nebo sběru protokolů. Může to přidat podrobné zprávy do konzole prohlížeče pro aktuálního klienta." #. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1037 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1011 msgid "Use TLS" msgstr "Použít TLS" @@ -37056,7 +36999,7 @@ msgstr "Hlasitost uživatele" #. Generic form-field label for a username. #. Label for SMTP username input. #. Settings search entry label. Also used as a search synonym in the settings search bar. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 #: src/features/i18n/utils/CommonMessageDescriptors.ts:572 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:218 #: src/features/user/components/modals/tabs/my_profile_tab/MyProfileTabUsernameSection.tsx:56 @@ -37337,11 +37280,6 @@ msgstr "Ověřit telefonní číslo" msgid "Verify phone number form" msgstr "Formulář pro ověření telefonního čísla" -#. Short label in the authentication captcha modal. Keep the tone plain and specific. -#: src/features/auth/components/modals/CaptchaModal.tsx:17 -msgid "Verify you're human" -msgstr "Ověřte, že jste člověk" - #. Title of the error modal shown when an unverified account tries to start a DM. #. Title shown when an unverified account cannot start a DM or group DM. #: src/features/app/components/alerts/DmActionErrorModal.tsx:40 @@ -37369,22 +37307,22 @@ msgid "Verify your email before adding an authenticator app." msgstr "Před přidáním ověřovací aplikace si ověřte svůj e-mail." #. Description text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:117 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:116 msgid "Verify your email before changing your community nickname, avatar, banner, bio, pronouns, or accent color." msgstr "Před změnou přezdívky, avataru, banneru, popisu profilu, zájmen nebo barvy zvýraznění pro tuto komunitu ověřte svůj e-mail." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:121 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:120 msgid "Verify your email before changing your username, display name, avatar, banner, bio, pronouns, time zone, or {premiumProductName} badge privacy." msgstr "Před změnou uživatelského jména, zobrazovaného jména, avataru, banneru, popisu profilu, zájmen, časového pásma nebo soukromí odznaku {premiumProductName} ověřte svůj e-mail." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:85 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:84 msgid "Verify your email before editing this community profile. You can still preview it here." msgstr "Před úpravou tohoto komunitního profilu si ověřte svůj e-mail. Stále si ho můžete prohlédnout zde." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:89 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:88 msgid "Verify your email before editing your profile. You can still preview it here." msgstr "Před úpravou profilu si ověřte svůj e-mail. Stále si ho zde můžete prohlédnout." @@ -37416,12 +37354,12 @@ msgid "Verify your email to continue using {productName}." msgstr "Ověřte svůj e-mail, abyste mohli nadále používat {productName}." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:109 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:108 msgid "Verify your email to edit this community profile" msgstr "Ověřte svůj e-mail, abyste mohli upravit tento komunitní profil" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:113 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:112 msgid "Verify your email to edit your profile" msgstr "Ověřte svůj e-mail pro úpravu profilu" @@ -38398,10 +38336,6 @@ msgstr "V Brazílii jsme snížili cenu {premiumProductName}. Nyní je to {month msgid "We need one verification step before you continue. This helps protect accounts and keep spam off {productName}." msgstr "Než budete pokračovat, potřebujeme jeden ověřovací krok. Pomáhá to chránit účty a udržet spam mimo {productName}." -#: src/features/auth/components/modals/CaptchaModal.tsx:128 -msgid "We need to make sure you're not a bot. Complete the verification below." -msgstr "Musíme se ujistit, že nejste robot. Dokončete ověření níže." - #. Required-action modal intro text when both email and phone verification are required. #: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:216 msgid "We need two verification steps before you continue. We will show one step at a time." @@ -39256,7 +39190,7 @@ msgid "You can't befriend yourself" msgstr "Nemůžete si přidat sami sebe do přátel" #. Label in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:134 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:133 msgid "You can't change your nickname here" msgstr "Zde si nemůžete změnit přezdívku" @@ -39506,7 +39440,7 @@ msgid "You have unsaved changes." msgstr "Máte neuložené změny." #. Warning text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:81 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:80 msgid "You have unsaved changes. Save or reset before leaving." msgstr "Máte neuložené změny. Před odchodem je uložte nebo resetujte." @@ -40031,10 +39965,6 @@ msgstr "Vaši akci se nepodařilo dokončit, protože byla označena našimi bez msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Vaše žádost čeká na posouzení. Stále můžete upravovat údaje v záznamu nebo žádost stáhnout." -#: src/features/auth/components/AltchaVerification.tsx:50 -msgid "Your browser couldn't finish the check." -msgstr "Prohlížeč nemohl dokončit kontrolu." - #. Body of the browser-audio-required modal explaining why the user must click before audio can play. #: src/features/voice/components/modals/AudioPlaybackPermissionModal.tsx:12 msgid "Your browser requires user interaction before audio can be played. Click the button below to enable voice chat." @@ -40386,7 +40316,7 @@ msgid "YouTube enrichment" msgstr "Rozšířené náhledy YouTube" #. Setup wizard title for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:977 +#: src/features/app/components/setup/SetupWizardSteps.tsx:970 msgid "YouTube previews" msgstr "Náhledy YouTube" diff --git a/fluxer_app/src/features/i18n/locales/da/messages.po b/fluxer_app/src/features/i18n/locales/da/messages.po index 4ae0f5db4..5c92b852c 100644 --- a/fluxer_app/src/features/i18n/locales/da/messages.po +++ b/fluxer_app/src/features/i18n/locales/da/messages.po @@ -2395,11 +2395,6 @@ msgstr "60 sekunder" msgid "7 days" msgstr "7 dage" -#. Required-action error when the API requires a captcha for phone verification. -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 -msgid "A browser check is required before phone verification. Try again from the sign-in page or contact support." -msgstr "Der kræves et browsertjek, før telefonbekræftelse kan udføres. Prøv igen fra loginskærmen, eller kontakt support." - #. Hint shown beside in:. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:77 msgid "a channel" @@ -2928,7 +2923,7 @@ msgid "Add a friend to get started." msgstr "Tilføj en ven for at komme i gang." #. Setup wizard body for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:973 +#: src/features/app/components/setup/SetupWizardSteps.tsx:966 msgid "Add a Klipy API key to enable GIF search at runtime." msgstr "Tilføj en Klipy API-nøgle for at aktivere GIF-søgning under kørsel." @@ -2965,7 +2960,7 @@ msgid "Add a working email" msgstr "Tilføj en fungerende e-mailadresse" #. Setup wizard body for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:981 +#: src/features/app/components/setup/SetupWizardSteps.tsx:974 msgid "Add a YouTube Data API key to enrich YouTube links." msgstr "Tilføj en YouTube Data API-nøgle for at berige YouTube-links." @@ -3011,7 +3006,7 @@ msgid "Add another reaction" msgstr "Tilføj endnu en reaktion" #. Setup wizard body for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1005 +#: src/features/app/components/setup/SetupWizardSteps.tsx:990 msgid "Add Bluesky OAuth client metadata and a signing key." msgstr "Tilføj Bluesky OAuth-klientmetadata og en signeringsnøgle." @@ -3161,7 +3156,7 @@ msgid "Add shortcut" msgstr "Tilføj genvej" #. Setup wizard body for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:997 +#: src/features/app/components/setup/SetupWizardSteps.tsx:982 msgid "Add SMTP credentials so the instance can send verification and notification email." msgstr "Tilføj SMTP-legitimationsoplysninger, så instansen kan sende bekræftelses- og notifikations-e-mails." @@ -3188,7 +3183,7 @@ msgid "Add stream" msgstr "Føj stream til" #. Description for configuring an optional setup wizard integration now. -#: src/features/app/components/setup/SetupWizardSteps.tsx:965 +#: src/features/app/components/setup/SetupWizardSteps.tsx:958 msgid "Add the credentials during setup." msgstr "Tilføj legitimationsoplysningerne under opsætningen." @@ -3954,7 +3949,7 @@ msgid "An invalid status was provided. You can now close this tab and return to msgstr "Der blev angivet en ugyldig status. Du kan nu lukke denne fane og vende tilbage til appen." #. Short label in the authentication auth form. Keep the tone plain and specific. -#: src/features/auth/hooks/useAuthForm.ts:13 +#: src/features/auth/hooks/useAuthForm.ts:12 msgid "An unexpected error occurred" msgstr "Der opstod en uventet fejl" @@ -4262,7 +4257,7 @@ msgid "Anyone can request an account, but an administrator must approve it." msgstr "Alle kan anmode om en konto, men en administrator skal godkende den." #. Label for an integration API key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1018 +#: src/features/app/components/setup/SetupWizardSteps.tsx:994 msgid "API key" msgstr "API-nøgle" @@ -4958,7 +4953,7 @@ msgid "Authorized apps" msgstr "Autoriserede apps" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:38 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:37 msgid "Authorized IPs cleared. New logins will require email verification." msgstr "Godkendte IP-adresser er ryddet. Nye logins kræver e-mailbekræftelse." @@ -5730,7 +5725,7 @@ msgid "Bluesky connections" msgstr "Bluesky-forbindelser" #. Setup wizard title for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1001 +#: src/features/app/components/setup/SetupWizardSteps.tsx:986 msgid "Bluesky OAuth" msgstr "Bluesky OAuth" @@ -5897,11 +5892,6 @@ msgstr "Bot-tilladelser kan ikke være negative." msgid "Bot profile" msgstr "Botprofil" -#. Setup wizard title for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:985 -msgid "Bot protection" -msgstr "Botbeskyttelse" - #. Short label in the authentication OAUTH scopes step. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/OAuthScopesStep.tsx:20 msgid "Bot scope requested" @@ -6554,11 +6544,6 @@ msgstr "Kan ikke redigeres" msgid "Cannot delete account" msgstr "Kan ikke slette konto" -#. Toast error shown when captcha verification fails inside the auth captcha interceptor. -#: src/features/auth/components/CaptchaInterceptor.tsx:15 -msgid "Captcha verification failed. Try again." -msgstr "Captcha-verificering mislykkedes. Prøv igen." - #. Section header in the Linux audio source picker. Lists capture-target options (entire system / specific apps). #: src/features/voice/components/AudioSourcePickerLinux.tsx:50 msgid "Capture" @@ -7398,10 +7383,6 @@ msgstr "Tjekker adgang ..." msgid "Checking screen recording permission..." msgstr "Kontrollerer tilladelsen til skærmoptagelse…" -#: src/features/auth/components/AltchaVerification.tsx:62 -msgid "Checking your browser. This takes a few seconds." -msgstr "Tjekker din browser. Det tager et par sekunder." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -7571,11 +7552,6 @@ msgstr "Vælg Arkiv, og vælg derefter Føj til Dock." msgid "Choose friends to message." msgstr "Vælg venner at sende besked til." -#. Setup wizard body for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:989 -msgid "Choose hCaptcha or Cloudflare Turnstile for signup challenges." -msgstr "Vælg hCaptcha eller Cloudflare Turnstile til tilmeldingsudfordringer." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:455 msgid "Choose how chat moves after you send a message" @@ -7982,17 +7958,17 @@ msgid "Clear selection" msgstr "Ryd markering" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:88 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:87 msgid "Clear trust all setting" msgstr "Nulstil indstillingen \"Stol på alle links\"" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:63 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:62 msgid "Clear trusted domains" msgstr "Ryd godkendte domæner" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:96 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:95 msgid "Clear trusted domains ({trustedDomainsCount})" msgstr "Ryd godkendte domæner ({trustedDomainsCount})" @@ -8002,7 +7978,7 @@ msgid "Clearer text" msgstr "Klarere tekst" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:108 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:107 msgid "Clearing trusted domains..." msgstr "Rydder godkendte domæner..." @@ -8100,7 +8076,7 @@ msgid "Client" msgstr "Klient" #. Label for Bluesky OAuth client name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1057 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1031 msgid "Client name" msgstr "Klientnavn" @@ -8117,7 +8093,7 @@ msgid "Client secret regenerated. Update any code that uses the old secret." msgstr "Klienthemmeligheden er fornyet. Opdater al kode, der bruger den gamle hemmelighed." #. Label for Bluesky OAuth client URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1061 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 msgid "Client URL" msgstr "Klient-URL" @@ -8269,11 +8245,6 @@ msgstr "Lukkede direkte beskeder" msgid "Cloud upload" msgstr "Cloud-upload" -#. Cloudflare Turnstile provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1014 -msgid "Cloudflare Turnstile" -msgstr "Cloudflare Turnstile" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:58 msgid "Coal" @@ -8669,7 +8640,7 @@ msgstr "Navn på fællesskab" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:126 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:125 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:113 msgid "Community nickname" msgstr "Kaldenavn i fællesskabet" @@ -8722,7 +8693,7 @@ msgid "Community profile" msgstr "Fællesskabsprofil" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:73 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:72 msgid "Community profile updated" msgstr "Fællesskabsprofil opdateret" @@ -8880,7 +8851,7 @@ msgid "Configure keyboard shortcuts" msgstr "Konfigurer tastaturgenveje" #. Option for configuring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:961 +#: src/features/app/components/setup/SetupWizardSteps.tsx:954 msgid "Configure now" msgstr "Konfigurer nu" @@ -12341,7 +12312,7 @@ msgstr "Afbryd forbindelse til {channel}" msgid "Disconnect from voice" msgstr "Afbryd forbindelsen til taleopkald" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:261 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:243 msgid "Disconnect socket" msgstr "Afbryd forbindelse til socket" @@ -12479,7 +12450,7 @@ msgstr "Visningstilstand" #. Short label in the inputs tab. Keep it concise. #. Short label in the my profile tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:22 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:138 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:137 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:61 msgid "Display name" msgstr "Visningsnavn" @@ -12625,7 +12596,7 @@ msgstr "Vil du deltage i {communityName}?" #. Label in the accessibility tab. #. Label in the my profile tab. #: src/features/user/components/modals/tabs/AccessibilityTab.tsx:54 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:146 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:145 msgid "Doc, I'm from the future. I came here in a time machine that you invented. Now, I need your help to get back to the year 1985." msgstr "Doc, jeg er fra fremtiden. Jeg kom hertil i en tidsmaskine, som du opfandt. Nu har jeg brug for din hjælp til at komme tilbage til år 1985." @@ -13262,7 +13233,7 @@ msgid "Edit your messages above or below" msgstr "Rediger dine beskeder ovenfor eller nedenfor" #. Button or menu action label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:93 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:92 msgid "Edit your profile appearance and see a live preview" msgstr "Rediger din profils udseende, og se ændringerne i forhåndsvisningen med det samme" @@ -13330,7 +13301,7 @@ msgid "Email changed" msgstr "E-mailadresse ændret" #. Setup wizard title for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:993 +#: src/features/app/components/setup/SetupWizardSteps.tsx:978 msgid "Email delivery" msgstr "E-mail-levering" @@ -13635,7 +13606,7 @@ msgid "Enable beta feature" msgstr "Slå betafunktion til" #. Label for enabling Bluesky OAuth in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1053 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1027 msgid "Enable Bluesky OAuth" msgstr "Aktivér Bluesky OAuth" @@ -13668,7 +13639,7 @@ msgid "Enable developer mode" msgstr "Slå udviklertilstand til" #. Label for enabling SMTP email delivery in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1021 +#: src/features/app/components/setup/SetupWizardSteps.tsx:995 msgid "Enable email delivery" msgstr "Aktivér e-mail-levering" @@ -14705,7 +14676,7 @@ msgid "Failed to ban member. Try again." msgstr "Kunne ikke udelukke medlem. Prøv igen." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:59 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:58 msgid "Failed to clear trusted domains." msgstr "Kunne ikke rydde godkendte domæner." @@ -14762,7 +14733,7 @@ msgid "Failed to enable camera." msgstr "Kunne ikke aktivere kameraet." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:42 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:41 msgid "Failed to forget authorized IPs. Try again." msgstr "Kunne ikke rydde godkendte IP-adresser. Prøv igen." @@ -14907,7 +14878,7 @@ msgid "Failed to resend verification code. Try again later." msgstr "Kunne ikke sende bekræftelseskoden igen. Prøv igen senere." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:75 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:74 msgid "Failed to reset premium state." msgstr "Kunne ikke nulstille premium-status." @@ -15581,7 +15552,7 @@ msgstr "Fremtving indlæsningsskelet" msgid "Force mature media" msgstr "Gennemtving mærkning som indhold for voksne" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:276 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:258 msgid "Force move to AFK channel" msgstr "Fremtving flytning til AFK-kanal" @@ -15640,7 +15611,7 @@ msgid "Forced off" msgstr "Tvunget fra" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:46 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:45 msgid "Forget authorized IPs" msgstr "Ryd godkendte IP-adresser" @@ -15650,7 +15621,7 @@ msgid "Forget subscriptions" msgstr "Glem abonnementer" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:104 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:103 msgid "Forgetting authorized IPs..." msgstr "Rydder godkendte IP-adresser…" @@ -15907,12 +15878,12 @@ msgid "from <0>{0}" msgstr "fra <0>{0}" #. Label for SMTP from email input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1025 +#: src/features/app/components/setup/SetupWizardSteps.tsx:999 msgid "From email" msgstr "Afsenderens e-mailadresse" #. Label for SMTP from name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1029 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1003 msgid "From name" msgstr "Afsendernavn" @@ -16204,7 +16175,7 @@ msgid "GIF preview" msgstr "GIF-forhåndsvisning" #. Setup wizard title for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:969 +#: src/features/app/components/setup/SetupWizardSteps.tsx:962 msgid "GIF search" msgstr "GIF-søgning" @@ -16853,21 +16824,12 @@ msgstr "Har du en gavekode? Indløs den for at låse op for {PREMIUM_PRODUCT_NAM msgid "Having fun?" msgstr "Har du det sjovt?" -#: src/features/auth/components/modals/CaptchaModal.tsx:175 -msgid "Having issues? Try hCaptcha instead" -msgstr "Oplever du problemer? Prøv hCaptcha i stedet" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:63 msgctxt "us-state" msgid "Hawaii" msgstr "Hawaii" -#. hCaptcha provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1013 -msgid "hCaptcha" -msgstr "hCaptcha" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:238 msgid "HD" @@ -19768,7 +19730,7 @@ msgid "Logo" msgstr "Logo" #. Label for Bluesky OAuth logo URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1065 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1039 msgid "Logo URL" msgstr "Logo-URL" @@ -22941,7 +22903,7 @@ msgid "No tokens match \"{searchQuery}\"." msgstr "Ingen variabler matcher \"{searchQuery}\"." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:92 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:91 msgid "No trusted domains" msgstr "Ingen betroede domæner" @@ -23696,10 +23658,6 @@ msgstr "Åbn browservælger" msgid "Open call view" msgstr "Åbn opkaldsvisning" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:288 -msgid "Open captcha modal" -msgstr "Åbn captcha-dialog" - #. Accessible label for the channel header title button in a community channel. #: src/features/channel/components/channel_header/shared.ts:14 msgid "Open channel details for {channelName}" @@ -23712,7 +23670,7 @@ msgstr "Åbn kanaloplysninger for {channelName}" msgid "Open chat" msgstr "Åbn chat" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:314 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:290 msgid "Open claim account modal" msgstr "Åbn dialog til at fuldføre kontooprettelsen" @@ -23944,11 +23902,11 @@ msgstr "Åbn klistermærke i browser" msgid "Open streaming privacy settings" msgstr "Åbn privatlivsindstillinger for streaming" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:327 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:303 msgid "Open sudo verification modal" msgstr "Åbn dialog til sudo-bekræftelse" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:342 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:318 msgid "Open system DM" msgstr "Åbn system-DM" @@ -24430,7 +24388,7 @@ msgstr "Adgangsnøgler kræver en signeret macOS-apppakke med et gyldigt app-id. #. Generic form-field label for a password. #. Label for SMTP password input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1036 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1010 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:146 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:183 @@ -25212,7 +25170,7 @@ msgid "Popup" msgstr "Pop op-vindue" #. Label for SMTP port input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1034 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1008 msgid "Port" msgstr "Port" @@ -25338,7 +25296,7 @@ msgid "Premium since date" msgstr "Premium siden" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:71 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:70 msgid "Premium state reset on the backend." msgstr "Premium-status nulstillet på backend." @@ -25608,7 +25566,7 @@ msgid "Privacy settings" msgstr "Privatlivsindstillinger" #. Label for Bluesky OAuth privacy URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1073 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1047 msgid "Privacy URL" msgstr "URL til fortrolighedspolitik" @@ -25633,7 +25591,7 @@ msgid "Private details" msgstr "Private oplysninger" #. Label for Bluesky OAuth private key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1081 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1055 msgid "Private key" msgstr "Privat nøgle" @@ -25699,18 +25657,18 @@ msgstr "Profilfarve" #. Settings section label for editing profile appearance and identity. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:105 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:104 #: src/features/user/components/settings_utils/section_registry/GeneralSettingsSections.ts:6 msgid "Profile customization" msgstr "Profiltilpasning" #. Label in the my profile tab. Preserve {selectedGuildName}; it is inserted by code. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:101 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:100 msgid "Profile customization for {selectedGuildName}" msgstr "Profiltilpasning for {selectedGuildName}" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:97 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:96 msgid "Profile customization form" msgstr "Formular til profiltilpasning" @@ -25775,7 +25733,7 @@ msgid "Profile type" msgstr "Profiltype" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:77 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:76 msgid "Profile updated" msgstr "Profil opdateret" @@ -25812,7 +25770,7 @@ msgstr "Vis prompt for nye lydenheder" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:142 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:141 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:177 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:160 msgid "Pronouns" @@ -25842,11 +25800,6 @@ msgstr "Angiv enten et bruger-id eller et brugernavn for den person, du anmelder msgid "Provide your full legal name for the declaration." msgstr "Angiv dit fulde officielle navn til erklæringen." -#. Label for an integration provider choice. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 -msgid "Provider" -msgstr "Udbyder" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27626,7 +27579,7 @@ msgid "Reset password" msgstr "Nulstil adgangskode" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:79 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:78 msgid "Reset premium state" msgstr "Nulstil premium-status" @@ -27635,7 +27588,7 @@ msgstr "Nulstil premium-status" msgid "Reset slider to default value" msgstr "Nulstil skyder til standardværdi" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:247 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:229 msgid "Reset socket" msgstr "Nulstil socket" @@ -27684,7 +27637,7 @@ msgid "Reset zoom" msgstr "Nulstil zoom" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:112 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:111 msgid "Resetting premium state..." msgstr "Nulstiller premium-status ..." @@ -28315,7 +28268,7 @@ msgid "Run the instance as one community instead of many. This can only be enabl msgstr "Kør instansen som ét fællesskab i stedet for mange. Dette kan kun aktiveres nu, under opsætningen." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:100 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:99 msgid "Runtime utilities" msgstr "Kørselsværktøjer" @@ -29103,11 +29056,6 @@ msgstr "Der blev klikket på den sekundære knap." msgid "Secret" msgstr "Hemmelighed" -#. Label for a CAPTCHA secret key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1020 -msgid "Secret key" -msgstr "Hemmelig nøgle" - #. Settings search entry label. Names the settings search entry in the settings UI. #. Short label in the secrets section. Keep it concise. Keep the tone plain and specific. #: src/features/user/components/modals/tabs/applications_tab/application_detail/SecretsSection.tsx:11 @@ -29925,7 +29873,7 @@ msgid "Set up authenticator app" msgstr "Konfigurer godkendelsesapp" #. Option for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:953 +#: src/features/app/components/setup/SetupWizardSteps.tsx:946 msgid "Set up later" msgstr "Opsæt senere" @@ -30427,7 +30375,7 @@ msgstr "Vis DM-listen i sidepanelet" msgid "Show just the typing indicator without avatars" msgstr "Vis kun skriveindikatoren uden avatarer" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:308 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:284 msgid "Show keyboard mode intro" msgstr "Vis introduktion til tastaturtilstand" @@ -30538,7 +30486,7 @@ msgstr "Vis Neko" msgid "Show new device alerts" msgstr "Vis notifikationer om nye enheder" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:282 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:264 msgid "Show new device modal" msgstr "Vis pop op-vindue for ny enhed" @@ -30820,7 +30768,7 @@ msgid "Signed-in devices" msgstr "Enheder, du er logget ind på" #. Label for Bluesky OAuth signing key ID input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1077 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1051 msgid "Signing key ID" msgstr "Signeringsnøglens id" @@ -30910,11 +30858,6 @@ msgstr "Én linje" msgid "Single user (all statuses)" msgstr "Enkeltbruger (alle statusser)" -#. Label for a CAPTCHA site key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 -msgid "Site key" -msgstr "Webstedsnøgle" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:98 @@ -30964,7 +30907,7 @@ msgid "Skip the system leave notice — nobody gets pinged." msgstr "Spring systemmeddelelsen om at forlade gruppen over – ingen får en notifikation." #. Description for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:957 +#: src/features/app/components/setup/SetupWizardSteps.tsx:950 msgid "Skip this now and configure it from the admin panel." msgstr "Spring dette over nu, og konfigurer det fra administratorpanelet." @@ -31212,17 +31155,17 @@ msgid "SMS verification is unavailable right now. Try again later or contact sup msgstr "SMS-bekræftelse er ikke tilgængelig lige nu. Prøv igen senere, eller kontakt support." #. Success message after validating SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1045 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 msgid "SMTP connection verified." msgstr "SMTP-forbindelse bekræftet." #. Label for SMTP host input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1033 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1007 msgid "SMTP host" msgstr "SMTP-vært" #. Failure message after validating SMTP credentials when the server returns no error detail. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1049 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1023 msgid "SMTP validation failed." msgstr "SMTP-valideringen mislykkedes." @@ -31402,7 +31345,7 @@ msgstr "Der opstod en fejl. Prøv igen senere." #. Inline error in the web deep-link prompt when opening the desktop app fails. #. Toast error shown when the mature content check request fails unexpectedly. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:18 -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:580 +#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 #: src/features/auth/flow/DesktopDeepLinkPrompt.tsx:31 msgid "Something went wrong. Try again." msgstr "Der opstod en fejl. Prøv igen." @@ -32099,6 +32042,11 @@ msgstr "Indekserer stadig – prøv igen om et øjeblik" msgid "Still Neko" msgstr "Stillestående Neko" +#. Small toast shown only when an automatic background check before sign-in, sign-up or a similar request takes more than a couple of seconds. No user action needed. Keep it short and calm. +#: src/features/auth/altcha/CaptchaInterceptor.ts:13 +msgid "Still working on it…" +msgstr "Stadig i gang…" + #. Stop-recording button label in the desktop voice message composer. #: src/features/voice/components/VoiceMessageComposerModal.tsx:65 msgid "Stop" @@ -33013,7 +32961,7 @@ msgid "Terms of service" msgstr "Servicevilkår" #. Label for Bluesky OAuth terms URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1069 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1043 msgid "Terms URL" msgstr "URL til servicevilkår" @@ -33023,7 +32971,7 @@ msgid "Terrorism or violent extremism" msgstr "Terrorisme eller voldelig ekstremisme" #. Button that validates SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1041 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1015 msgid "Test SMTP" msgstr "Test SMTP" @@ -33800,7 +33748,7 @@ msgid "This clears quick CSS, imported themes, uploaded assets, and local file r msgstr "Dette rydder Hurtig CSS, importerede temaer, uploadede ressourcer og lokale filreferencer på denne enhed." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:83 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:82 msgid "This clears your backend premium state entirely, including premium type, billing metadata, and override flags." msgstr "Dette rydder din backend-premiumstatus fuldstændigt, inklusive premiumtype, faktureringsmetadata og tilsidesættelsesflag." @@ -34200,7 +34148,7 @@ msgid "This message no longer exists." msgstr "Denne besked findes ikke længere." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:130 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:129 msgid "This nickname will only be visible in this community" msgstr "Dette kaldenavn vil kun være synligt i dette fællesskab" @@ -34277,12 +34225,12 @@ msgid "This removes all custom CSS overrides. Theme files in your library are no msgstr "Dette fjerner alle CSS-tilpasninger. Temafiler i dit bibliotek påvirkes ikke." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:50 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:49 msgid "This removes all previously authorized IP addresses on your account. The next login from any IP will require email verification." msgstr "Dette fjerner alle tidligere godkendte IP-adresser på din konto. Næste login fra en hvilken som helst IP kræver bekræftelse via e-mail." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:67 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:66 msgid "This removes all trusted domains. You will see the external link warning for all domains again." msgstr "Dette fjerner alle betroede domæner. Du vil igen se advarslen om eksterne links for alle domæner." @@ -34949,7 +34897,7 @@ msgstr "Ændringer af ikonet i systembakken træder først i kraft efter en gens msgid "Trending GIFs" msgstr "Populære GIF'er" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:383 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:359 msgid "Trigger React crash" msgstr "Udløs React-nedbrud" @@ -35008,7 +34956,7 @@ msgid "Trusted domains" msgstr "Betroede domæner" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:55 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:54 msgid "Trusted domains cleared." msgstr "Betroede domæner er ryddet." @@ -35054,7 +35002,6 @@ msgid "Try a different variable name or clear the search." msgstr "Prøv et andet variabelnavn, eller ryd søgningen." #. Generic action label for retrying a failed or interrupted operation. -#: src/features/auth/components/AltchaVerification.tsx:53 #: src/features/auth/flow/AuthRouteLoadError.tsx:22 #: src/features/i18n/utils/CommonMessageDescriptors.ts:75 msgid "Try again" @@ -35132,10 +35079,6 @@ msgstr "Prøv sikkerhedsnøgle/adgangsnøgle i stedet" msgid "Try sending your message again." msgstr "Prøv at sende din besked igen." -#: src/features/auth/components/modals/CaptchaModal.tsx:177 -msgid "Try Turnstile instead" -msgstr "Prøv Turnstile i stedet" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:135 msgid "TTS" @@ -36890,7 +36833,7 @@ msgid "Use this when troubleshooting the client or collecting logs. It may add v msgstr "Brug dette, når du fejlfinder klienten eller indsamler logfiler. Det kan tilføje detaljerede meddelelser til browserkonsollen for den aktuelle klient." #. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1037 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1011 msgid "Use TLS" msgstr "Brug TLS" @@ -37056,7 +36999,7 @@ msgstr "Brugerens lydstyrke" #. Generic form-field label for a username. #. Label for SMTP username input. #. Settings search entry label. Also used as a search synonym in the settings search bar. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 #: src/features/i18n/utils/CommonMessageDescriptors.ts:572 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:218 #: src/features/user/components/modals/tabs/my_profile_tab/MyProfileTabUsernameSection.tsx:56 @@ -37337,11 +37280,6 @@ msgstr "Bekræft telefonnummer" msgid "Verify phone number form" msgstr "Formular til bekræftelse af telefonnummer" -#. Short label in the authentication captcha modal. Keep the tone plain and specific. -#: src/features/auth/components/modals/CaptchaModal.tsx:17 -msgid "Verify you're human" -msgstr "Bekræft, at du er et menneske" - #. Title of the error modal shown when an unverified account tries to start a DM. #. Title shown when an unverified account cannot start a DM or group DM. #: src/features/app/components/alerts/DmActionErrorModal.tsx:40 @@ -37369,22 +37307,22 @@ msgid "Verify your email before adding an authenticator app." msgstr "Bekræft din e-mail, før du tilføjer en godkendelsesapp." #. Description text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:117 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:116 msgid "Verify your email before changing your community nickname, avatar, banner, bio, pronouns, or accent color." msgstr "Bekræft din e-mail, før du ændrer dit kaldenavn, din avatar, dit banner, din biografi, dine pronominer eller din accentfarve i et fællesskab." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:121 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:120 msgid "Verify your email before changing your username, display name, avatar, banner, bio, pronouns, time zone, or {premiumProductName} badge privacy." msgstr "Bekræft din e-mail, før du ændrer dit brugernavn, visningsnavn, avatar, banner, biografi, pronominer, tidszone eller privatlivsindstillinger for dit {premiumProductName}-badge." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:85 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:84 msgid "Verify your email before editing this community profile. You can still preview it here." msgstr "Bekræft din e-mail, før du redigerer denne fællesskabsprofil. Du kan stadig se en forhåndsvisning her." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:89 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:88 msgid "Verify your email before editing your profile. You can still preview it here." msgstr "Bekræft din e-mail, før du redigerer din profil. Du kan stadig se en forhåndsvisning her." @@ -37416,12 +37354,12 @@ msgid "Verify your email to continue using {productName}." msgstr "Bekræft din e-mail for at fortsætte med at bruge {productName}." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:109 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:108 msgid "Verify your email to edit this community profile" msgstr "Bekræft din e-mail for at redigere denne fællesskabsprofil" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:113 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:112 msgid "Verify your email to edit your profile" msgstr "Bekræft din e-mail for at redigere din profil" @@ -38398,10 +38336,6 @@ msgstr "Vi har sænket prisen på {premiumProductName} i Brasilien. Det koster n msgid "We need one verification step before you continue. This helps protect accounts and keep spam off {productName}." msgstr "Vi skal lige bekræfte en ting, før du kan fortsætte. Det hjælper med at beskytte konti og holde spam væk fra {productName}." -#: src/features/auth/components/modals/CaptchaModal.tsx:128 -msgid "We need to make sure you're not a bot. Complete the verification below." -msgstr "Vi skal sikre os, at du ikke er en bot. Gennemfør bekræftelsen herunder." - #. Required-action modal intro text when both email and phone verification are required. #: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:216 msgid "We need two verification steps before you continue. We will show one step at a time." @@ -39256,7 +39190,7 @@ msgid "You can't befriend yourself" msgstr "Du kan ikke blive venner med dig selv" #. Label in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:134 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:133 msgid "You can't change your nickname here" msgstr "Du kan ikke ændre dit kaldenavn her" @@ -39506,7 +39440,7 @@ msgid "You have unsaved changes." msgstr "Du har ændringer, der ikke er gemt." #. Warning text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:81 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:80 msgid "You have unsaved changes. Save or reset before leaving." msgstr "Du har ændringer, der ikke er gemt. Gem eller nulstil, før du forlader siden." @@ -40031,10 +39965,6 @@ msgstr "Din handling kunne ikke gennemføres, da den blev markeret af vores sikk msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Din ansøgning afventer gennemgang. Du kan stadig opdatere oplysningerne om dit fællesskab eller trække ansøgningen tilbage." -#: src/features/auth/components/AltchaVerification.tsx:50 -msgid "Your browser couldn't finish the check." -msgstr "Din browser kunne ikke fuldføre kontrollen." - #. Body of the browser-audio-required modal explaining why the user must click before audio can play. #: src/features/voice/components/modals/AudioPlaybackPermissionModal.tsx:12 msgid "Your browser requires user interaction before audio can be played. Click the button below to enable voice chat." @@ -40386,7 +40316,7 @@ msgid "YouTube enrichment" msgstr "YouTube-berigelse" #. Setup wizard title for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:977 +#: src/features/app/components/setup/SetupWizardSteps.tsx:970 msgid "YouTube previews" msgstr "YouTube-forhåndsvisninger" diff --git a/fluxer_app/src/features/i18n/locales/de/messages.po b/fluxer_app/src/features/i18n/locales/de/messages.po index 15cbac9c1..b68f8184c 100644 --- a/fluxer_app/src/features/i18n/locales/de/messages.po +++ b/fluxer_app/src/features/i18n/locales/de/messages.po @@ -2395,11 +2395,6 @@ msgstr "60 Sekunden" msgid "7 days" msgstr "7 Tage" -#. Required-action error when the API requires a captcha for phone verification. -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 -msgid "A browser check is required before phone verification. Try again from the sign-in page or contact support." -msgstr "Bevor du deine Telefonnummer verifizieren kannst, ist eine Browserprüfung erforderlich. Versuche es noch einmal über die Anmeldeseite oder kontaktiere den Support." - #. Hint shown beside in:. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:77 msgid "a channel" @@ -2928,7 +2923,7 @@ msgid "Add a friend to get started." msgstr "Füge einen Freund hinzu, um loszulegen." #. Setup wizard body for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:973 +#: src/features/app/components/setup/SetupWizardSteps.tsx:966 msgid "Add a Klipy API key to enable GIF search at runtime." msgstr "Füge einen Klipy-API-Schlüssel hinzu, um die GIF-Suche zur Laufzeit zu aktivieren." @@ -2965,7 +2960,7 @@ msgid "Add a working email" msgstr "Funktionierende E-Mail-Adresse hinzufügen" #. Setup wizard body for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:981 +#: src/features/app/components/setup/SetupWizardSteps.tsx:974 msgid "Add a YouTube Data API key to enrich YouTube links." msgstr "Füge einen YouTube Data API-Schlüssel hinzu, um YouTube-Links anzureichern." @@ -3011,7 +3006,7 @@ msgid "Add another reaction" msgstr "Weitere Reaktion hinzufügen" #. Setup wizard body for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1005 +#: src/features/app/components/setup/SetupWizardSteps.tsx:990 msgid "Add Bluesky OAuth client metadata and a signing key." msgstr "Füge Bluesky-OAuth-Client-Metadaten und einen Signierschlüssel hinzu." @@ -3161,7 +3156,7 @@ msgid "Add shortcut" msgstr "Tastenkombination hinzufügen" #. Setup wizard body for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:997 +#: src/features/app/components/setup/SetupWizardSteps.tsx:982 msgid "Add SMTP credentials so the instance can send verification and notification email." msgstr "Füge SMTP-Anmeldedaten hinzu, damit die Instanz Verifizierungs-E-Mails und Benachrichtigungen senden kann." @@ -3188,7 +3183,7 @@ msgid "Add stream" msgstr "Stream hinzufügen" #. Description for configuring an optional setup wizard integration now. -#: src/features/app/components/setup/SetupWizardSteps.tsx:965 +#: src/features/app/components/setup/SetupWizardSteps.tsx:958 msgid "Add the credentials during setup." msgstr "Füge die Anmeldedaten während der Einrichtung hinzu." @@ -3954,7 +3949,7 @@ msgid "An invalid status was provided. You can now close this tab and return to msgstr "Ein ungültiger Status wurde angegeben. Du kannst diesen Tab jetzt schließen und zur App zurückkehren." #. Short label in the authentication auth form. Keep the tone plain and specific. -#: src/features/auth/hooks/useAuthForm.ts:13 +#: src/features/auth/hooks/useAuthForm.ts:12 msgid "An unexpected error occurred" msgstr "Ein unerwarteter Fehler ist aufgetreten" @@ -4262,7 +4257,7 @@ msgid "Anyone can request an account, but an administrator must approve it." msgstr "Jeder kann einen Account beantragen, aber ein Administrator muss den Antrag genehmigen." #. Label for an integration API key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1018 +#: src/features/app/components/setup/SetupWizardSteps.tsx:994 msgid "API key" msgstr "API-Schlüssel" @@ -4958,7 +4953,7 @@ msgid "Authorized apps" msgstr "Autorisierte Apps" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:38 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:37 msgid "Authorized IPs cleared. New logins will require email verification." msgstr "Autorisierte IPs gelöscht. Neue Anmeldungen erfordern eine E-Mail-Verifizierung." @@ -5730,7 +5725,7 @@ msgid "Bluesky connections" msgstr "Bluesky-Verbindungen" #. Setup wizard title for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1001 +#: src/features/app/components/setup/SetupWizardSteps.tsx:986 msgid "Bluesky OAuth" msgstr "Bluesky OAuth" @@ -5897,11 +5892,6 @@ msgstr "Bot-Berechtigungen können nicht negativ sein." msgid "Bot profile" msgstr "Bot-Profil" -#. Setup wizard title for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:985 -msgid "Bot protection" -msgstr "Bot-Schutz" - #. Short label in the authentication OAUTH scopes step. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/OAuthScopesStep.tsx:20 msgid "Bot scope requested" @@ -6554,11 +6544,6 @@ msgstr "Kann nicht bearbeitet werden" msgid "Cannot delete account" msgstr "Account kann nicht gelöscht werden" -#. Toast error shown when captcha verification fails inside the auth captcha interceptor. -#: src/features/auth/components/CaptchaInterceptor.tsx:15 -msgid "Captcha verification failed. Try again." -msgstr "Captcha-Verifizierung fehlgeschlagen. Bitte versuche es erneut." - #. Section header in the Linux audio source picker. Lists capture-target options (entire system / specific apps). #: src/features/voice/components/AudioSourcePickerLinux.tsx:50 msgid "Capture" @@ -7398,10 +7383,6 @@ msgstr "Zugriff wird geprüft …" msgid "Checking screen recording permission..." msgstr "Berechtigung zur Bildschirmaufnahme wird geprüft …" -#: src/features/auth/components/AltchaVerification.tsx:62 -msgid "Checking your browser. This takes a few seconds." -msgstr "Browser wird geprüft. Das dauert ein paar Sekunden." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -7571,11 +7552,6 @@ msgstr "Wähle „Ablage“ und dann „Zum Dock hinzufügen“." msgid "Choose friends to message." msgstr "Wähle Freunde zum Chatten aus." -#. Setup wizard body for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:989 -msgid "Choose hCaptcha or Cloudflare Turnstile for signup challenges." -msgstr "Wähle hCaptcha oder Cloudflare Turnstile für die Sicherheitsprüfung bei der Registrierung." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:455 msgid "Choose how chat moves after you send a message" @@ -7982,17 +7958,17 @@ msgid "Clear selection" msgstr "Auswahl aufheben" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:88 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:87 msgid "Clear trust all setting" msgstr "\"Allen vertrauen\"-Einstellung löschen" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:63 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:62 msgid "Clear trusted domains" msgstr "Vertrauenswürdige Domains löschen" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:96 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:95 msgid "Clear trusted domains ({trustedDomainsCount})" msgstr "Vertrauenswürdige Domains löschen ({trustedDomainsCount})" @@ -8002,7 +7978,7 @@ msgid "Clearer text" msgstr "Klarerer Text" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:108 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:107 msgid "Clearing trusted domains..." msgstr "Vertrauenswürdige Domains werden gelöscht …" @@ -8100,7 +8076,7 @@ msgid "Client" msgstr "Client" #. Label for Bluesky OAuth client name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1057 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1031 msgid "Client name" msgstr "Client-Name" @@ -8117,7 +8093,7 @@ msgid "Client secret regenerated. Update any code that uses the old secret." msgstr "Client-Geheimnis neu generiert. Aktualisiere jeglichen Code, der das alte Geheimnis verwendet." #. Label for Bluesky OAuth client URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1061 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 msgid "Client URL" msgstr "Client-URL" @@ -8269,11 +8245,6 @@ msgstr "Geschlossene DMs" msgid "Cloud upload" msgstr "Cloud-Upload" -#. Cloudflare Turnstile provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1014 -msgid "Cloudflare Turnstile" -msgstr "Cloudflare Turnstile" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:58 msgid "Coal" @@ -8669,7 +8640,7 @@ msgstr "Community-Name" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:126 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:125 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:113 msgid "Community nickname" msgstr "Community-Spitzname" @@ -8722,7 +8693,7 @@ msgid "Community profile" msgstr "Community-Profil" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:73 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:72 msgid "Community profile updated" msgstr "Community-Profil aktualisiert" @@ -8880,7 +8851,7 @@ msgid "Configure keyboard shortcuts" msgstr "Tastenkombinationen konfigurieren" #. Option for configuring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:961 +#: src/features/app/components/setup/SetupWizardSteps.tsx:954 msgid "Configure now" msgstr "Jetzt konfigurieren" @@ -12341,7 +12312,7 @@ msgstr "Von {channel} trennen" msgid "Disconnect from voice" msgstr "Sprachanruf trennen" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:261 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:243 msgid "Disconnect socket" msgstr "Socket trennen" @@ -12479,7 +12450,7 @@ msgstr "Anzeigemodus" #. Short label in the inputs tab. Keep it concise. #. Short label in the my profile tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:22 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:138 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:137 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:61 msgid "Display name" msgstr "Anzeigename" @@ -12625,7 +12596,7 @@ msgstr "Möchtest du {communityName} beitreten?" #. Label in the accessibility tab. #. Label in the my profile tab. #: src/features/user/components/modals/tabs/AccessibilityTab.tsx:54 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:146 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:145 msgid "Doc, I'm from the future. I came here in a time machine that you invented. Now, I need your help to get back to the year 1985." msgstr "Doc, ich komme aus der Zukunft. Ich bin in einer Zeitmaschine hierhergekommen, die du erfunden hast. Jetzt brauche ich deine Hilfe, um zurück ins Jahr 1985 zu gelangen." @@ -13262,7 +13233,7 @@ msgid "Edit your messages above or below" msgstr "Deine Nachrichten darüber oder darunter bearbeiten" #. Button or menu action label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:93 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:92 msgid "Edit your profile appearance and see a live preview" msgstr "Bearbeite dein Profil und sieh dir eine Live-Vorschau an" @@ -13330,7 +13301,7 @@ msgid "Email changed" msgstr "E-Mail-Adresse geändert" #. Setup wizard title for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:993 +#: src/features/app/components/setup/SetupWizardSteps.tsx:978 msgid "Email delivery" msgstr "E-Mail-Zustellung" @@ -13635,7 +13606,7 @@ msgid "Enable beta feature" msgstr "Beta-Funktion aktivieren" #. Label for enabling Bluesky OAuth in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1053 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1027 msgid "Enable Bluesky OAuth" msgstr "Bluesky OAuth aktivieren" @@ -13668,7 +13639,7 @@ msgid "Enable developer mode" msgstr "Entwicklermodus aktivieren" #. Label for enabling SMTP email delivery in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1021 +#: src/features/app/components/setup/SetupWizardSteps.tsx:995 msgid "Enable email delivery" msgstr "E-Mail-Zustellung aktivieren" @@ -14705,7 +14676,7 @@ msgid "Failed to ban member. Try again." msgstr "Mitglied konnte nicht gebannt werden. Bitte versuche es noch einmal." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:59 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:58 msgid "Failed to clear trusted domains." msgstr "Vertrauenswürdige Domains konnten nicht gelöscht werden." @@ -14762,7 +14733,7 @@ msgid "Failed to enable camera." msgstr "Kamera konnte nicht aktiviert werden." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:42 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:41 msgid "Failed to forget authorized IPs. Try again." msgstr "Autorisierte IPs konnten nicht vergessen werden. Bitte versuche es noch einmal." @@ -14907,7 +14878,7 @@ msgid "Failed to resend verification code. Try again later." msgstr "Verifizierungscode konnte nicht erneut gesendet werden. Bitte versuche es später noch einmal." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:75 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:74 msgid "Failed to reset premium state." msgstr "Premium-Status konnte nicht zurückgesetzt werden." @@ -15581,7 +15552,7 @@ msgstr "Ladeplatzhalter erzwingen" msgid "Force mature media" msgstr "Nicht jugendfreie Medien erzwingen" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:276 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:258 msgid "Force move to AFK channel" msgstr "In AFK-Kanal verschieben erzwingen" @@ -15640,7 +15611,7 @@ msgid "Forced off" msgstr "Erzwungen deaktiviert" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:46 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:45 msgid "Forget authorized IPs" msgstr "Autorisierte IPs vergessen" @@ -15650,7 +15621,7 @@ msgid "Forget subscriptions" msgstr "Abos vergessen" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:104 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:103 msgid "Forgetting authorized IPs..." msgstr "Autorisierte IPs werden vergessen..." @@ -15907,12 +15878,12 @@ msgid "from <0>{0}" msgstr "aus <0>{0}" #. Label for SMTP from email input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1025 +#: src/features/app/components/setup/SetupWizardSteps.tsx:999 msgid "From email" msgstr "Absender-E-Mail" #. Label for SMTP from name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1029 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1003 msgid "From name" msgstr "Absender-Name" @@ -16204,7 +16175,7 @@ msgid "GIF preview" msgstr "GIF-Vorschau" #. Setup wizard title for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:969 +#: src/features/app/components/setup/SetupWizardSteps.tsx:962 msgid "GIF search" msgstr "GIF-Suche" @@ -16853,21 +16824,12 @@ msgstr "Hast du einen Geschenke-Code? Löse ihn ein, um {PREMIUM_PRODUCT_NAME} f msgid "Having fun?" msgstr "Viel Spaß?" -#: src/features/auth/components/modals/CaptchaModal.tsx:175 -msgid "Having issues? Try hCaptcha instead" -msgstr "Probleme? Versuche es stattdessen mit hCaptcha" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:63 msgctxt "us-state" msgid "Hawaii" msgstr "Hawaii" -#. hCaptcha provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1013 -msgid "hCaptcha" -msgstr "hCaptcha" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:238 msgid "HD" @@ -19768,7 +19730,7 @@ msgid "Logo" msgstr "Logo" #. Label for Bluesky OAuth logo URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1065 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1039 msgid "Logo URL" msgstr "Logo-URL" @@ -22941,7 +22903,7 @@ msgid "No tokens match \"{searchQuery}\"." msgstr "Keine Token stimmen mit \"{searchQuery}\" überein." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:92 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:91 msgid "No trusted domains" msgstr "Keine vertrauenswürdigen Domains" @@ -23696,10 +23658,6 @@ msgstr "Browser-Auswahl öffnen" msgid "Open call view" msgstr "Anrufanzeige öffnen" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:288 -msgid "Open captcha modal" -msgstr "Captcha-Dialog öffnen" - #. Accessible label for the channel header title button in a community channel. #: src/features/channel/components/channel_header/shared.ts:14 msgid "Open channel details for {channelName}" @@ -23712,7 +23670,7 @@ msgstr "Kanaldetails für {channelName} öffnen" msgid "Open chat" msgstr "Chat öffnen" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:314 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:290 msgid "Open claim account modal" msgstr "Dialog zum Beanspruchen des Accounts öffnen" @@ -23944,11 +23902,11 @@ msgstr "Sticker im Browser öffnen" msgid "Open streaming privacy settings" msgstr "Streaming-Datenschutzeinstellungen öffnen" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:327 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:303 msgid "Open sudo verification modal" msgstr "Dialog zur Sudo-Verifizierung öffnen" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:342 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:318 msgid "Open system DM" msgstr "System-DM öffnen" @@ -24430,7 +24388,7 @@ msgstr "Passkeys erfordern ein signiertes macOS-Bundle mit einer gültigen Anwen #. Generic form-field label for a password. #. Label for SMTP password input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1036 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1010 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:146 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:183 @@ -25212,7 +25170,7 @@ msgid "Popup" msgstr "Pop-up" #. Label for SMTP port input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1034 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1008 msgid "Port" msgstr "Port" @@ -25338,7 +25296,7 @@ msgid "Premium since date" msgstr "Premium seit Datum" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:71 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:70 msgid "Premium state reset on the backend." msgstr "Premium-Status im Backend zurückgesetzt." @@ -25608,7 +25566,7 @@ msgid "Privacy settings" msgstr "Datenschutzeinstellungen" #. Label for Bluesky OAuth privacy URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1073 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1047 msgid "Privacy URL" msgstr "Datenschutz-URL" @@ -25633,7 +25591,7 @@ msgid "Private details" msgstr "Private Details" #. Label for Bluesky OAuth private key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1081 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1055 msgid "Private key" msgstr "Privater Schlüssel" @@ -25699,18 +25657,18 @@ msgstr "Profilfarbe" #. Settings section label for editing profile appearance and identity. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:105 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:104 #: src/features/user/components/settings_utils/section_registry/GeneralSettingsSections.ts:6 msgid "Profile customization" msgstr "Profil anpassen" #. Label in the my profile tab. Preserve {selectedGuildName}; it is inserted by code. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:101 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:100 msgid "Profile customization for {selectedGuildName}" msgstr "Profilanpassung für {selectedGuildName}" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:97 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:96 msgid "Profile customization form" msgstr "Formular zum Anpassen des Profils" @@ -25775,7 +25733,7 @@ msgid "Profile type" msgstr "Profiltyp" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:77 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:76 msgid "Profile updated" msgstr "Profil aktualisiert" @@ -25812,7 +25770,7 @@ msgstr "Bei neuen Audiogeräten nachfragen" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:142 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:141 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:177 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:160 msgid "Pronouns" @@ -25842,11 +25800,6 @@ msgstr "Gib entweder eine Nutzer-ID oder einen Nutzernamen der Person an, die du msgid "Provide your full legal name for the declaration." msgstr "Gib deinen vollständigen Namen für die Erklärung an." -#. Label for an integration provider choice. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 -msgid "Provider" -msgstr "Anbieter" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27626,7 +27579,7 @@ msgid "Reset password" msgstr "Passwort zurücksetzen" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:79 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:78 msgid "Reset premium state" msgstr "Premium-Status zurücksetzen" @@ -27635,7 +27588,7 @@ msgstr "Premium-Status zurücksetzen" msgid "Reset slider to default value" msgstr "Schieberegler auf Standardwert zurücksetzen" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:247 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:229 msgid "Reset socket" msgstr "Socket zurücksetzen" @@ -27684,7 +27637,7 @@ msgid "Reset zoom" msgstr "Zoom zurücksetzen" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:112 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:111 msgid "Resetting premium state..." msgstr "Premium-Status wird zurückgesetzt ..." @@ -28315,7 +28268,7 @@ msgid "Run the instance as one community instead of many. This can only be enabl msgstr "Führe die Instanz als eine Community statt als viele aus. Dies kann nur jetzt während der Einrichtung aktiviert werden." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:100 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:99 msgid "Runtime utilities" msgstr "Laufzeit-Dienstprogramme" @@ -29103,11 +29056,6 @@ msgstr "Sekundärer Button geklickt." msgid "Secret" msgstr "Geheimer Schlüssel" -#. Label for a CAPTCHA secret key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1020 -msgid "Secret key" -msgstr "Geheimer Schlüssel" - #. Settings search entry label. Names the settings search entry in the settings UI. #. Short label in the secrets section. Keep it concise. Keep the tone plain and specific. #: src/features/user/components/modals/tabs/applications_tab/application_detail/SecretsSection.tsx:11 @@ -29925,7 +29873,7 @@ msgid "Set up authenticator app" msgstr "Authenticator-App einrichten" #. Option for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:953 +#: src/features/app/components/setup/SetupWizardSteps.tsx:946 msgid "Set up later" msgstr "Später einrichten" @@ -30427,7 +30375,7 @@ msgstr "Inline-DM-Liste anzeigen" msgid "Show just the typing indicator without avatars" msgstr "Nur die Tippanzeige ohne Avatare anzeigen" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:308 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:284 msgid "Show keyboard mode intro" msgstr "Einführung in den Tastaturmodus anzeigen" @@ -30538,7 +30486,7 @@ msgstr "Neko anzeigen" msgid "Show new device alerts" msgstr "Benachrichtigungen für neue Geräte anzeigen" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:282 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:264 msgid "Show new device modal" msgstr "Dialog für neue Geräte anzeigen" @@ -30820,7 +30768,7 @@ msgid "Signed-in devices" msgstr "Angemeldete Geräte" #. Label for Bluesky OAuth signing key ID input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1077 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1051 msgid "Signing key ID" msgstr "Signierschlüssel-ID" @@ -30910,11 +30858,6 @@ msgstr "Einzelne Zeile" msgid "Single user (all statuses)" msgstr "Einzelner Nutzer (alle Statusmeldungen)" -#. Label for a CAPTCHA site key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 -msgid "Site key" -msgstr "Website-Schlüssel" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:98 @@ -30964,7 +30907,7 @@ msgid "Skip the system leave notice — nobody gets pinged." msgstr "Systembenachrichtigung beim Verlassen überspringen – niemand wird benachrichtigt." #. Description for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:957 +#: src/features/app/components/setup/SetupWizardSteps.tsx:950 msgid "Skip this now and configure it from the admin panel." msgstr "Überspringe dies jetzt und konfiguriere es später im Admin-Panel." @@ -31212,17 +31155,17 @@ msgid "SMS verification is unavailable right now. Try again later or contact sup msgstr "Die SMS-Verifizierung ist derzeit nicht verfügbar. Versuche es später erneut oder kontaktiere den Support." #. Success message after validating SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1045 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 msgid "SMTP connection verified." msgstr "SMTP-Verbindung verifiziert." #. Label for SMTP host input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1033 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1007 msgid "SMTP host" msgstr "SMTP-Host" #. Failure message after validating SMTP credentials when the server returns no error detail. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1049 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1023 msgid "SMTP validation failed." msgstr "SMTP-Validierung fehlgeschlagen." @@ -31402,7 +31345,7 @@ msgstr "Es ist ein Fehler aufgetreten. Bitte versuche es später erneut." #. Inline error in the web deep-link prompt when opening the desktop app fails. #. Toast error shown when the mature content check request fails unexpectedly. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:18 -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:580 +#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 #: src/features/auth/flow/DesktopDeepLinkPrompt.tsx:31 msgid "Something went wrong. Try again." msgstr "Es ist ein Fehler aufgetreten. Bitte versuche es erneut." @@ -32099,6 +32042,11 @@ msgstr "Wird noch indiziert – bitte gleich noch einmal versuchen" msgid "Still Neko" msgstr "Unbeweglicher Neko" +#. Small toast shown only when an automatic background check before sign-in, sign-up or a similar request takes more than a couple of seconds. No user action needed. Keep it short and calm. +#: src/features/auth/altcha/CaptchaInterceptor.ts:13 +msgid "Still working on it…" +msgstr "Wird noch bearbeitet…" + #. Stop-recording button label in the desktop voice message composer. #: src/features/voice/components/VoiceMessageComposerModal.tsx:65 msgid "Stop" @@ -33013,7 +32961,7 @@ msgid "Terms of service" msgstr "Nutzungsbedingungen" #. Label for Bluesky OAuth terms URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1069 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1043 msgid "Terms URL" msgstr "URL der Nutzungsbedingungen" @@ -33023,7 +32971,7 @@ msgid "Terrorism or violent extremism" msgstr "Terrorismus oder gewalttätiger Extremismus" #. Button that validates SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1041 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1015 msgid "Test SMTP" msgstr "SMTP testen" @@ -33800,7 +33748,7 @@ msgid "This clears quick CSS, imported themes, uploaded assets, and local file r msgstr "Dadurch werden Schnell-CSS, importierte Designs, hochgeladene Assets und lokale Dateiverweise auf diesem Gerät gelöscht." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:83 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:82 msgid "This clears your backend premium state entirely, including premium type, billing metadata, and override flags." msgstr "Dadurch wird dein Premium-Status im Backend vollständig gelöscht, einschließlich Premium-Typ, Abrechnungsmetadaten und Override-Flags." @@ -34200,7 +34148,7 @@ msgid "This message no longer exists." msgstr "Diese Nachricht existiert nicht mehr." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:130 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:129 msgid "This nickname will only be visible in this community" msgstr "Dieser Spitzname ist nur in dieser Community sichtbar" @@ -34277,12 +34225,12 @@ msgid "This removes all custom CSS overrides. Theme files in your library are no msgstr "Dadurch werden alle benutzerdefinierten CSS-Überschreibungen entfernt. Design-Dateien in deiner Bibliothek sind davon nicht betroffen." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:50 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:49 msgid "This removes all previously authorized IP addresses on your account. The next login from any IP will require email verification." msgstr "Dadurch werden alle zuvor autorisierten IP-Adressen in deinem Account entfernt. Die nächste Anmeldung von einer beliebigen IP-Adresse erfordert eine E-Mail-Verifizierung." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:67 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:66 msgid "This removes all trusted domains. You will see the external link warning for all domains again." msgstr "Dadurch werden alle vertrauenswürdigen Domains entfernt. Die Warnung für externe Links wird dann wieder für alle Domains angezeigt." @@ -34949,7 +34897,7 @@ msgstr "Änderungen am Symbol im Infobereich werden unter Linux erst nach einem msgid "Trending GIFs" msgstr "Angesagte GIFs" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:383 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:359 msgid "Trigger React crash" msgstr "React-Absturz auslösen" @@ -35008,7 +34956,7 @@ msgid "Trusted domains" msgstr "Vertrauenswürdige Domains" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:55 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:54 msgid "Trusted domains cleared." msgstr "Vertrauenswürdige Domains gelöscht." @@ -35054,7 +35002,6 @@ msgid "Try a different variable name or clear the search." msgstr "Versuch einen anderen Variablennamen oder lösch die Suche." #. Generic action label for retrying a failed or interrupted operation. -#: src/features/auth/components/AltchaVerification.tsx:53 #: src/features/auth/flow/AuthRouteLoadError.tsx:22 #: src/features/i18n/utils/CommonMessageDescriptors.ts:75 msgid "Try again" @@ -35132,10 +35079,6 @@ msgstr "Stattdessen Sicherheitsschlüssel/Passkey verwenden" msgid "Try sending your message again." msgstr "Versuch, deine Nachricht noch einmal zu senden." -#: src/features/auth/components/modals/CaptchaModal.tsx:177 -msgid "Try Turnstile instead" -msgstr "Stattdessen Turnstile versuchen" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:135 msgid "TTS" @@ -36890,7 +36833,7 @@ msgid "Use this when troubleshooting the client or collecting logs. It may add v msgstr "Verwende diese Option zur Fehlerbehebung im Client oder zum Sammeln von Protokollen. Sie kann zusätzliche ausführliche Meldungen in der Browserkonsole des aktuellen Clients ausgeben." #. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1037 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1011 msgid "Use TLS" msgstr "TLS verwenden" @@ -37056,7 +36999,7 @@ msgstr "Nutzerlautstärke" #. Generic form-field label for a username. #. Label for SMTP username input. #. Settings search entry label. Also used as a search synonym in the settings search bar. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 #: src/features/i18n/utils/CommonMessageDescriptors.ts:572 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:218 #: src/features/user/components/modals/tabs/my_profile_tab/MyProfileTabUsernameSection.tsx:56 @@ -37337,11 +37280,6 @@ msgstr "Telefonnummer verifizieren" msgid "Verify phone number form" msgstr "Formular zur Verifizierung der Telefonnummer" -#. Short label in the authentication captcha modal. Keep the tone plain and specific. -#: src/features/auth/components/modals/CaptchaModal.tsx:17 -msgid "Verify you're human" -msgstr "Bestätige, dass du ein Mensch bist" - #. Title of the error modal shown when an unverified account tries to start a DM. #. Title shown when an unverified account cannot start a DM or group DM. #: src/features/app/components/alerts/DmActionErrorModal.tsx:40 @@ -37369,22 +37307,22 @@ msgid "Verify your email before adding an authenticator app." msgstr "Bestätige deine E-Mail-Adresse, bevor du eine Authenticator-App hinzufügst." #. Description text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:117 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:116 msgid "Verify your email before changing your community nickname, avatar, banner, bio, pronouns, or accent color." msgstr "Bestätige deine E-Mail-Adresse, bevor du deinen Community-Spitznamen, Avatar, Banner, deine Biografie, Pronomen oder Akzentfarbe änderst." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:121 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:120 msgid "Verify your email before changing your username, display name, avatar, banner, bio, pronouns, time zone, or {premiumProductName} badge privacy." msgstr "Bestätige deine E-Mail-Adresse, bevor du deinen Benutzernamen, Anzeigenamen, Avatar, Banner, deine Biografie, Pronomen, Zeitzone oder die Sichtbarkeit deines {premiumProductName}-Abzeichens änderst." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:85 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:84 msgid "Verify your email before editing this community profile. You can still preview it here." msgstr "Bestätige deine E-Mail-Adresse, bevor du dieses Community-Profil bearbeitest. Du kannst es hier trotzdem in der Vorschau ansehen." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:89 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:88 msgid "Verify your email before editing your profile. You can still preview it here." msgstr "Bestätige deine E-Mail-Adresse, bevor du dein Profil bearbeitest. Du kannst es hier trotzdem in der Vorschau ansehen." @@ -37416,12 +37354,12 @@ msgid "Verify your email to continue using {productName}." msgstr "Bestätige deine E-Mail-Adresse, um {productName} weiterhin nutzen zu können." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:109 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:108 msgid "Verify your email to edit this community profile" msgstr "Bestätige deine E-Mail-Adresse, um dieses Community-Profil zu bearbeiten" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:113 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:112 msgid "Verify your email to edit your profile" msgstr "E-Mail-Adresse verifizieren, um dein Profil zu bearbeiten" @@ -38398,10 +38336,6 @@ msgstr "Wir haben die Preise für {premiumProductName} in Brasilien gesenkt. Es msgid "We need one verification step before you continue. This helps protect accounts and keep spam off {productName}." msgstr "Bevor du fortfahren kannst, ist ein Verifizierungsschritt erforderlich. Dies hilft, Accounts zu schützen und Spam von {productName} fernzuhalten." -#: src/features/auth/components/modals/CaptchaModal.tsx:128 -msgid "We need to make sure you're not a bot. Complete the verification below." -msgstr "Wir müssen sicherstellen, dass du kein Bot bist. Bitte führe folgende Überprüfung durch." - #. Required-action modal intro text when both email and phone verification are required. #: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:216 msgid "We need two verification steps before you continue. We will show one step at a time." @@ -39256,7 +39190,7 @@ msgid "You can't befriend yourself" msgstr "Du kannst dich nicht selbst befreunden" #. Label in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:134 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:133 msgid "You can't change your nickname here" msgstr "Du kannst deinen Spitznamen hier nicht ändern" @@ -39506,7 +39440,7 @@ msgid "You have unsaved changes." msgstr "Du hast ungespeicherte Änderungen." #. Warning text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:81 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:80 msgid "You have unsaved changes. Save or reset before leaving." msgstr "Du hast ungespeicherte Änderungen. Speichere sie oder setze sie zurück, bevor du die Seite verlässt." @@ -40031,10 +39965,6 @@ msgstr "Deine Aktion konnte nicht abgeschlossen werden, da sie von unseren Siche msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Dein Antrag wartet auf Prüfung. Du kannst die Details deines Eintrags weiterhin aktualisieren oder den Antrag zurückziehen." -#: src/features/auth/components/AltchaVerification.tsx:50 -msgid "Your browser couldn't finish the check." -msgstr "Dein Browser konnte die Prüfung nicht abschließen." - #. Body of the browser-audio-required modal explaining why the user must click before audio can play. #: src/features/voice/components/modals/AudioPlaybackPermissionModal.tsx:12 msgid "Your browser requires user interaction before audio can be played. Click the button below to enable voice chat." @@ -40386,7 +40316,7 @@ msgid "YouTube enrichment" msgstr "YouTube-Integration" #. Setup wizard title for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:977 +#: src/features/app/components/setup/SetupWizardSteps.tsx:970 msgid "YouTube previews" msgstr "YouTube-Vorschauen" diff --git a/fluxer_app/src/features/i18n/locales/el/messages.po b/fluxer_app/src/features/i18n/locales/el/messages.po index 54dc8c78f..5b9b84155 100644 --- a/fluxer_app/src/features/i18n/locales/el/messages.po +++ b/fluxer_app/src/features/i18n/locales/el/messages.po @@ -2395,11 +2395,6 @@ msgstr "60 δευτερόλεπτα" msgid "7 days" msgstr "7 ημέρες" -#. Required-action error when the API requires a captcha for phone verification. -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 -msgid "A browser check is required before phone verification. Try again from the sign-in page or contact support." -msgstr "Απαιτείται έλεγχος προγράμματος περιήγησης πριν από την επαλήθευση τηλεφώνου. Δοκιμάστε ξανά από τη σελίδα σύνδεσης ή επικοινωνήστε με την υποστήριξη." - #. Hint shown beside in:. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:77 msgid "a channel" @@ -2928,7 +2923,7 @@ msgid "Add a friend to get started." msgstr "Πρόσθεσε έναν φίλο για να ξεκινήσεις." #. Setup wizard body for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:973 +#: src/features/app/components/setup/SetupWizardSteps.tsx:966 msgid "Add a Klipy API key to enable GIF search at runtime." msgstr "Προσθέστε ένα κλειδί API του Klipy για να ενεργοποιήσετε την αναζήτηση GIF κατά την εκτέλεση." @@ -2965,7 +2960,7 @@ msgid "Add a working email" msgstr "Προσθέστε ένα email που λειτουργεί" #. Setup wizard body for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:981 +#: src/features/app/components/setup/SetupWizardSteps.tsx:974 msgid "Add a YouTube Data API key to enrich YouTube links." msgstr "Προσθέστε ένα κλειδί API YouTube Data για να εμπλουτίσετε τους συνδέσμους του YouTube." @@ -3011,7 +3006,7 @@ msgid "Add another reaction" msgstr "Προσθήκη άλλης αντίδρασης" #. Setup wizard body for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1005 +#: src/features/app/components/setup/SetupWizardSteps.tsx:990 msgid "Add Bluesky OAuth client metadata and a signing key." msgstr "Προσθέστε μεταδεδομένα πελάτη OAuth και ένα κλειδί υπογραφής για το Bluesky." @@ -3161,7 +3156,7 @@ msgid "Add shortcut" msgstr "Προσθήκη συντόμευσης" #. Setup wizard body for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:997 +#: src/features/app/components/setup/SetupWizardSteps.tsx:982 msgid "Add SMTP credentials so the instance can send verification and notification email." msgstr "Προσθέστε διαπιστευτήρια SMTP, ώστε η παρουσία να μπορεί να στέλνει email επαλήθευσης και ειδοποιήσεων." @@ -3188,7 +3183,7 @@ msgid "Add stream" msgstr "Προσθήκη ροής" #. Description for configuring an optional setup wizard integration now. -#: src/features/app/components/setup/SetupWizardSteps.tsx:965 +#: src/features/app/components/setup/SetupWizardSteps.tsx:958 msgid "Add the credentials during setup." msgstr "Προσθέστε τα διαπιστευτήρια κατά τη ρύθμιση." @@ -3954,7 +3949,7 @@ msgid "An invalid status was provided. You can now close this tab and return to msgstr "Δόθηκε μη έγκυρη κατάσταση. Μπορείτε τώρα να κλείσετε αυτήν την καρτέλα και να επιστρέψετε στην εφαρμογή." #. Short label in the authentication auth form. Keep the tone plain and specific. -#: src/features/auth/hooks/useAuthForm.ts:13 +#: src/features/auth/hooks/useAuthForm.ts:12 msgid "An unexpected error occurred" msgstr "Παρουσιάστηκε μη αναμενόμενο σφάλμα" @@ -4262,7 +4257,7 @@ msgid "Anyone can request an account, but an administrator must approve it." msgstr "Οποιοσδήποτε μπορεί να ζητήσει λογαριασμό, αλλά ένας διαχειριστής πρέπει να τον εγκρίνει." #. Label for an integration API key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1018 +#: src/features/app/components/setup/SetupWizardSteps.tsx:994 msgid "API key" msgstr "Κλειδί API" @@ -4958,7 +4953,7 @@ msgid "Authorized apps" msgstr "Εξουσιοδοτημένες εφαρμογές" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:38 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:37 msgid "Authorized IPs cleared. New logins will require email verification." msgstr "Οι εξουσιοδοτημένες IP διαγράφηκαν. Οι νέες συνδέσεις θα απαιτούν επαλήθευση μέσω email." @@ -5730,7 +5725,7 @@ msgid "Bluesky connections" msgstr "Συνδέσεις Bluesky" #. Setup wizard title for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1001 +#: src/features/app/components/setup/SetupWizardSteps.tsx:986 msgid "Bluesky OAuth" msgstr "Bluesky OAuth" @@ -5897,11 +5892,6 @@ msgstr "Τα δικαιώματα bot δεν μπορούν να είναι αρ msgid "Bot profile" msgstr "Προφίλ bot" -#. Setup wizard title for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:985 -msgid "Bot protection" -msgstr "Προστασία από bot" - #. Short label in the authentication OAUTH scopes step. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/OAuthScopesStep.tsx:20 msgid "Bot scope requested" @@ -6554,11 +6544,6 @@ msgstr "Δεν είναι δυνατή η επεξεργασία" msgid "Cannot delete account" msgstr "Δεν είναι δυνατή η διαγραφή λογαριασμού" -#. Toast error shown when captcha verification fails inside the auth captcha interceptor. -#: src/features/auth/components/CaptchaInterceptor.tsx:15 -msgid "Captcha verification failed. Try again." -msgstr "Η επαλήθευση Captcha απέτυχε. Δοκιμάστε ξανά." - #. Section header in the Linux audio source picker. Lists capture-target options (entire system / specific apps). #: src/features/voice/components/AudioSourcePickerLinux.tsx:50 msgid "Capture" @@ -7398,10 +7383,6 @@ msgstr "Έλεγχος πρόσβασης..." msgid "Checking screen recording permission..." msgstr "Έλεγχος της άδειας εγγραφής οθόνης..." -#: src/features/auth/components/AltchaVerification.tsx:62 -msgid "Checking your browser. This takes a few seconds." -msgstr "Ελέγχουμε το πρόγραμμα περιήγησής σας. Αυτό διαρκεί λίγα δευτερόλεπτα." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -7571,11 +7552,6 @@ msgstr "Επιλέξτε Αρχείο, έπειτα Προσθήκη στο Dock msgid "Choose friends to message." msgstr "Επιλέξτε φίλους για αποστολή μηνύματος." -#. Setup wizard body for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:989 -msgid "Choose hCaptcha or Cloudflare Turnstile for signup challenges." -msgstr "Επιλέξτε hCaptcha ή Cloudflare Turnstile για τους ελέγχους ασφαλείας κατά την εγγραφή." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:455 msgid "Choose how chat moves after you send a message" @@ -7982,17 +7958,17 @@ msgid "Clear selection" msgstr "Κατάργηση επιλογής" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:88 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:87 msgid "Clear trust all setting" msgstr "Εκκαθάριση ρύθμισης \"Να εμπιστεύεστε πάντα\"" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:63 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:62 msgid "Clear trusted domains" msgstr "Εκκαθάριση αξιόπιστων τομέων" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:96 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:95 msgid "Clear trusted domains ({trustedDomainsCount})" msgstr "Εκκαθάριση αξιόπιστων τομέων ({trustedDomainsCount})" @@ -8002,7 +7978,7 @@ msgid "Clearer text" msgstr "Καθαρότερο κείμενο" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:108 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:107 msgid "Clearing trusted domains..." msgstr "Εκκαθάριση αξιόπιστων τομέων..." @@ -8100,7 +8076,7 @@ msgid "Client" msgstr "Εφαρμογή" #. Label for Bluesky OAuth client name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1057 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1031 msgid "Client name" msgstr "Όνομα πελάτη" @@ -8117,7 +8093,7 @@ msgid "Client secret regenerated. Update any code that uses the old secret." msgstr "Το μυστικό του πελάτη ανανεώθηκε. Ενημερώστε κάθε κώδικα που χρησιμοποιεί το παλιό μυστικό." #. Label for Bluesky OAuth client URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1061 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 msgid "Client URL" msgstr "URL πελάτη" @@ -8269,11 +8245,6 @@ msgstr "Κλειστά DM" msgid "Cloud upload" msgstr "Αποστολή στο cloud" -#. Cloudflare Turnstile provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1014 -msgid "Cloudflare Turnstile" -msgstr "Cloudflare Turnstile" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:58 msgid "Coal" @@ -8669,7 +8640,7 @@ msgstr "Όνομα κοινότητας" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:126 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:125 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:113 msgid "Community nickname" msgstr "Ψευδώνυμο κοινότητας" @@ -8722,7 +8693,7 @@ msgid "Community profile" msgstr "Προφίλ κοινότητας" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:73 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:72 msgid "Community profile updated" msgstr "Το προφίλ κοινότητας ενημερώθηκε" @@ -8880,7 +8851,7 @@ msgid "Configure keyboard shortcuts" msgstr "Διαμόρφωση συντομεύσεων πληκτρολογίου" #. Option for configuring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:961 +#: src/features/app/components/setup/SetupWizardSteps.tsx:954 msgid "Configure now" msgstr "Ρύθμιση τώρα" @@ -12341,7 +12312,7 @@ msgstr "Αποσύνδεση από το {channel}" msgid "Disconnect from voice" msgstr "Αποσύνδεση από τη φωνητική συνομιλία" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:261 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:243 msgid "Disconnect socket" msgstr "Αποσύνδεση socket" @@ -12479,7 +12450,7 @@ msgstr "Λειτουργία εμφάνισης" #. Short label in the inputs tab. Keep it concise. #. Short label in the my profile tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:22 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:138 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:137 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:61 msgid "Display name" msgstr "Όνομα εμφάνισης" @@ -12625,7 +12596,7 @@ msgstr "Θέλεις να μπεις στο {communityName};" #. Label in the accessibility tab. #. Label in the my profile tab. #: src/features/user/components/modals/tabs/AccessibilityTab.tsx:54 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:146 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:145 msgid "Doc, I'm from the future. I came here in a time machine that you invented. Now, I need your help to get back to the year 1985." msgstr "Γιατρέ, έρχομαι από το μέλλον. Ήρθα εδώ με μια χρονομηχανή που εφηύρατε εσείς. Τώρα, χρειάζομαι τη βοήθειά σας για να επιστρέψω στο έτος 1985." @@ -13262,7 +13233,7 @@ msgid "Edit your messages above or below" msgstr "Επεξεργασία των μηνυμάτων σας από πάνω ή από κάτω" #. Button or menu action label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:93 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:92 msgid "Edit your profile appearance and see a live preview" msgstr "Επεξεργαστείτε την εμφάνιση του προφίλ σας και δείτε μια ζωντανή προεπισκόπηση" @@ -13330,7 +13301,7 @@ msgid "Email changed" msgstr "Το email άλλαξε" #. Setup wizard title for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:993 +#: src/features/app/components/setup/SetupWizardSteps.tsx:978 msgid "Email delivery" msgstr "Παράδοση email" @@ -13635,7 +13606,7 @@ msgid "Enable beta feature" msgstr "Ενεργοποίηση λειτουργίας beta" #. Label for enabling Bluesky OAuth in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1053 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1027 msgid "Enable Bluesky OAuth" msgstr "Ενεργοποίηση OAuth του Bluesky" @@ -13668,7 +13639,7 @@ msgid "Enable developer mode" msgstr "Ενεργοποίηση λειτουργίας προγραμματιστή" #. Label for enabling SMTP email delivery in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1021 +#: src/features/app/components/setup/SetupWizardSteps.tsx:995 msgid "Enable email delivery" msgstr "Ενεργοποίηση παράδοσης email" @@ -14705,7 +14676,7 @@ msgid "Failed to ban member. Try again." msgstr "Αποτυχία αποκλεισμού μέλους. Δοκιμάστε ξανά." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:59 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:58 msgid "Failed to clear trusted domains." msgstr "Αποτυχία εκκαθάρισης αξιόπιστων τομέων." @@ -14762,7 +14733,7 @@ msgid "Failed to enable camera." msgstr "Αποτυχία ενεργοποίησης κάμερας." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:42 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:41 msgid "Failed to forget authorized IPs. Try again." msgstr "Αποτυχία κατάργησης εξουσιοδοτημένων IP. Δοκιμάστε ξανά." @@ -14907,7 +14878,7 @@ msgid "Failed to resend verification code. Try again later." msgstr "Αποτυχία επανάληψης αποστολής κωδικού επαλήθευσης. Δοκιμάστε ξανά αργότερα." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:75 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:74 msgid "Failed to reset premium state." msgstr "Αποτυχία επαναφοράς της κατάστασης premium." @@ -15581,7 +15552,7 @@ msgstr "Εξαναγκασμός σκελετού φόρτωσης" msgid "Force mature media" msgstr "Εξαναγκασμός εμφάνισης περιεχομένου ενηλίκων" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:276 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:258 msgid "Force move to AFK channel" msgstr "Αναγκαστική μετακίνηση στο κανάλι AFK" @@ -15640,7 +15611,7 @@ msgid "Forced off" msgstr "Αναγκαστική απενεργοποίηση" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:46 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:45 msgid "Forget authorized IPs" msgstr "Κατάργηση εξουσιοδοτημένων IP" @@ -15650,7 +15621,7 @@ msgid "Forget subscriptions" msgstr "Κατάργηση συνδρομών" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:104 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:103 msgid "Forgetting authorized IPs..." msgstr "Κατάργηση εξουσιοδοτημένων IP..." @@ -15907,12 +15878,12 @@ msgid "from <0>{0}" msgstr "από <0>{0}" #. Label for SMTP from email input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1025 +#: src/features/app/components/setup/SetupWizardSteps.tsx:999 msgid "From email" msgstr "Διεύθυνση email αποστολέα" #. Label for SMTP from name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1029 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1003 msgid "From name" msgstr "Όνομα αποστολέα" @@ -16204,7 +16175,7 @@ msgid "GIF preview" msgstr "Προεπισκόπηση GIF" #. Setup wizard title for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:969 +#: src/features/app/components/setup/SetupWizardSteps.tsx:962 msgid "GIF search" msgstr "Αναζήτηση GIF" @@ -16853,21 +16824,12 @@ msgstr "Έχετε κωδικό δώρου; Εξαργυρώστε τον για msgid "Having fun?" msgstr "Περνάς καλά;" -#: src/features/auth/components/modals/CaptchaModal.tsx:175 -msgid "Having issues? Try hCaptcha instead" -msgstr "Αντιμετωπίζετε προβλήματα; Δοκιμάστε το hCaptcha" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:63 msgctxt "us-state" msgid "Hawaii" msgstr "Χαβάη" -#. hCaptcha provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1013 -msgid "hCaptcha" -msgstr "hCaptcha" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:238 msgid "HD" @@ -19768,7 +19730,7 @@ msgid "Logo" msgstr "Λογότυπο" #. Label for Bluesky OAuth logo URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1065 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1039 msgid "Logo URL" msgstr "Διεύθυνση URL λογότυπου" @@ -22941,7 +22903,7 @@ msgid "No tokens match \"{searchQuery}\"." msgstr "Δεν βρέθηκαν διακριτικά που να ταιριάζουν με το \"{searchQuery}\"." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:92 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:91 msgid "No trusted domains" msgstr "Δεν υπάρχουν αξιόπιστοι τομείς" @@ -23696,10 +23658,6 @@ msgstr "Άνοιγμα επιλογέα προγράμματος περιήγη msgid "Open call view" msgstr "Άνοιγμα προβολής κλήσης" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:288 -msgid "Open captcha modal" -msgstr "Άνοιγμα παραθύρου captcha" - #. Accessible label for the channel header title button in a community channel. #: src/features/channel/components/channel_header/shared.ts:14 msgid "Open channel details for {channelName}" @@ -23712,7 +23670,7 @@ msgstr "Άνοιγμα λεπτομερειών καναλιού για {channel msgid "Open chat" msgstr "Άνοιγμα συνομιλίας" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:314 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:290 msgid "Open claim account modal" msgstr "Άνοιγμα παραθύρου διεκδίκησης λογαριασμού" @@ -23944,11 +23902,11 @@ msgstr "Άνοιγμα αυτοκόλλητου στο πρόγραμμα περ msgid "Open streaming privacy settings" msgstr "Άνοιγμα ρυθμίσεων απορρήτου ροής" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:327 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:303 msgid "Open sudo verification modal" msgstr "Άνοιγμα παραθύρου επιβεβαίωσης sudo" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:342 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:318 msgid "Open system DM" msgstr "Άνοιγμα DM συστήματος" @@ -24430,7 +24388,7 @@ msgstr "Τα κλειδιά πρόσβασης απαιτούν ένα υπογ #. Generic form-field label for a password. #. Label for SMTP password input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1036 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1010 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:146 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:183 @@ -25212,7 +25170,7 @@ msgid "Popup" msgstr "Αναδυόμενο" #. Label for SMTP port input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1034 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1008 msgid "Port" msgstr "Θύρα" @@ -25338,7 +25296,7 @@ msgid "Premium since date" msgstr "Ημερομηνία έναρξης Premium" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:71 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:70 msgid "Premium state reset on the backend." msgstr "Η κατάσταση Premium επαναφέρθηκε στο backend." @@ -25608,7 +25566,7 @@ msgid "Privacy settings" msgstr "Ρυθμίσεις απορρήτου" #. Label for Bluesky OAuth privacy URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1073 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1047 msgid "Privacy URL" msgstr "Διεύθυνση URL απορρήτου" @@ -25633,7 +25591,7 @@ msgid "Private details" msgstr "Προσωπικά στοιχεία" #. Label for Bluesky OAuth private key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1081 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1055 msgid "Private key" msgstr "Ιδιωτικό κλειδί" @@ -25699,18 +25657,18 @@ msgstr "Χρώμα προφίλ" #. Settings section label for editing profile appearance and identity. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:105 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:104 #: src/features/user/components/settings_utils/section_registry/GeneralSettingsSections.ts:6 msgid "Profile customization" msgstr "Προσαρμογή προφίλ" #. Label in the my profile tab. Preserve {selectedGuildName}; it is inserted by code. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:101 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:100 msgid "Profile customization for {selectedGuildName}" msgstr "Προσαρμογή προφίλ για το {selectedGuildName}" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:97 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:96 msgid "Profile customization form" msgstr "Φόρμα προσαρμογής προφίλ" @@ -25775,7 +25733,7 @@ msgid "Profile type" msgstr "Τύπος προφίλ" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:77 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:76 msgid "Profile updated" msgstr "Το προφίλ ενημερώθηκε" @@ -25812,7 +25770,7 @@ msgstr "Εμφάνιση ειδοποίησης για νέες συσκευές #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:142 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:141 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:177 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:160 msgid "Pronouns" @@ -25842,11 +25800,6 @@ msgstr "Δώστε είτε το αναγνωριστικό χρήστη είτ msgid "Provide your full legal name for the declaration." msgstr "Δώστε το πλήρες νόμιμο όνομά σας για τη δήλωση." -#. Label for an integration provider choice. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 -msgid "Provider" -msgstr "Πάροχος" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27626,7 +27579,7 @@ msgid "Reset password" msgstr "Επαναφορά κωδικού πρόσβασης" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:79 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:78 msgid "Reset premium state" msgstr "Επαναφορά κατάστασης premium" @@ -27635,7 +27588,7 @@ msgstr "Επαναφορά κατάστασης premium" msgid "Reset slider to default value" msgstr "Επαναφορά ρυθμιστικού στην προεπιλεγμένη τιμή" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:247 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:229 msgid "Reset socket" msgstr "Επαναφορά socket" @@ -27684,7 +27637,7 @@ msgid "Reset zoom" msgstr "Επαναφορά ζουμ" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:112 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:111 msgid "Resetting premium state..." msgstr "Επαναφορά κατάστασης premium..." @@ -28315,7 +28268,7 @@ msgid "Run the instance as one community instead of many. This can only be enabl msgstr "Εκτελέστε την παρουσία ως μία κοινότητα αντί για πολλές. Αυτό μπορεί να ενεργοποιηθεί μόνο τώρα, κατά τη ρύθμιση." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:100 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:99 msgid "Runtime utilities" msgstr "Βοηθητικά προγράμματα χρόνου εκτέλεσης" @@ -29103,11 +29056,6 @@ msgstr "Πατήθηκε το δευτερεύον κουμπί." msgid "Secret" msgstr "Μυστικό" -#. Label for a CAPTCHA secret key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1020 -msgid "Secret key" -msgstr "Μυστικό κλειδί" - #. Settings search entry label. Names the settings search entry in the settings UI. #. Short label in the secrets section. Keep it concise. Keep the tone plain and specific. #: src/features/user/components/modals/tabs/applications_tab/application_detail/SecretsSection.tsx:11 @@ -29925,7 +29873,7 @@ msgid "Set up authenticator app" msgstr "Ρύθμιση εφαρμογής ελέγχου ταυτότητας" #. Option for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:953 +#: src/features/app/components/setup/SetupWizardSteps.tsx:946 msgid "Set up later" msgstr "Ρύθμιση αργότερα" @@ -30427,7 +30375,7 @@ msgstr "Εμφάνιση λίστας DM" msgid "Show just the typing indicator without avatars" msgstr "Να εμφανίζεται μόνο η ένδειξη πληκτρολόγησης χωρίς avatar" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:308 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:284 msgid "Show keyboard mode intro" msgstr "Εμφάνιση εισαγωγής λειτουργίας πληκτρολογίου" @@ -30538,7 +30486,7 @@ msgstr "Εμφάνιση Neko" msgid "Show new device alerts" msgstr "Εμφάνιση ειδοποιήσεων νέων συσκευών" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:282 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:264 msgid "Show new device modal" msgstr "Εμφάνιση παραθύρου νέας συσκευής" @@ -30820,7 +30768,7 @@ msgid "Signed-in devices" msgstr "Συνδεδεμένες συσκευές" #. Label for Bluesky OAuth signing key ID input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1077 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1051 msgid "Signing key ID" msgstr "Αναγνωριστικό κλειδιού υπογραφής" @@ -30910,11 +30858,6 @@ msgstr "Μία γραμμή" msgid "Single user (all statuses)" msgstr "Ένας χρήστης (όλες οι καταστάσεις)" -#. Label for a CAPTCHA site key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 -msgid "Site key" -msgstr "Κλειδί ιστότοπου" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:98 @@ -30964,7 +30907,7 @@ msgid "Skip the system leave notice — nobody gets pinged." msgstr "Παράλειψη του μηνύματος αποχώρησης του συστήματος. Δεν ειδοποιείται κανείς." #. Description for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:957 +#: src/features/app/components/setup/SetupWizardSteps.tsx:950 msgid "Skip this now and configure it from the admin panel." msgstr "Παράλειψη τώρα και ρύθμιση από τον πίνακα διαχείρισης." @@ -31212,17 +31155,17 @@ msgid "SMS verification is unavailable right now. Try again later or contact sup msgstr "Η επαλήθευση SMS δεν είναι διαθέσιμη αυτήν τη στιγμή. Δοκιμάστε ξανά αργότερα ή επικοινωνήστε με την υποστήριξη." #. Success message after validating SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1045 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 msgid "SMTP connection verified." msgstr "Η σύνδεση SMTP επαληθεύτηκε." #. Label for SMTP host input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1033 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1007 msgid "SMTP host" msgstr "Διακομιστής SMTP" #. Failure message after validating SMTP credentials when the server returns no error detail. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1049 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1023 msgid "SMTP validation failed." msgstr "Η επαλήθευση SMTP απέτυχε." @@ -31402,7 +31345,7 @@ msgstr "Κάτι πήγε στραβά. Δοκιμάστε ξανά αργότε #. Inline error in the web deep-link prompt when opening the desktop app fails. #. Toast error shown when the mature content check request fails unexpectedly. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:18 -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:580 +#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 #: src/features/auth/flow/DesktopDeepLinkPrompt.tsx:31 msgid "Something went wrong. Try again." msgstr "Κάτι πήγε στραβά. Δοκιμάστε ξανά." @@ -32099,6 +32042,11 @@ msgstr "Γίνεται ακόμα ευρετηρίαση — δοκιμάστε msgid "Still Neko" msgstr "Ακίνητο Neko" +#. Small toast shown only when an automatic background check before sign-in, sign-up or a similar request takes more than a couple of seconds. No user action needed. Keep it short and calm. +#: src/features/auth/altcha/CaptchaInterceptor.ts:13 +msgid "Still working on it…" +msgstr "Επεξεργασία…" + #. Stop-recording button label in the desktop voice message composer. #: src/features/voice/components/VoiceMessageComposerModal.tsx:65 msgid "Stop" @@ -33013,7 +32961,7 @@ msgid "Terms of service" msgstr "Όροι παροχής υπηρεσιών" #. Label for Bluesky OAuth terms URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1069 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1043 msgid "Terms URL" msgstr "Διεύθυνση URL όρων" @@ -33023,7 +32971,7 @@ msgid "Terrorism or violent extremism" msgstr "Τρομοκρατία ή βίαιος εξτρεμισμός" #. Button that validates SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1041 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1015 msgid "Test SMTP" msgstr "Δοκιμή SMTP" @@ -33800,7 +33748,7 @@ msgid "This clears quick CSS, imported themes, uploaded assets, and local file r msgstr "Αυτό εκκαθαρίζει το γρήγορο CSS, τα εισαγόμενα θέματα, τα μεταφορτωμένα στοιχεία και τις τοπικές αναφορές αρχείων σε αυτήν τη συσκευή." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:83 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:82 msgid "This clears your backend premium state entirely, including premium type, billing metadata, and override flags." msgstr "Αυτό διαγράφει εντελώς την κατάσταση premium στο backend σας, μαζί με τον τύπο premium, τα μεταδεδομένα χρέωσης και τα flags παράκαμψης." @@ -34200,7 +34148,7 @@ msgid "This message no longer exists." msgstr "Αυτό το μήνυμα δεν υπάρχει πλέον." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:130 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:129 msgid "This nickname will only be visible in this community" msgstr "Αυτό το ψευδώνυμο θα είναι ορατό μόνο σε αυτήν την κοινότητα" @@ -34277,12 +34225,12 @@ msgid "This removes all custom CSS overrides. Theme files in your library are no msgstr "Αυτό καταργεί όλες τις προσαρμοσμένες παρακάμψεις CSS. Τα αρχεία θέματος στη βιβλιοθήκη σας δεν επηρεάζονται." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:50 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:49 msgid "This removes all previously authorized IP addresses on your account. The next login from any IP will require email verification." msgstr "Αυτό καταργεί όλες τις διευθύνσεις IP που είχαν εξουσιοδοτηθεί προηγουμένως στον λογαριασμό σας. Η επόμενη σύνδεση από οποιαδήποτε IP θα απαιτεί επαλήθευση μέσω email." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:67 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:66 msgid "This removes all trusted domains. You will see the external link warning for all domains again." msgstr "Αυτό καταργεί όλα τα αξιόπιστα domain. Θα βλέπετε ξανά την προειδοποίηση εξωτερικού συνδέσμου για όλα τα domain." @@ -34949,7 +34897,7 @@ msgstr "Οι αλλαγές στο εικονίδιο της περιοχής ε msgid "Trending GIFs" msgstr "Δημοφιλή GIF" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:383 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:359 msgid "Trigger React crash" msgstr "Πρόκληση σφάλματος React" @@ -35008,7 +34956,7 @@ msgid "Trusted domains" msgstr "Αξιόπιστοι τομείς" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:55 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:54 msgid "Trusted domains cleared." msgstr "Οι αξιόπιστοι τομείς διαγράφηκαν." @@ -35054,7 +35002,6 @@ msgid "Try a different variable name or clear the search." msgstr "Δοκιμάστε ένα διαφορετικό όνομα μεταβλητής ή διαγράψτε την αναζήτηση." #. Generic action label for retrying a failed or interrupted operation. -#: src/features/auth/components/AltchaVerification.tsx:53 #: src/features/auth/flow/AuthRouteLoadError.tsx:22 #: src/features/i18n/utils/CommonMessageDescriptors.ts:75 msgid "Try again" @@ -35132,10 +35079,6 @@ msgstr "Δοκιμάστε κλειδί ασφαλείας / κλειδί πρό msgid "Try sending your message again." msgstr "Δοκιμάστε να στείλετε ξανά το μήνυμά σας." -#: src/features/auth/components/modals/CaptchaModal.tsx:177 -msgid "Try Turnstile instead" -msgstr "Δοκιμάστε το Turnstile αντ' αυτού" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:135 msgid "TTS" @@ -36890,7 +36833,7 @@ msgid "Use this when troubleshooting the client or collecting logs. It may add v msgstr "Χρησιμοποιήστε το για την αντιμετώπιση προβλημάτων του προγράμματος-πελάτη ή τη συλλογή αρχείων καταγραφής. Ενδέχεται να προσθέσει λεπτομερή μηνύματα στην κονσόλα του προγράμματος περιήγησης για τον τρέχοντα πελάτη." #. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1037 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1011 msgid "Use TLS" msgstr "Χρήση TLS" @@ -37056,7 +36999,7 @@ msgstr "Ένταση χρήστη" #. Generic form-field label for a username. #. Label for SMTP username input. #. Settings search entry label. Also used as a search synonym in the settings search bar. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 #: src/features/i18n/utils/CommonMessageDescriptors.ts:572 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:218 #: src/features/user/components/modals/tabs/my_profile_tab/MyProfileTabUsernameSection.tsx:56 @@ -37337,11 +37280,6 @@ msgstr "Επαλήθευση αριθμού τηλεφώνου" msgid "Verify phone number form" msgstr "Φόρμα επαλήθευσης αριθμού τηλεφώνου" -#. Short label in the authentication captcha modal. Keep the tone plain and specific. -#: src/features/auth/components/modals/CaptchaModal.tsx:17 -msgid "Verify you're human" -msgstr "Επιβεβαιώστε ότι είστε άνθρωπος" - #. Title of the error modal shown when an unverified account tries to start a DM. #. Title shown when an unverified account cannot start a DM or group DM. #: src/features/app/components/alerts/DmActionErrorModal.tsx:40 @@ -37369,22 +37307,22 @@ msgid "Verify your email before adding an authenticator app." msgstr "Επαληθεύστε το email σας πριν προσθέσετε μια εφαρμογή ελέγχου ταυτότητας." #. Description text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:117 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:116 msgid "Verify your email before changing your community nickname, avatar, banner, bio, pronouns, or accent color." msgstr "Επαληθεύστε το email σας πριν αλλάξετε το ψευδώνυμο κοινότητας, το avatar, το banner, το βιογραφικό, τις αντωνυμίες ή το χρώμα έμφασης." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:121 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:120 msgid "Verify your email before changing your username, display name, avatar, banner, bio, pronouns, time zone, or {premiumProductName} badge privacy." msgstr "Επαληθεύστε το email σας πριν αλλάξετε το όνομα χρήστη, το όνομα εμφάνισης, το avatar, το banner, το βιογραφικό, τις αντωνυμίες, τη ζώνη ώρας ή το απόρρητο του σήματος {premiumProductName}." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:85 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:84 msgid "Verify your email before editing this community profile. You can still preview it here." msgstr "Επαληθεύστε το email σας πριν επεξεργαστείτε αυτό το προφίλ κοινότητας. Μπορείτε ακόμα να το δείτε εδώ." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:89 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:88 msgid "Verify your email before editing your profile. You can still preview it here." msgstr "Επαληθεύστε το email σας πριν επεξεργαστείτε το προφίλ σας. Μπορείτε ακόμα να το δείτε εδώ." @@ -37416,12 +37354,12 @@ msgid "Verify your email to continue using {productName}." msgstr "Επαληθεύστε το email σας για να συνεχίσετε να χρησιμοποιείτε το {productName}." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:109 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:108 msgid "Verify your email to edit this community profile" msgstr "Επαληθεύστε το email σας για να επεξεργαστείτε αυτό το προφίλ κοινότητας" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:113 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:112 msgid "Verify your email to edit your profile" msgstr "Επαληθεύστε το email σας για να επεξεργαστείτε το προφίλ σας" @@ -38398,10 +38336,6 @@ msgstr "Μειώσαμε την τιμή του {premiumProductName} στη Βρ msgid "We need one verification step before you continue. This helps protect accounts and keep spam off {productName}." msgstr "Χρειάζεται ένα βήμα επαλήθευσης πριν συνεχίσετε. Αυτό βοηθά στην προστασία των λογαριασμών και στην αποφυγή ανεπιθύμητων μηνυμάτων στο {productName}." -#: src/features/auth/components/modals/CaptchaModal.tsx:128 -msgid "We need to make sure you're not a bot. Complete the verification below." -msgstr "Πρέπει να βεβαιωθούμε ότι δεν είστε ρομπότ. Ολοκληρώστε την παρακάτω επαλήθευση." - #. Required-action modal intro text when both email and phone verification are required. #: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:216 msgid "We need two verification steps before you continue. We will show one step at a time." @@ -39256,7 +39190,7 @@ msgid "You can't befriend yourself" msgstr "Δεν μπορείτε να κάνετε φίλο τον εαυτό σας" #. Label in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:134 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:133 msgid "You can't change your nickname here" msgstr "Δεν μπορείτε να αλλάξετε το ψευδώνυμό σας εδώ" @@ -39506,7 +39440,7 @@ msgid "You have unsaved changes." msgstr "Έχετε μη αποθηκευμένες αλλαγές." #. Warning text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:81 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:80 msgid "You have unsaved changes. Save or reset before leaving." msgstr "Έχετε μη αποθηκευμένες αλλαγές. Αποθηκεύστε ή επαναφέρετε πριν φύγετε." @@ -40031,10 +39965,6 @@ msgstr "Η ενέργειά σας δεν ολοκληρώθηκε επειδή msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Η αίτησή σας εκκρεμεί για έλεγχο. Μπορείτε ακόμα να ενημερώσετε τα στοιχεία της καταχώρισής σας ή να αποσύρετε την αίτηση." -#: src/features/auth/components/AltchaVerification.tsx:50 -msgid "Your browser couldn't finish the check." -msgstr "Ο περιηγητής σας δεν μπόρεσε να ολοκληρώσει τον έλεγχο." - #. Body of the browser-audio-required modal explaining why the user must click before audio can play. #: src/features/voice/components/modals/AudioPlaybackPermissionModal.tsx:12 msgid "Your browser requires user interaction before audio can be played. Click the button below to enable voice chat." @@ -40386,7 +40316,7 @@ msgid "YouTube enrichment" msgstr "Εμπλουτισμός YouTube" #. Setup wizard title for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:977 +#: src/features/app/components/setup/SetupWizardSteps.tsx:970 msgid "YouTube previews" msgstr "Προεπισκοπήσεις YouTube" diff --git a/fluxer_app/src/features/i18n/locales/en-GB/messages.po b/fluxer_app/src/features/i18n/locales/en-GB/messages.po index 2f9285f8c..4ecf826b5 100644 --- a/fluxer_app/src/features/i18n/locales/en-GB/messages.po +++ b/fluxer_app/src/features/i18n/locales/en-GB/messages.po @@ -2395,11 +2395,6 @@ msgstr "60 seconds" msgid "7 days" msgstr "7 days" -#. Required-action error when the API requires a captcha for phone verification. -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 -msgid "A browser check is required before phone verification. Try again from the sign-in page or contact support." -msgstr "A browser check is required before phone verification. Try again from the sign-in page or contact support." - #. Hint shown beside in:. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:77 msgid "a channel" @@ -2928,7 +2923,7 @@ msgid "Add a friend to get started." msgstr "Add a friend to get started." #. Setup wizard body for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:973 +#: src/features/app/components/setup/SetupWizardSteps.tsx:966 msgid "Add a Klipy API key to enable GIF search at runtime." msgstr "Add a Klipy API key to enable GIF search at runtime." @@ -2965,7 +2960,7 @@ msgid "Add a working email" msgstr "Add a working email" #. Setup wizard body for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:981 +#: src/features/app/components/setup/SetupWizardSteps.tsx:974 msgid "Add a YouTube Data API key to enrich YouTube links." msgstr "Add a YouTube Data API key to enrich YouTube links." @@ -3011,7 +3006,7 @@ msgid "Add another reaction" msgstr "Add another reaction" #. Setup wizard body for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1005 +#: src/features/app/components/setup/SetupWizardSteps.tsx:990 msgid "Add Bluesky OAuth client metadata and a signing key." msgstr "Add Bluesky OAuth client metadata and a signing key." @@ -3161,7 +3156,7 @@ msgid "Add shortcut" msgstr "Add shortcut" #. Setup wizard body for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:997 +#: src/features/app/components/setup/SetupWizardSteps.tsx:982 msgid "Add SMTP credentials so the instance can send verification and notification email." msgstr "Add SMTP credentials so the instance can send verification and notification email." @@ -3188,7 +3183,7 @@ msgid "Add stream" msgstr "Add stream" #. Description for configuring an optional setup wizard integration now. -#: src/features/app/components/setup/SetupWizardSteps.tsx:965 +#: src/features/app/components/setup/SetupWizardSteps.tsx:958 msgid "Add the credentials during setup." msgstr "Add the credentials during setup." @@ -3954,7 +3949,7 @@ msgid "An invalid status was provided. You can now close this tab and return to msgstr "An invalid status was provided. You can now close this tab and return to the app." #. Short label in the authentication auth form. Keep the tone plain and specific. -#: src/features/auth/hooks/useAuthForm.ts:13 +#: src/features/auth/hooks/useAuthForm.ts:12 msgid "An unexpected error occurred" msgstr "An unexpected error occurred" @@ -4262,7 +4257,7 @@ msgid "Anyone can request an account, but an administrator must approve it." msgstr "Anyone can request an account, but an administrator must approve it." #. Label for an integration API key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1018 +#: src/features/app/components/setup/SetupWizardSteps.tsx:994 msgid "API key" msgstr "API key" @@ -4958,7 +4953,7 @@ msgid "Authorized apps" msgstr "Authorised apps" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:38 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:37 msgid "Authorized IPs cleared. New logins will require email verification." msgstr "Authorised IPs cleared. New logins will require email verification." @@ -5730,7 +5725,7 @@ msgid "Bluesky connections" msgstr "Bluesky connections" #. Setup wizard title for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1001 +#: src/features/app/components/setup/SetupWizardSteps.tsx:986 msgid "Bluesky OAuth" msgstr "Bluesky OAuth" @@ -5897,11 +5892,6 @@ msgstr "Bot permissions cannot be negative." msgid "Bot profile" msgstr "Bot profile" -#. Setup wizard title for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:985 -msgid "Bot protection" -msgstr "Bot protection" - #. Short label in the authentication OAUTH scopes step. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/OAuthScopesStep.tsx:20 msgid "Bot scope requested" @@ -6554,11 +6544,6 @@ msgstr "Cannot be edited" msgid "Cannot delete account" msgstr "Cannot delete account" -#. Toast error shown when captcha verification fails inside the auth captcha interceptor. -#: src/features/auth/components/CaptchaInterceptor.tsx:15 -msgid "Captcha verification failed. Try again." -msgstr "Captcha verification failed. Try again." - #. Section header in the Linux audio source picker. Lists capture-target options (entire system / specific apps). #: src/features/voice/components/AudioSourcePickerLinux.tsx:50 msgid "Capture" @@ -7398,10 +7383,6 @@ msgstr "Checking access..." msgid "Checking screen recording permission..." msgstr "Checking screen recording permission..." -#: src/features/auth/components/AltchaVerification.tsx:62 -msgid "Checking your browser. This takes a few seconds." -msgstr "Checking your browser. This takes a few seconds." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -7571,11 +7552,6 @@ msgstr "Choose File, then Add to Dock." msgid "Choose friends to message." msgstr "Choose friends to message." -#. Setup wizard body for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:989 -msgid "Choose hCaptcha or Cloudflare Turnstile for signup challenges." -msgstr "Choose hCaptcha or Cloudflare Turnstile for signup challenges." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:455 msgid "Choose how chat moves after you send a message" @@ -7982,17 +7958,17 @@ msgid "Clear selection" msgstr "Clear selection" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:88 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:87 msgid "Clear trust all setting" msgstr "Clear trust all setting" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:63 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:62 msgid "Clear trusted domains" msgstr "Clear trusted domains" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:96 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:95 msgid "Clear trusted domains ({trustedDomainsCount})" msgstr "Clear trusted domains ({trustedDomainsCount})" @@ -8002,7 +7978,7 @@ msgid "Clearer text" msgstr "Clearer text" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:108 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:107 msgid "Clearing trusted domains..." msgstr "Clearing trusted domains..." @@ -8100,7 +8076,7 @@ msgid "Client" msgstr "Client" #. Label for Bluesky OAuth client name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1057 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1031 msgid "Client name" msgstr "Client name" @@ -8117,7 +8093,7 @@ msgid "Client secret regenerated. Update any code that uses the old secret." msgstr "Client secret regenerated. Update any code that uses the old secret." #. Label for Bluesky OAuth client URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1061 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 msgid "Client URL" msgstr "Client URL" @@ -8269,11 +8245,6 @@ msgstr "Closed DMs" msgid "Cloud upload" msgstr "Cloud upload" -#. Cloudflare Turnstile provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1014 -msgid "Cloudflare Turnstile" -msgstr "Cloudflare Turnstile" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:58 msgid "Coal" @@ -8669,7 +8640,7 @@ msgstr "Community name" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:126 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:125 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:113 msgid "Community nickname" msgstr "Community nickname" @@ -8722,7 +8693,7 @@ msgid "Community profile" msgstr "Community profile" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:73 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:72 msgid "Community profile updated" msgstr "Community profile updated" @@ -8880,7 +8851,7 @@ msgid "Configure keyboard shortcuts" msgstr "Configure keyboard shortcuts" #. Option for configuring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:961 +#: src/features/app/components/setup/SetupWizardSteps.tsx:954 msgid "Configure now" msgstr "Configure now" @@ -12341,7 +12312,7 @@ msgstr "Disconnect from {channel}" msgid "Disconnect from voice" msgstr "Disconnect from voice" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:261 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:243 msgid "Disconnect socket" msgstr "Disconnect socket" @@ -12479,7 +12450,7 @@ msgstr "Display mode" #. Short label in the inputs tab. Keep it concise. #. Short label in the my profile tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:22 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:138 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:137 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:61 msgid "Display name" msgstr "Display name" @@ -12625,7 +12596,7 @@ msgstr "Do you want to join {communityName}?" #. Label in the accessibility tab. #. Label in the my profile tab. #: src/features/user/components/modals/tabs/AccessibilityTab.tsx:54 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:146 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:145 msgid "Doc, I'm from the future. I came here in a time machine that you invented. Now, I need your help to get back to the year 1985." msgstr "Doc, I'm from the future. I came here in a time machine that you invented. Now, I need your help to get back to the year 1985." @@ -13263,7 +13234,7 @@ msgid "Edit your messages above or below" msgstr "Edit your messages above or below" #. Button or menu action label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:93 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:92 msgid "Edit your profile appearance and see a live preview" msgstr "Edit your profile appearance and see a live preview" @@ -13331,7 +13302,7 @@ msgid "Email changed" msgstr "Email changed" #. Setup wizard title for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:993 +#: src/features/app/components/setup/SetupWizardSteps.tsx:978 msgid "Email delivery" msgstr "Email delivery" @@ -13636,7 +13607,7 @@ msgid "Enable beta feature" msgstr "Enable beta feature" #. Label for enabling Bluesky OAuth in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1053 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1027 msgid "Enable Bluesky OAuth" msgstr "Enable Bluesky OAuth" @@ -13669,7 +13640,7 @@ msgid "Enable developer mode" msgstr "Enable developer mode" #. Label for enabling SMTP email delivery in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1021 +#: src/features/app/components/setup/SetupWizardSteps.tsx:995 msgid "Enable email delivery" msgstr "Enable email delivery" @@ -14706,7 +14677,7 @@ msgid "Failed to ban member. Try again." msgstr "Failed to ban member. Try again." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:59 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:58 msgid "Failed to clear trusted domains." msgstr "Failed to clear trusted domains." @@ -14763,7 +14734,7 @@ msgid "Failed to enable camera." msgstr "Failed to enable camera." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:42 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:41 msgid "Failed to forget authorized IPs. Try again." msgstr "Failed to forget authorised IPs. Try again." @@ -14908,7 +14879,7 @@ msgid "Failed to resend verification code. Try again later." msgstr "Failed to resend verification code. Try again later." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:75 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:74 msgid "Failed to reset premium state." msgstr "Failed to reset premium state." @@ -15582,7 +15553,7 @@ msgstr "Force loading skeleton" msgid "Force mature media" msgstr "Force mature media" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:276 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:258 msgid "Force move to AFK channel" msgstr "Force move to AFK channel" @@ -15641,7 +15612,7 @@ msgid "Forced off" msgstr "Forced off" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:46 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:45 msgid "Forget authorized IPs" msgstr "Forget authorised IPs" @@ -15651,7 +15622,7 @@ msgid "Forget subscriptions" msgstr "Forget subscriptions" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:104 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:103 msgid "Forgetting authorized IPs..." msgstr "Forgetting authorised IPs..." @@ -15908,12 +15879,12 @@ msgid "from <0>{0}" msgstr "from <0>{0}" #. Label for SMTP from email input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1025 +#: src/features/app/components/setup/SetupWizardSteps.tsx:999 msgid "From email" msgstr "From email" #. Label for SMTP from name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1029 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1003 msgid "From name" msgstr "From name" @@ -16205,7 +16176,7 @@ msgid "GIF preview" msgstr "GIF preview" #. Setup wizard title for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:969 +#: src/features/app/components/setup/SetupWizardSteps.tsx:962 msgid "GIF search" msgstr "GIF search" @@ -16854,21 +16825,12 @@ msgstr "Have a gift code? Redeem it to unlock {PREMIUM_PRODUCT_NAME}." msgid "Having fun?" msgstr "Having fun?" -#: src/features/auth/components/modals/CaptchaModal.tsx:175 -msgid "Having issues? Try hCaptcha instead" -msgstr "Having issues? Try hCaptcha instead" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:63 msgctxt "us-state" msgid "Hawaii" msgstr "Hawaii" -#. hCaptcha provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1013 -msgid "hCaptcha" -msgstr "hCaptcha" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:238 msgid "HD" @@ -19769,7 +19731,7 @@ msgid "Logo" msgstr "Logo" #. Label for Bluesky OAuth logo URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1065 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1039 msgid "Logo URL" msgstr "Logo URL" @@ -22942,7 +22904,7 @@ msgid "No tokens match \"{searchQuery}\"." msgstr "No tokens match \"{searchQuery}\"." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:92 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:91 msgid "No trusted domains" msgstr "No trusted domains" @@ -23697,10 +23659,6 @@ msgstr "Open browser picker" msgid "Open call view" msgstr "Open call view" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:288 -msgid "Open captcha modal" -msgstr "Open captcha modal" - #. Accessible label for the channel header title button in a community channel. #: src/features/channel/components/channel_header/shared.ts:14 msgid "Open channel details for {channelName}" @@ -23713,7 +23671,7 @@ msgstr "Open channel details for {channelName}" msgid "Open chat" msgstr "Open chat" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:314 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:290 msgid "Open claim account modal" msgstr "Open claim account modal" @@ -23945,11 +23903,11 @@ msgstr "Open sticker in browser" msgid "Open streaming privacy settings" msgstr "Open streaming privacy settings" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:327 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:303 msgid "Open sudo verification modal" msgstr "Open sudo verification modal" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:342 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:318 msgid "Open system DM" msgstr "Open system DM" @@ -24431,7 +24389,7 @@ msgstr "Passkeys require a signed macOS bundle with a valid application identifi #. Generic form-field label for a password. #. Label for SMTP password input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1036 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1010 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:146 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:183 @@ -25213,7 +25171,7 @@ msgid "Popup" msgstr "Popup" #. Label for SMTP port input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1034 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1008 msgid "Port" msgstr "Port" @@ -25339,7 +25297,7 @@ msgid "Premium since date" msgstr "Premium since date" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:71 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:70 msgid "Premium state reset on the backend." msgstr "Premium state reset on the backend." @@ -25609,7 +25567,7 @@ msgid "Privacy settings" msgstr "Privacy settings" #. Label for Bluesky OAuth privacy URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1073 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1047 msgid "Privacy URL" msgstr "Privacy URL" @@ -25634,7 +25592,7 @@ msgid "Private details" msgstr "Private details" #. Label for Bluesky OAuth private key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1081 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1055 msgid "Private key" msgstr "Private key" @@ -25700,18 +25658,18 @@ msgstr "Profile colour" #. Settings section label for editing profile appearance and identity. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:105 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:104 #: src/features/user/components/settings_utils/section_registry/GeneralSettingsSections.ts:6 msgid "Profile customization" msgstr "Profile customisation" #. Label in the my profile tab. Preserve {selectedGuildName}; it is inserted by code. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:101 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:100 msgid "Profile customization for {selectedGuildName}" msgstr "Profile customisation for {selectedGuildName}" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:97 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:96 msgid "Profile customization form" msgstr "Profile customisation form" @@ -25776,7 +25734,7 @@ msgid "Profile type" msgstr "Profile type" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:77 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:76 msgid "Profile updated" msgstr "Profile updated" @@ -25813,7 +25771,7 @@ msgstr "Prompt for new audio devices" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:142 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:141 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:177 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:160 msgid "Pronouns" @@ -25843,11 +25801,6 @@ msgstr "Provide either a user ID or a username for the person you are reporting. msgid "Provide your full legal name for the declaration." msgstr "Provide your full legal name for the declaration." -#. Label for an integration provider choice. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 -msgid "Provider" -msgstr "Provider" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27628,7 +27581,7 @@ msgid "Reset password" msgstr "Reset password" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:79 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:78 msgid "Reset premium state" msgstr "Reset premium state" @@ -27637,7 +27590,7 @@ msgstr "Reset premium state" msgid "Reset slider to default value" msgstr "Reset slider to default value" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:247 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:229 msgid "Reset socket" msgstr "Reset socket" @@ -27686,7 +27639,7 @@ msgid "Reset zoom" msgstr "Reset zoom" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:112 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:111 msgid "Resetting premium state..." msgstr "Resetting premium state..." @@ -28317,7 +28270,7 @@ msgid "Run the instance as one community instead of many. This can only be enabl msgstr "Run the instance as one community instead of many. This can only be enabled now, during setup." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:100 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:99 msgid "Runtime utilities" msgstr "Runtime utilities" @@ -29105,11 +29058,6 @@ msgstr "Secondary button clicked." msgid "Secret" msgstr "Secret" -#. Label for a CAPTCHA secret key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1020 -msgid "Secret key" -msgstr "Secret key" - #. Settings search entry label. Names the settings search entry in the settings UI. #. Short label in the secrets section. Keep it concise. Keep the tone plain and specific. #: src/features/user/components/modals/tabs/applications_tab/application_detail/SecretsSection.tsx:11 @@ -29927,7 +29875,7 @@ msgid "Set up authenticator app" msgstr "Set up authenticator app" #. Option for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:953 +#: src/features/app/components/setup/SetupWizardSteps.tsx:946 msgid "Set up later" msgstr "Set up later" @@ -30429,7 +30377,7 @@ msgstr "Show inline DM list" msgid "Show just the typing indicator without avatars" msgstr "Show just the typing indicator without avatars" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:308 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:284 msgid "Show keyboard mode intro" msgstr "Show keyboard mode intro" @@ -30540,7 +30488,7 @@ msgstr "Show Neko" msgid "Show new device alerts" msgstr "Show new device alerts" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:282 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:264 msgid "Show new device modal" msgstr "Show new device modal" @@ -30822,7 +30770,7 @@ msgid "Signed-in devices" msgstr "Signed-in devices" #. Label for Bluesky OAuth signing key ID input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1077 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1051 msgid "Signing key ID" msgstr "Signing key ID" @@ -30912,11 +30860,6 @@ msgstr "Single line" msgid "Single user (all statuses)" msgstr "Single user (all statuses)" -#. Label for a CAPTCHA site key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 -msgid "Site key" -msgstr "Site key" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:98 @@ -30966,7 +30909,7 @@ msgid "Skip the system leave notice — nobody gets pinged." msgstr "Skip the system leave notice — nobody gets pinged." #. Description for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:957 +#: src/features/app/components/setup/SetupWizardSteps.tsx:950 msgid "Skip this now and configure it from the admin panel." msgstr "Skip this now and configure it from the admin panel." @@ -31214,17 +31157,17 @@ msgid "SMS verification is unavailable right now. Try again later or contact sup msgstr "SMS verification is unavailable right now. Try again later or contact support." #. Success message after validating SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1045 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 msgid "SMTP connection verified." msgstr "SMTP connection verified." #. Label for SMTP host input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1033 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1007 msgid "SMTP host" msgstr "SMTP host" #. Failure message after validating SMTP credentials when the server returns no error detail. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1049 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1023 msgid "SMTP validation failed." msgstr "SMTP validation failed." @@ -31404,7 +31347,7 @@ msgstr "Something went wrong. Try again later." #. Inline error in the web deep-link prompt when opening the desktop app fails. #. Toast error shown when the mature content check request fails unexpectedly. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:18 -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:580 +#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 #: src/features/auth/flow/DesktopDeepLinkPrompt.tsx:31 msgid "Something went wrong. Try again." msgstr "Something went wrong. Try again." @@ -32101,6 +32044,12 @@ msgstr "Still indexing — check back in a moment" msgid "Still Neko" msgstr "Still Neko" +# auto-i18n: reviewed unchanged +#. Small toast shown only when an automatic background check before sign-in, sign-up or a similar request takes more than a couple of seconds. No user action needed. Keep it short and calm. +#: src/features/auth/altcha/CaptchaInterceptor.ts:13 +msgid "Still working on it…" +msgstr "Still working on it…" + #. Stop-recording button label in the desktop voice message composer. #: src/features/voice/components/VoiceMessageComposerModal.tsx:65 msgid "Stop" @@ -33015,7 +32964,7 @@ msgid "Terms of service" msgstr "Terms of service" #. Label for Bluesky OAuth terms URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1069 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1043 msgid "Terms URL" msgstr "Terms URL" @@ -33025,7 +32974,7 @@ msgid "Terrorism or violent extremism" msgstr "Terrorism or violent extremism" #. Button that validates SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1041 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1015 msgid "Test SMTP" msgstr "Test SMTP" @@ -33802,7 +33751,7 @@ msgid "This clears quick CSS, imported themes, uploaded assets, and local file r msgstr "This clears quick CSS, imported themes, uploaded assets, and local file references on this device." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:83 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:82 msgid "This clears your backend premium state entirely, including premium type, billing metadata, and override flags." msgstr "This clears your backend premium state entirely, including premium type, billing metadata, and override flags." @@ -34202,7 +34151,7 @@ msgid "This message no longer exists." msgstr "This message no longer exists." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:130 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:129 msgid "This nickname will only be visible in this community" msgstr "This nickname will only be visible in this community" @@ -34279,12 +34228,12 @@ msgid "This removes all custom CSS overrides. Theme files in your library are no msgstr "This removes all custom CSS overrides. Theme files in your library are not affected." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:50 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:49 msgid "This removes all previously authorized IP addresses on your account. The next login from any IP will require email verification." msgstr "This removes all previously authorised IP addresses on your account. The next login from any IP will require email verification." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:67 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:66 msgid "This removes all trusted domains. You will see the external link warning for all domains again." msgstr "This removes all trusted domains. You will see the external link warning for all domains again." @@ -34951,7 +34900,7 @@ msgstr "Tray icon changes only apply after a restart on Linux because the system msgid "Trending GIFs" msgstr "Trending GIFs" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:383 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:359 msgid "Trigger React crash" msgstr "Trigger React crash" @@ -35010,7 +34959,7 @@ msgid "Trusted domains" msgstr "Trusted domains" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:55 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:54 msgid "Trusted domains cleared." msgstr "Trusted domains cleared." @@ -35056,7 +35005,6 @@ msgid "Try a different variable name or clear the search." msgstr "Try a different variable name or clear the search." #. Generic action label for retrying a failed or interrupted operation. -#: src/features/auth/components/AltchaVerification.tsx:53 #: src/features/auth/flow/AuthRouteLoadError.tsx:22 #: src/features/i18n/utils/CommonMessageDescriptors.ts:75 msgid "Try again" @@ -35134,10 +35082,6 @@ msgstr "Try security key / passkey instead" msgid "Try sending your message again." msgstr "Try sending your message again." -#: src/features/auth/components/modals/CaptchaModal.tsx:177 -msgid "Try Turnstile instead" -msgstr "Try Turnstile instead" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:135 msgid "TTS" @@ -36892,7 +36836,7 @@ msgid "Use this when troubleshooting the client or collecting logs. It may add v msgstr "Use this when troubleshooting the client or collecting logs. It may add verbose messages to the browser console for the current client." #. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1037 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1011 msgid "Use TLS" msgstr "Use TLS" @@ -37058,7 +37002,7 @@ msgstr "User volume" #. Generic form-field label for a username. #. Label for SMTP username input. #. Settings search entry label. Also used as a search synonym in the settings search bar. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 #: src/features/i18n/utils/CommonMessageDescriptors.ts:572 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:218 #: src/features/user/components/modals/tabs/my_profile_tab/MyProfileTabUsernameSection.tsx:56 @@ -37339,11 +37283,6 @@ msgstr "Verify phone number" msgid "Verify phone number form" msgstr "Verify phone number form" -#. Short label in the authentication captcha modal. Keep the tone plain and specific. -#: src/features/auth/components/modals/CaptchaModal.tsx:17 -msgid "Verify you're human" -msgstr "Verify you're human" - #. Title of the error modal shown when an unverified account tries to start a DM. #. Title shown when an unverified account cannot start a DM or group DM. #: src/features/app/components/alerts/DmActionErrorModal.tsx:40 @@ -37371,22 +37310,22 @@ msgid "Verify your email before adding an authenticator app." msgstr "Verify your email before adding an authenticator app." #. Description text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:117 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:116 msgid "Verify your email before changing your community nickname, avatar, banner, bio, pronouns, or accent color." msgstr "Verify your email before changing your community nickname, avatar, banner, bio, pronouns, or accent colour." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:121 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:120 msgid "Verify your email before changing your username, display name, avatar, banner, bio, pronouns, time zone, or {premiumProductName} badge privacy." msgstr "Verify your email before changing your username, display name, avatar, banner, bio, pronouns, time zone, or {premiumProductName} badge privacy." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:85 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:84 msgid "Verify your email before editing this community profile. You can still preview it here." msgstr "Verify your email before editing this community profile. You can still preview it here." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:89 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:88 msgid "Verify your email before editing your profile. You can still preview it here." msgstr "Verify your email before editing your profile. You can still preview it here." @@ -37418,12 +37357,12 @@ msgid "Verify your email to continue using {productName}." msgstr "Verify your email to continue using {productName}." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:109 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:108 msgid "Verify your email to edit this community profile" msgstr "Verify your email to edit this community profile" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:113 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:112 msgid "Verify your email to edit your profile" msgstr "Verify your email to edit your profile" @@ -38400,10 +38339,6 @@ msgstr "We lowered the price of {premiumProductName} in Brazil. It is now {month msgid "We need one verification step before you continue. This helps protect accounts and keep spam off {productName}." msgstr "We need one verification step before you continue. This helps protect accounts and keep spam off {productName}." -#: src/features/auth/components/modals/CaptchaModal.tsx:128 -msgid "We need to make sure you're not a bot. Complete the verification below." -msgstr "We need to make sure you're not a bot. Complete the verification below." - #. Required-action modal intro text when both email and phone verification are required. #: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:216 msgid "We need two verification steps before you continue. We will show one step at a time." @@ -39258,7 +39193,7 @@ msgid "You can't befriend yourself" msgstr "You can't befriend yourself" #. Label in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:134 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:133 msgid "You can't change your nickname here" msgstr "You can't change your nickname here" @@ -39508,7 +39443,7 @@ msgid "You have unsaved changes." msgstr "You have unsaved changes." #. Warning text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:81 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:80 msgid "You have unsaved changes. Save or reset before leaving." msgstr "You have unsaved changes. Save or reset before leaving." @@ -40033,10 +39968,6 @@ msgstr "Your action could not be completed because it was flagged by our safety msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Your application is pending review. You can still update your listing details or withdraw the application." -#: src/features/auth/components/AltchaVerification.tsx:50 -msgid "Your browser couldn't finish the check." -msgstr "Your browser couldn't finish the check." - #. Body of the browser-audio-required modal explaining why the user must click before audio can play. #: src/features/voice/components/modals/AudioPlaybackPermissionModal.tsx:12 msgid "Your browser requires user interaction before audio can be played. Click the button below to enable voice chat." @@ -40388,7 +40319,7 @@ msgid "YouTube enrichment" msgstr "YouTube enrichment" #. Setup wizard title for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:977 +#: src/features/app/components/setup/SetupWizardSteps.tsx:970 msgid "YouTube previews" msgstr "YouTube previews" diff --git a/fluxer_app/src/features/i18n/locales/en-US/messages.po b/fluxer_app/src/features/i18n/locales/en-US/messages.po index 613800e2d..249607cc6 100644 --- a/fluxer_app/src/features/i18n/locales/en-US/messages.po +++ b/fluxer_app/src/features/i18n/locales/en-US/messages.po @@ -2395,11 +2395,6 @@ msgstr "60 seconds" msgid "7 days" msgstr "7 days" -#. Required-action error when the API requires a captcha for phone verification. -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 -msgid "A browser check is required before phone verification. Try again from the sign-in page or contact support." -msgstr "A browser check is required before phone verification. Try again from the sign-in page or contact support." - #. Hint shown beside in:. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:77 msgid "a channel" @@ -2928,7 +2923,7 @@ msgid "Add a friend to get started." msgstr "Add a friend to get started." #. Setup wizard body for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:973 +#: src/features/app/components/setup/SetupWizardSteps.tsx:966 msgid "Add a Klipy API key to enable GIF search at runtime." msgstr "Add a Klipy API key to enable GIF search at runtime." @@ -2965,7 +2960,7 @@ msgid "Add a working email" msgstr "Add a working email" #. Setup wizard body for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:981 +#: src/features/app/components/setup/SetupWizardSteps.tsx:974 msgid "Add a YouTube Data API key to enrich YouTube links." msgstr "Add a YouTube Data API key to enrich YouTube links." @@ -3011,7 +3006,7 @@ msgid "Add another reaction" msgstr "Add another reaction" #. Setup wizard body for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1005 +#: src/features/app/components/setup/SetupWizardSteps.tsx:990 msgid "Add Bluesky OAuth client metadata and a signing key." msgstr "Add Bluesky OAuth client metadata and a signing key." @@ -3161,7 +3156,7 @@ msgid "Add shortcut" msgstr "Add shortcut" #. Setup wizard body for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:997 +#: src/features/app/components/setup/SetupWizardSteps.tsx:982 msgid "Add SMTP credentials so the instance can send verification and notification email." msgstr "Add SMTP credentials so the instance can send verification and notification email." @@ -3188,7 +3183,7 @@ msgid "Add stream" msgstr "Add stream" #. Description for configuring an optional setup wizard integration now. -#: src/features/app/components/setup/SetupWizardSteps.tsx:965 +#: src/features/app/components/setup/SetupWizardSteps.tsx:958 msgid "Add the credentials during setup." msgstr "Add the credentials during setup." @@ -3954,7 +3949,7 @@ msgid "An invalid status was provided. You can now close this tab and return to msgstr "An invalid status was provided. You can now close this tab and return to the app." #. Short label in the authentication auth form. Keep the tone plain and specific. -#: src/features/auth/hooks/useAuthForm.ts:13 +#: src/features/auth/hooks/useAuthForm.ts:12 msgid "An unexpected error occurred" msgstr "An unexpected error occurred" @@ -4262,7 +4257,7 @@ msgid "Anyone can request an account, but an administrator must approve it." msgstr "Anyone can request an account, but an administrator must approve it." #. Label for an integration API key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1018 +#: src/features/app/components/setup/SetupWizardSteps.tsx:994 msgid "API key" msgstr "API key" @@ -4958,7 +4953,7 @@ msgid "Authorized apps" msgstr "Authorized apps" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:38 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:37 msgid "Authorized IPs cleared. New logins will require email verification." msgstr "Authorized IPs cleared. New logins will require email verification." @@ -5730,7 +5725,7 @@ msgid "Bluesky connections" msgstr "Bluesky connections" #. Setup wizard title for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1001 +#: src/features/app/components/setup/SetupWizardSteps.tsx:986 msgid "Bluesky OAuth" msgstr "Bluesky OAuth" @@ -5897,11 +5892,6 @@ msgstr "Bot permissions cannot be negative." msgid "Bot profile" msgstr "Bot profile" -#. Setup wizard title for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:985 -msgid "Bot protection" -msgstr "Bot protection" - #. Short label in the authentication OAUTH scopes step. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/OAuthScopesStep.tsx:20 msgid "Bot scope requested" @@ -6554,11 +6544,6 @@ msgstr "Cannot be edited" msgid "Cannot delete account" msgstr "Cannot delete account" -#. Toast error shown when captcha verification fails inside the auth captcha interceptor. -#: src/features/auth/components/CaptchaInterceptor.tsx:15 -msgid "Captcha verification failed. Try again." -msgstr "Captcha verification failed. Try again." - #. Section header in the Linux audio source picker. Lists capture-target options (entire system / specific apps). #: src/features/voice/components/AudioSourcePickerLinux.tsx:50 msgid "Capture" @@ -7398,10 +7383,6 @@ msgstr "Checking access..." msgid "Checking screen recording permission..." msgstr "Checking screen recording permission..." -#: src/features/auth/components/AltchaVerification.tsx:62 -msgid "Checking your browser. This takes a few seconds." -msgstr "Checking your browser. This takes a few seconds." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -7571,11 +7552,6 @@ msgstr "Choose File, then Add to Dock." msgid "Choose friends to message." msgstr "Choose friends to message." -#. Setup wizard body for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:989 -msgid "Choose hCaptcha or Cloudflare Turnstile for signup challenges." -msgstr "Choose hCaptcha or Cloudflare Turnstile for signup challenges." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:455 msgid "Choose how chat moves after you send a message" @@ -7982,17 +7958,17 @@ msgid "Clear selection" msgstr "Clear selection" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:88 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:87 msgid "Clear trust all setting" msgstr "Clear trust all setting" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:63 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:62 msgid "Clear trusted domains" msgstr "Clear trusted domains" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:96 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:95 msgid "Clear trusted domains ({trustedDomainsCount})" msgstr "Clear trusted domains ({trustedDomainsCount})" @@ -8002,7 +7978,7 @@ msgid "Clearer text" msgstr "Clearer text" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:108 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:107 msgid "Clearing trusted domains..." msgstr "Clearing trusted domains..." @@ -8100,7 +8076,7 @@ msgid "Client" msgstr "Client" #. Label for Bluesky OAuth client name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1057 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1031 msgid "Client name" msgstr "Client name" @@ -8117,7 +8093,7 @@ msgid "Client secret regenerated. Update any code that uses the old secret." msgstr "Client secret regenerated. Update any code that uses the old secret." #. Label for Bluesky OAuth client URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1061 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 msgid "Client URL" msgstr "Client URL" @@ -8269,11 +8245,6 @@ msgstr "Closed DMs" msgid "Cloud upload" msgstr "Cloud upload" -#. Cloudflare Turnstile provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1014 -msgid "Cloudflare Turnstile" -msgstr "Cloudflare Turnstile" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:58 msgid "Coal" @@ -8669,7 +8640,7 @@ msgstr "Community name" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:126 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:125 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:113 msgid "Community nickname" msgstr "Community nickname" @@ -8722,7 +8693,7 @@ msgid "Community profile" msgstr "Community profile" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:73 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:72 msgid "Community profile updated" msgstr "Community profile updated" @@ -8880,7 +8851,7 @@ msgid "Configure keyboard shortcuts" msgstr "Configure keyboard shortcuts" #. Option for configuring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:961 +#: src/features/app/components/setup/SetupWizardSteps.tsx:954 msgid "Configure now" msgstr "Configure now" @@ -12341,7 +12312,7 @@ msgstr "Disconnect from {channel}" msgid "Disconnect from voice" msgstr "Disconnect from voice" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:261 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:243 msgid "Disconnect socket" msgstr "Disconnect socket" @@ -12479,7 +12450,7 @@ msgstr "Display mode" #. Short label in the inputs tab. Keep it concise. #. Short label in the my profile tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:22 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:138 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:137 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:61 msgid "Display name" msgstr "Display name" @@ -12625,7 +12596,7 @@ msgstr "Do you want to join {communityName}?" #. Label in the accessibility tab. #. Label in the my profile tab. #: src/features/user/components/modals/tabs/AccessibilityTab.tsx:54 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:146 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:145 msgid "Doc, I'm from the future. I came here in a time machine that you invented. Now, I need your help to get back to the year 1985." msgstr "Doc, I'm from the future. I came here in a time machine that you invented. Now, I need your help to get back to the year 1985." @@ -13262,7 +13233,7 @@ msgid "Edit your messages above or below" msgstr "Edit your messages above or below" #. Button or menu action label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:93 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:92 msgid "Edit your profile appearance and see a live preview" msgstr "Edit your profile appearance and see a live preview" @@ -13330,7 +13301,7 @@ msgid "Email changed" msgstr "Email changed" #. Setup wizard title for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:993 +#: src/features/app/components/setup/SetupWizardSteps.tsx:978 msgid "Email delivery" msgstr "Email delivery" @@ -13635,7 +13606,7 @@ msgid "Enable beta feature" msgstr "Enable beta feature" #. Label for enabling Bluesky OAuth in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1053 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1027 msgid "Enable Bluesky OAuth" msgstr "Enable Bluesky OAuth" @@ -13668,7 +13639,7 @@ msgid "Enable developer mode" msgstr "Enable developer mode" #. Label for enabling SMTP email delivery in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1021 +#: src/features/app/components/setup/SetupWizardSteps.tsx:995 msgid "Enable email delivery" msgstr "Enable email delivery" @@ -14705,7 +14676,7 @@ msgid "Failed to ban member. Try again." msgstr "Failed to ban member. Try again." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:59 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:58 msgid "Failed to clear trusted domains." msgstr "Failed to clear trusted domains." @@ -14762,7 +14733,7 @@ msgid "Failed to enable camera." msgstr "Failed to enable camera." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:42 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:41 msgid "Failed to forget authorized IPs. Try again." msgstr "Failed to forget authorized IPs. Try again." @@ -14907,7 +14878,7 @@ msgid "Failed to resend verification code. Try again later." msgstr "Failed to resend verification code. Try again later." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:75 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:74 msgid "Failed to reset premium state." msgstr "Failed to reset premium state." @@ -15581,7 +15552,7 @@ msgstr "Force loading skeleton" msgid "Force mature media" msgstr "Force mature media" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:276 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:258 msgid "Force move to AFK channel" msgstr "Force move to AFK channel" @@ -15640,7 +15611,7 @@ msgid "Forced off" msgstr "Forced off" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:46 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:45 msgid "Forget authorized IPs" msgstr "Forget authorized IPs" @@ -15650,7 +15621,7 @@ msgid "Forget subscriptions" msgstr "Forget subscriptions" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:104 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:103 msgid "Forgetting authorized IPs..." msgstr "Forgetting authorized IPs..." @@ -15907,12 +15878,12 @@ msgid "from <0>{0}" msgstr "from <0>{0}" #. Label for SMTP from email input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1025 +#: src/features/app/components/setup/SetupWizardSteps.tsx:999 msgid "From email" msgstr "From email" #. Label for SMTP from name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1029 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1003 msgid "From name" msgstr "From name" @@ -16204,7 +16175,7 @@ msgid "GIF preview" msgstr "GIF preview" #. Setup wizard title for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:969 +#: src/features/app/components/setup/SetupWizardSteps.tsx:962 msgid "GIF search" msgstr "GIF search" @@ -16853,21 +16824,12 @@ msgstr "Have a gift code? Redeem it to unlock {PREMIUM_PRODUCT_NAME}." msgid "Having fun?" msgstr "Having fun?" -#: src/features/auth/components/modals/CaptchaModal.tsx:175 -msgid "Having issues? Try hCaptcha instead" -msgstr "Having issues? Try hCaptcha instead" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:63 msgctxt "us-state" msgid "Hawaii" msgstr "Hawaii" -#. hCaptcha provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1013 -msgid "hCaptcha" -msgstr "hCaptcha" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:238 msgid "HD" @@ -19768,7 +19730,7 @@ msgid "Logo" msgstr "Logo" #. Label for Bluesky OAuth logo URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1065 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1039 msgid "Logo URL" msgstr "Logo URL" @@ -22941,7 +22903,7 @@ msgid "No tokens match \"{searchQuery}\"." msgstr "No tokens match \"{searchQuery}\"." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:92 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:91 msgid "No trusted domains" msgstr "No trusted domains" @@ -23696,10 +23658,6 @@ msgstr "Open browser picker" msgid "Open call view" msgstr "Open call view" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:288 -msgid "Open captcha modal" -msgstr "Open captcha modal" - #. Accessible label for the channel header title button in a community channel. #: src/features/channel/components/channel_header/shared.ts:14 msgid "Open channel details for {channelName}" @@ -23712,7 +23670,7 @@ msgstr "Open channel details for {channelName}" msgid "Open chat" msgstr "Open chat" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:314 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:290 msgid "Open claim account modal" msgstr "Open claim account modal" @@ -23944,11 +23902,11 @@ msgstr "Open sticker in browser" msgid "Open streaming privacy settings" msgstr "Open streaming privacy settings" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:327 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:303 msgid "Open sudo verification modal" msgstr "Open sudo verification modal" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:342 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:318 msgid "Open system DM" msgstr "Open system DM" @@ -24430,7 +24388,7 @@ msgstr "Passkeys require a signed macOS bundle with a valid application identifi #. Generic form-field label for a password. #. Label for SMTP password input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1036 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1010 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:146 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:183 @@ -25212,7 +25170,7 @@ msgid "Popup" msgstr "Popup" #. Label for SMTP port input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1034 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1008 msgid "Port" msgstr "Port" @@ -25338,7 +25296,7 @@ msgid "Premium since date" msgstr "Premium since date" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:71 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:70 msgid "Premium state reset on the backend." msgstr "Premium state reset on the backend." @@ -25608,7 +25566,7 @@ msgid "Privacy settings" msgstr "Privacy settings" #. Label for Bluesky OAuth privacy URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1073 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1047 msgid "Privacy URL" msgstr "Privacy URL" @@ -25633,7 +25591,7 @@ msgid "Private details" msgstr "Private details" #. Label for Bluesky OAuth private key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1081 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1055 msgid "Private key" msgstr "Private key" @@ -25699,18 +25657,18 @@ msgstr "Profile color" #. Settings section label for editing profile appearance and identity. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:105 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:104 #: src/features/user/components/settings_utils/section_registry/GeneralSettingsSections.ts:6 msgid "Profile customization" msgstr "Profile customization" #. Label in the my profile tab. Preserve {selectedGuildName}; it is inserted by code. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:101 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:100 msgid "Profile customization for {selectedGuildName}" msgstr "Profile customization for {selectedGuildName}" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:97 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:96 msgid "Profile customization form" msgstr "Profile customization form" @@ -25775,7 +25733,7 @@ msgid "Profile type" msgstr "Profile type" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:77 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:76 msgid "Profile updated" msgstr "Profile updated" @@ -25812,7 +25770,7 @@ msgstr "Prompt for new audio devices" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:142 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:141 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:177 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:160 msgid "Pronouns" @@ -25842,11 +25800,6 @@ msgstr "Provide either a user ID or a username for the person you are reporting. msgid "Provide your full legal name for the declaration." msgstr "Provide your full legal name for the declaration." -#. Label for an integration provider choice. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 -msgid "Provider" -msgstr "Provider" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27626,7 +27579,7 @@ msgid "Reset password" msgstr "Reset password" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:79 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:78 msgid "Reset premium state" msgstr "Reset premium state" @@ -27635,7 +27588,7 @@ msgstr "Reset premium state" msgid "Reset slider to default value" msgstr "Reset slider to default value" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:247 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:229 msgid "Reset socket" msgstr "Reset socket" @@ -27684,7 +27637,7 @@ msgid "Reset zoom" msgstr "Reset zoom" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:112 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:111 msgid "Resetting premium state..." msgstr "Resetting premium state..." @@ -28315,7 +28268,7 @@ msgid "Run the instance as one community instead of many. This can only be enabl msgstr "Run the instance as one community instead of many. This can only be enabled now, during setup." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:100 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:99 msgid "Runtime utilities" msgstr "Runtime utilities" @@ -29103,11 +29056,6 @@ msgstr "Secondary button clicked." msgid "Secret" msgstr "Secret" -#. Label for a CAPTCHA secret key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1020 -msgid "Secret key" -msgstr "Secret key" - #. Settings search entry label. Names the settings search entry in the settings UI. #. Short label in the secrets section. Keep it concise. Keep the tone plain and specific. #: src/features/user/components/modals/tabs/applications_tab/application_detail/SecretsSection.tsx:11 @@ -29925,7 +29873,7 @@ msgid "Set up authenticator app" msgstr "Set up authenticator app" #. Option for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:953 +#: src/features/app/components/setup/SetupWizardSteps.tsx:946 msgid "Set up later" msgstr "Set up later" @@ -30427,7 +30375,7 @@ msgstr "Show inline DM list" msgid "Show just the typing indicator without avatars" msgstr "Show just the typing indicator without avatars" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:308 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:284 msgid "Show keyboard mode intro" msgstr "Show keyboard mode intro" @@ -30538,7 +30486,7 @@ msgstr "Show Neko" msgid "Show new device alerts" msgstr "Show new device alerts" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:282 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:264 msgid "Show new device modal" msgstr "Show new device modal" @@ -30820,7 +30768,7 @@ msgid "Signed-in devices" msgstr "Signed-in devices" #. Label for Bluesky OAuth signing key ID input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1077 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1051 msgid "Signing key ID" msgstr "Signing key ID" @@ -30910,11 +30858,6 @@ msgstr "Single line" msgid "Single user (all statuses)" msgstr "Single user (all statuses)" -#. Label for a CAPTCHA site key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 -msgid "Site key" -msgstr "Site key" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:98 @@ -30964,7 +30907,7 @@ msgid "Skip the system leave notice — nobody gets pinged." msgstr "Skip the system leave notice — nobody gets pinged." #. Description for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:957 +#: src/features/app/components/setup/SetupWizardSteps.tsx:950 msgid "Skip this now and configure it from the admin panel." msgstr "Skip this now and configure it from the admin panel." @@ -31212,17 +31155,17 @@ msgid "SMS verification is unavailable right now. Try again later or contact sup msgstr "SMS verification is unavailable right now. Try again later or contact support." #. Success message after validating SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1045 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 msgid "SMTP connection verified." msgstr "SMTP connection verified." #. Label for SMTP host input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1033 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1007 msgid "SMTP host" msgstr "SMTP host" #. Failure message after validating SMTP credentials when the server returns no error detail. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1049 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1023 msgid "SMTP validation failed." msgstr "SMTP validation failed." @@ -31402,7 +31345,7 @@ msgstr "Something went wrong. Try again later." #. Inline error in the web deep-link prompt when opening the desktop app fails. #. Toast error shown when the mature content check request fails unexpectedly. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:18 -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:580 +#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 #: src/features/auth/flow/DesktopDeepLinkPrompt.tsx:31 msgid "Something went wrong. Try again." msgstr "Something went wrong. Try again." @@ -32099,6 +32042,11 @@ msgstr "Still indexing — check back in a moment" msgid "Still Neko" msgstr "Still Neko" +#. Small toast shown only when an automatic background check before sign-in, sign-up or a similar request takes more than a couple of seconds. No user action needed. Keep it short and calm. +#: src/features/auth/altcha/CaptchaInterceptor.ts:13 +msgid "Still working on it…" +msgstr "Still working on it…" + #. Stop-recording button label in the desktop voice message composer. #: src/features/voice/components/VoiceMessageComposerModal.tsx:65 msgid "Stop" @@ -33013,7 +32961,7 @@ msgid "Terms of service" msgstr "Terms of service" #. Label for Bluesky OAuth terms URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1069 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1043 msgid "Terms URL" msgstr "Terms URL" @@ -33023,7 +32971,7 @@ msgid "Terrorism or violent extremism" msgstr "Terrorism or violent extremism" #. Button that validates SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1041 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1015 msgid "Test SMTP" msgstr "Test SMTP" @@ -33800,7 +33748,7 @@ msgid "This clears quick CSS, imported themes, uploaded assets, and local file r msgstr "This clears quick CSS, imported themes, uploaded assets, and local file references on this device." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:83 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:82 msgid "This clears your backend premium state entirely, including premium type, billing metadata, and override flags." msgstr "This clears your backend premium state entirely, including premium type, billing metadata, and override flags." @@ -34200,7 +34148,7 @@ msgid "This message no longer exists." msgstr "This message no longer exists." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:130 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:129 msgid "This nickname will only be visible in this community" msgstr "This nickname will only be visible in this community" @@ -34277,12 +34225,12 @@ msgid "This removes all custom CSS overrides. Theme files in your library are no msgstr "This removes all custom CSS overrides. Theme files in your library are not affected." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:50 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:49 msgid "This removes all previously authorized IP addresses on your account. The next login from any IP will require email verification." msgstr "This removes all previously authorized IP addresses on your account. The next login from any IP will require email verification." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:67 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:66 msgid "This removes all trusted domains. You will see the external link warning for all domains again." msgstr "This removes all trusted domains. You will see the external link warning for all domains again." @@ -34949,7 +34897,7 @@ msgstr "Tray icon changes only apply after a restart on Linux because the system msgid "Trending GIFs" msgstr "Trending GIFs" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:383 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:359 msgid "Trigger React crash" msgstr "Trigger React crash" @@ -35008,7 +34956,7 @@ msgid "Trusted domains" msgstr "Trusted domains" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:55 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:54 msgid "Trusted domains cleared." msgstr "Trusted domains cleared." @@ -35054,7 +35002,6 @@ msgid "Try a different variable name or clear the search." msgstr "Try a different variable name or clear the search." #. Generic action label for retrying a failed or interrupted operation. -#: src/features/auth/components/AltchaVerification.tsx:53 #: src/features/auth/flow/AuthRouteLoadError.tsx:22 #: src/features/i18n/utils/CommonMessageDescriptors.ts:75 msgid "Try again" @@ -35132,10 +35079,6 @@ msgstr "Try security key / passkey instead" msgid "Try sending your message again." msgstr "Try sending your message again." -#: src/features/auth/components/modals/CaptchaModal.tsx:177 -msgid "Try Turnstile instead" -msgstr "Try Turnstile instead" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:135 msgid "TTS" @@ -36890,7 +36833,7 @@ msgid "Use this when troubleshooting the client or collecting logs. It may add v msgstr "Use this when troubleshooting the client or collecting logs. It may add verbose messages to the browser console for the current client." #. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1037 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1011 msgid "Use TLS" msgstr "Use TLS" @@ -37056,7 +36999,7 @@ msgstr "User volume" #. Generic form-field label for a username. #. Label for SMTP username input. #. Settings search entry label. Also used as a search synonym in the settings search bar. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 #: src/features/i18n/utils/CommonMessageDescriptors.ts:572 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:218 #: src/features/user/components/modals/tabs/my_profile_tab/MyProfileTabUsernameSection.tsx:56 @@ -37337,11 +37280,6 @@ msgstr "Verify phone number" msgid "Verify phone number form" msgstr "Verify phone number form" -#. Short label in the authentication captcha modal. Keep the tone plain and specific. -#: src/features/auth/components/modals/CaptchaModal.tsx:17 -msgid "Verify you're human" -msgstr "Verify you're human" - #. Title of the error modal shown when an unverified account tries to start a DM. #. Title shown when an unverified account cannot start a DM or group DM. #: src/features/app/components/alerts/DmActionErrorModal.tsx:40 @@ -37369,22 +37307,22 @@ msgid "Verify your email before adding an authenticator app." msgstr "Verify your email before adding an authenticator app." #. Description text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:117 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:116 msgid "Verify your email before changing your community nickname, avatar, banner, bio, pronouns, or accent color." msgstr "Verify your email before changing your community nickname, avatar, banner, bio, pronouns, or accent color." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:121 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:120 msgid "Verify your email before changing your username, display name, avatar, banner, bio, pronouns, time zone, or {premiumProductName} badge privacy." msgstr "Verify your email before changing your username, display name, avatar, banner, bio, pronouns, time zone, or {premiumProductName} badge privacy." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:85 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:84 msgid "Verify your email before editing this community profile. You can still preview it here." msgstr "Verify your email before editing this community profile. You can still preview it here." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:89 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:88 msgid "Verify your email before editing your profile. You can still preview it here." msgstr "Verify your email before editing your profile. You can still preview it here." @@ -37416,12 +37354,12 @@ msgid "Verify your email to continue using {productName}." msgstr "Verify your email to continue using {productName}." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:109 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:108 msgid "Verify your email to edit this community profile" msgstr "Verify your email to edit this community profile" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:113 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:112 msgid "Verify your email to edit your profile" msgstr "Verify your email to edit your profile" @@ -38398,10 +38336,6 @@ msgstr "We lowered the price of {premiumProductName} in Brazil. It is now {month msgid "We need one verification step before you continue. This helps protect accounts and keep spam off {productName}." msgstr "We need one verification step before you continue. This helps protect accounts and keep spam off {productName}." -#: src/features/auth/components/modals/CaptchaModal.tsx:128 -msgid "We need to make sure you're not a bot. Complete the verification below." -msgstr "We need to make sure you're not a bot. Complete the verification below." - #. Required-action modal intro text when both email and phone verification are required. #: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:216 msgid "We need two verification steps before you continue. We will show one step at a time." @@ -39256,7 +39190,7 @@ msgid "You can't befriend yourself" msgstr "You can't befriend yourself" #. Label in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:134 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:133 msgid "You can't change your nickname here" msgstr "You can't change your nickname here" @@ -39506,7 +39440,7 @@ msgid "You have unsaved changes." msgstr "You have unsaved changes." #. Warning text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:81 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:80 msgid "You have unsaved changes. Save or reset before leaving." msgstr "You have unsaved changes. Save or reset before leaving." @@ -40031,10 +39965,6 @@ msgstr "Your action could not be completed because it was flagged by our safety msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Your application is pending review. You can still update your listing details or withdraw the application." -#: src/features/auth/components/AltchaVerification.tsx:50 -msgid "Your browser couldn't finish the check." -msgstr "Your browser couldn't finish the check." - #. Body of the browser-audio-required modal explaining why the user must click before audio can play. #: src/features/voice/components/modals/AudioPlaybackPermissionModal.tsx:12 msgid "Your browser requires user interaction before audio can be played. Click the button below to enable voice chat." @@ -40386,7 +40316,7 @@ msgid "YouTube enrichment" msgstr "YouTube enrichment" #. Setup wizard title for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:977 +#: src/features/app/components/setup/SetupWizardSteps.tsx:970 msgid "YouTube previews" msgstr "YouTube previews" diff --git a/fluxer_app/src/features/i18n/locales/es-419/messages.po b/fluxer_app/src/features/i18n/locales/es-419/messages.po index 1c2fe738e..f2fccd9cf 100644 --- a/fluxer_app/src/features/i18n/locales/es-419/messages.po +++ b/fluxer_app/src/features/i18n/locales/es-419/messages.po @@ -2395,11 +2395,6 @@ msgstr "60 segundos" msgid "7 days" msgstr "7 días" -#. Required-action error when the API requires a captcha for phone verification. -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 -msgid "A browser check is required before phone verification. Try again from the sign-in page or contact support." -msgstr "Se requiere una verificación del navegador antes de la verificación telefónica. Intenta de nuevo desde la página de inicio de sesión o contacta a soporte." - #. Hint shown beside in:. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:77 msgid "a channel" @@ -2928,7 +2923,7 @@ msgid "Add a friend to get started." msgstr "Agrega un amigo para empezar." #. Setup wizard body for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:973 +#: src/features/app/components/setup/SetupWizardSteps.tsx:966 msgid "Add a Klipy API key to enable GIF search at runtime." msgstr "Agrega una clave API de Klipy para habilitar la búsqueda de GIFs en tiempo de ejecución." @@ -2965,7 +2960,7 @@ msgid "Add a working email" msgstr "Agrega un correo electrónico que funcione" #. Setup wizard body for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:981 +#: src/features/app/components/setup/SetupWizardSteps.tsx:974 msgid "Add a YouTube Data API key to enrich YouTube links." msgstr "Agrega una clave de YouTube Data API para enriquecer los enlaces de YouTube." @@ -3011,7 +3006,7 @@ msgid "Add another reaction" msgstr "Agregar otra reacción" #. Setup wizard body for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1005 +#: src/features/app/components/setup/SetupWizardSteps.tsx:990 msgid "Add Bluesky OAuth client metadata and a signing key." msgstr "Agrega metadatos del cliente OAuth de Bluesky y una clave de firma." @@ -3161,7 +3156,7 @@ msgid "Add shortcut" msgstr "Agregar atajo" #. Setup wizard body for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:997 +#: src/features/app/components/setup/SetupWizardSteps.tsx:982 msgid "Add SMTP credentials so the instance can send verification and notification email." msgstr "Agrega credenciales SMTP para que la instancia pueda enviar correos de verificación y notificación." @@ -3188,7 +3183,7 @@ msgid "Add stream" msgstr "Agregar transmisión" #. Description for configuring an optional setup wizard integration now. -#: src/features/app/components/setup/SetupWizardSteps.tsx:965 +#: src/features/app/components/setup/SetupWizardSteps.tsx:958 msgid "Add the credentials during setup." msgstr "Agrega las credenciales durante la configuración." @@ -3954,7 +3949,7 @@ msgid "An invalid status was provided. You can now close this tab and return to msgstr "Se proporcionó un estado no válido. Ahora puedes cerrar esta pestaña y volver a la aplicación." #. Short label in the authentication auth form. Keep the tone plain and specific. -#: src/features/auth/hooks/useAuthForm.ts:13 +#: src/features/auth/hooks/useAuthForm.ts:12 msgid "An unexpected error occurred" msgstr "Ocurrió un error inesperado" @@ -4262,7 +4257,7 @@ msgid "Anyone can request an account, but an administrator must approve it." msgstr "Cualquiera puede solicitar una cuenta, pero un administrador debe aprobarla." #. Label for an integration API key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1018 +#: src/features/app/components/setup/SetupWizardSteps.tsx:994 msgid "API key" msgstr "Clave de API" @@ -4958,7 +4953,7 @@ msgid "Authorized apps" msgstr "Aplicaciones autorizadas" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:38 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:37 msgid "Authorized IPs cleared. New logins will require email verification." msgstr "IP autorizadas eliminadas. Los nuevos inicios de sesión requerirán verificación por correo electrónico." @@ -5730,7 +5725,7 @@ msgid "Bluesky connections" msgstr "Conexiones de Bluesky" #. Setup wizard title for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1001 +#: src/features/app/components/setup/SetupWizardSteps.tsx:986 msgid "Bluesky OAuth" msgstr "OAuth de Bluesky" @@ -5897,11 +5892,6 @@ msgstr "Los permisos del bot no pueden ser negativos." msgid "Bot profile" msgstr "Perfil del bot" -#. Setup wizard title for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:985 -msgid "Bot protection" -msgstr "Protección contra bots" - #. Short label in the authentication OAUTH scopes step. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/OAuthScopesStep.tsx:20 msgid "Bot scope requested" @@ -6554,11 +6544,6 @@ msgstr "No se puede editar" msgid "Cannot delete account" msgstr "No se puede eliminar la cuenta" -#. Toast error shown when captcha verification fails inside the auth captcha interceptor. -#: src/features/auth/components/CaptchaInterceptor.tsx:15 -msgid "Captcha verification failed. Try again." -msgstr "Falló la verificación del captcha. Intenta de nuevo." - #. Section header in the Linux audio source picker. Lists capture-target options (entire system / specific apps). #: src/features/voice/components/AudioSourcePickerLinux.tsx:50 msgid "Capture" @@ -7398,10 +7383,6 @@ msgstr "Comprobando acceso..." msgid "Checking screen recording permission..." msgstr "Verificando el permiso para grabar la pantalla..." -#: src/features/auth/components/AltchaVerification.tsx:62 -msgid "Checking your browser. This takes a few seconds." -msgstr "Verificando tu navegador. Esto toma unos segundos." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -7571,11 +7552,6 @@ msgstr "Selecciona Archivo y luego Agregar al Dock." msgid "Choose friends to message." msgstr "Elige amigos para enviar mensajes." -#. Setup wizard body for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:989 -msgid "Choose hCaptcha or Cloudflare Turnstile for signup challenges." -msgstr "Elige hCaptcha o Cloudflare Turnstile para los desafíos de registro." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:455 msgid "Choose how chat moves after you send a message" @@ -7982,17 +7958,17 @@ msgid "Clear selection" msgstr "Borrar selección" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:88 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:87 msgid "Clear trust all setting" msgstr "Borrar la configuración de confiar en todo" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:63 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:62 msgid "Clear trusted domains" msgstr "Borrar dominios de confianza" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:96 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:95 msgid "Clear trusted domains ({trustedDomainsCount})" msgstr "Borrar dominios de confianza ({trustedDomainsCount})" @@ -8002,7 +7978,7 @@ msgid "Clearer text" msgstr "Texto más claro" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:108 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:107 msgid "Clearing trusted domains..." msgstr "Borrando dominios de confianza..." @@ -8100,7 +8076,7 @@ msgid "Client" msgstr "Cliente" #. Label for Bluesky OAuth client name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1057 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1031 msgid "Client name" msgstr "Nombre del cliente" @@ -8117,7 +8093,7 @@ msgid "Client secret regenerated. Update any code that uses the old secret." msgstr "Se regeneró el secreto del cliente. Actualiza cualquier código que use el secreto anterior." #. Label for Bluesky OAuth client URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1061 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 msgid "Client URL" msgstr "URL del cliente" @@ -8269,11 +8245,6 @@ msgstr "MD cerrados" msgid "Cloud upload" msgstr "Subir a la nube" -#. Cloudflare Turnstile provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1014 -msgid "Cloudflare Turnstile" -msgstr "Cloudflare Turnstile" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:58 msgid "Coal" @@ -8669,7 +8640,7 @@ msgstr "Nombre de la comunidad" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:126 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:125 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:113 msgid "Community nickname" msgstr "Apodo en la comunidad" @@ -8722,7 +8693,7 @@ msgid "Community profile" msgstr "Perfil en la comunidad" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:73 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:72 msgid "Community profile updated" msgstr "Perfil en la comunidad actualizado" @@ -8880,7 +8851,7 @@ msgid "Configure keyboard shortcuts" msgstr "Configurar atajos de teclado" #. Option for configuring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:961 +#: src/features/app/components/setup/SetupWizardSteps.tsx:954 msgid "Configure now" msgstr "Configurar ahora" @@ -12341,7 +12312,7 @@ msgstr "Desconectarse de {channel}" msgid "Disconnect from voice" msgstr "Desconectarse de la llamada de voz" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:261 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:243 msgid "Disconnect socket" msgstr "Desconectar socket" @@ -12479,7 +12450,7 @@ msgstr "Modo de visualización" #. Short label in the inputs tab. Keep it concise. #. Short label in the my profile tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:22 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:138 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:137 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:61 msgid "Display name" msgstr "Nombre visible" @@ -12625,7 +12596,7 @@ msgstr "¿Quieres unirte a {communityName}?" #. Label in the accessibility tab. #. Label in the my profile tab. #: src/features/user/components/modals/tabs/AccessibilityTab.tsx:54 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:146 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:145 msgid "Doc, I'm from the future. I came here in a time machine that you invented. Now, I need your help to get back to the year 1985." msgstr "Doc, soy del futuro. Vine en una máquina del tiempo que tú inventaste. Ahora, necesito tu ayuda para volver a 1985." @@ -13262,7 +13233,7 @@ msgid "Edit your messages above or below" msgstr "Editar tus mensajes de arriba o abajo" #. Button or menu action label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:93 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:92 msgid "Edit your profile appearance and see a live preview" msgstr "Edita la apariencia de tu perfil y mira una vista previa en vivo" @@ -13330,7 +13301,7 @@ msgid "Email changed" msgstr "Correo electrónico cambiado" #. Setup wizard title for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:993 +#: src/features/app/components/setup/SetupWizardSteps.tsx:978 msgid "Email delivery" msgstr "Entrega de correo electrónico" @@ -13635,7 +13606,7 @@ msgid "Enable beta feature" msgstr "Activar función beta" #. Label for enabling Bluesky OAuth in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1053 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1027 msgid "Enable Bluesky OAuth" msgstr "Habilitar OAuth de Bluesky" @@ -13668,7 +13639,7 @@ msgid "Enable developer mode" msgstr "Activar el modo de desarrollador" #. Label for enabling SMTP email delivery in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1021 +#: src/features/app/components/setup/SetupWizardSteps.tsx:995 msgid "Enable email delivery" msgstr "Habilitar entrega de correo electrónico" @@ -14705,7 +14676,7 @@ msgid "Failed to ban member. Try again." msgstr "No se pudo banear al miembro. Intenta de nuevo." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:59 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:58 msgid "Failed to clear trusted domains." msgstr "No se pudieron borrar los dominios de confianza." @@ -14762,7 +14733,7 @@ msgid "Failed to enable camera." msgstr "No se pudo activar la cámara." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:42 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:41 msgid "Failed to forget authorized IPs. Try again." msgstr "No se pudieron olvidar las IP autorizadas. Intenta de nuevo." @@ -14907,7 +14878,7 @@ msgid "Failed to resend verification code. Try again later." msgstr "No se pudo reenviar el código de verificación. Intenta de nuevo más tarde." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:75 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:74 msgid "Failed to reset premium state." msgstr "No se pudo restablecer el estado premium." @@ -15581,7 +15552,7 @@ msgstr "Forzar esqueleto de carga" msgid "Force mature media" msgstr "Forzar contenido para adultos" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:276 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:258 msgid "Force move to AFK channel" msgstr "Forzar traslado al canal de inactividad (AFK)" @@ -15640,7 +15611,7 @@ msgid "Forced off" msgstr "Desactivado forzosamente" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:46 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:45 msgid "Forget authorized IPs" msgstr "Olvidar IP autorizadas" @@ -15650,7 +15621,7 @@ msgid "Forget subscriptions" msgstr "Olvidar suscripciones" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:104 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:103 msgid "Forgetting authorized IPs..." msgstr "Olvidando IP autorizadas..." @@ -15907,12 +15878,12 @@ msgid "from <0>{0}" msgstr "de <0>{0}" #. Label for SMTP from email input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1025 +#: src/features/app/components/setup/SetupWizardSteps.tsx:999 msgid "From email" msgstr "Correo del remitente" #. Label for SMTP from name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1029 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1003 msgid "From name" msgstr "Nombre del remitente" @@ -16204,7 +16175,7 @@ msgid "GIF preview" msgstr "Vista previa de GIF" #. Setup wizard title for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:969 +#: src/features/app/components/setup/SetupWizardSteps.tsx:962 msgid "GIF search" msgstr "Búsqueda de GIFs" @@ -16853,21 +16824,12 @@ msgstr "¿Tienes un código de regalo? Canjéalo para desbloquear {PREMIUM_PRODU msgid "Having fun?" msgstr "¿Te estás divirtiendo?" -#: src/features/auth/components/modals/CaptchaModal.tsx:175 -msgid "Having issues? Try hCaptcha instead" -msgstr "¿Tienes problemas? Prueba hCaptcha en su lugar" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:63 msgctxt "us-state" msgid "Hawaii" msgstr "Hawái" -#. hCaptcha provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1013 -msgid "hCaptcha" -msgstr "hCaptcha" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:238 msgid "HD" @@ -19768,7 +19730,7 @@ msgid "Logo" msgstr "Logo" #. Label for Bluesky OAuth logo URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1065 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1039 msgid "Logo URL" msgstr "URL del logo" @@ -22941,7 +22903,7 @@ msgid "No tokens match \"{searchQuery}\"." msgstr "No hay variables que coincidan con \"{searchQuery}\"." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:92 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:91 msgid "No trusted domains" msgstr "No hay dominios de confianza" @@ -23696,10 +23658,6 @@ msgstr "Abrir selector del navegador" msgid "Open call view" msgstr "Abrir vista de la llamada" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:288 -msgid "Open captcha modal" -msgstr "Abrir modal de captcha" - #. Accessible label for the channel header title button in a community channel. #: src/features/channel/components/channel_header/shared.ts:14 msgid "Open channel details for {channelName}" @@ -23712,7 +23670,7 @@ msgstr "Abrir detalles del canal {channelName}" msgid "Open chat" msgstr "Abrir chat" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:314 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:290 msgid "Open claim account modal" msgstr "Abrir ventana para completar el registro" @@ -23944,11 +23902,11 @@ msgstr "Abrir sticker en el navegador" msgid "Open streaming privacy settings" msgstr "Abrir la configuración de privacidad de la transmisión" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:327 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:303 msgid "Open sudo verification modal" msgstr "Abrir modal de verificación de sudo" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:342 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:318 msgid "Open system DM" msgstr "Abrir MD del sistema" @@ -24430,7 +24388,7 @@ msgstr "Las llaves de acceso requieren un paquete de macOS firmado con un identi #. Generic form-field label for a password. #. Label for SMTP password input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1036 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1010 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:146 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:183 @@ -25212,7 +25170,7 @@ msgid "Popup" msgstr "Ventana emergente" #. Label for SMTP port input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1034 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1008 msgid "Port" msgstr "Puerto" @@ -25338,7 +25296,7 @@ msgid "Premium since date" msgstr "Fecha de inicio de premium" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:71 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:70 msgid "Premium state reset on the backend." msgstr "Estado premium restablecido en el backend." @@ -25608,7 +25566,7 @@ msgid "Privacy settings" msgstr "Configuración de privacidad" #. Label for Bluesky OAuth privacy URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1073 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1047 msgid "Privacy URL" msgstr "URL de privacidad" @@ -25633,7 +25591,7 @@ msgid "Private details" msgstr "Datos privados" #. Label for Bluesky OAuth private key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1081 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1055 msgid "Private key" msgstr "Clave privada" @@ -25699,18 +25657,18 @@ msgstr "Color del perfil" #. Settings section label for editing profile appearance and identity. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:105 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:104 #: src/features/user/components/settings_utils/section_registry/GeneralSettingsSections.ts:6 msgid "Profile customization" msgstr "Personalización del perfil" #. Label in the my profile tab. Preserve {selectedGuildName}; it is inserted by code. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:101 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:100 msgid "Profile customization for {selectedGuildName}" msgstr "Personalización del perfil para {selectedGuildName}" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:97 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:96 msgid "Profile customization form" msgstr "Formulario para personalizar el perfil" @@ -25775,7 +25733,7 @@ msgid "Profile type" msgstr "Tipo de perfil" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:77 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:76 msgid "Profile updated" msgstr "Perfil actualizado" @@ -25812,7 +25770,7 @@ msgstr "Preguntar al detectar nuevos dispositivos de audio" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:142 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:141 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:177 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:160 msgid "Pronouns" @@ -25842,11 +25800,6 @@ msgstr "Proporciona el ID de usuario o el nombre de usuario de la persona que qu msgid "Provide your full legal name for the declaration." msgstr "Escribe tu nombre legal completo para la declaración." -#. Label for an integration provider choice. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 -msgid "Provider" -msgstr "Proveedor" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27626,7 +27579,7 @@ msgid "Reset password" msgstr "Restablecer contraseña" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:79 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:78 msgid "Reset premium state" msgstr "Restablecer estado premium" @@ -27635,7 +27588,7 @@ msgstr "Restablecer estado premium" msgid "Reset slider to default value" msgstr "Restablecer el deslizador al valor predeterminado" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:247 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:229 msgid "Reset socket" msgstr "Reiniciar socket" @@ -27684,7 +27637,7 @@ msgid "Reset zoom" msgstr "Restablecer zoom" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:112 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:111 msgid "Resetting premium state..." msgstr "Restableciendo estado premium..." @@ -28315,7 +28268,7 @@ msgid "Run the instance as one community instead of many. This can only be enabl msgstr "Ejecuta la instancia como una comunidad en lugar de muchas. Esto solo se puede habilitar ahora, durante la configuración." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:100 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:99 msgid "Runtime utilities" msgstr "Utilidades de tiempo de ejecución" @@ -29103,11 +29056,6 @@ msgstr "Se hizo clic en el botón secundario." msgid "Secret" msgstr "Secreto" -#. Label for a CAPTCHA secret key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1020 -msgid "Secret key" -msgstr "Clave secreta" - #. Settings search entry label. Names the settings search entry in the settings UI. #. Short label in the secrets section. Keep it concise. Keep the tone plain and specific. #: src/features/user/components/modals/tabs/applications_tab/application_detail/SecretsSection.tsx:11 @@ -29925,7 +29873,7 @@ msgid "Set up authenticator app" msgstr "Configurar app de autenticación" #. Option for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:953 +#: src/features/app/components/setup/SetupWizardSteps.tsx:946 msgid "Set up later" msgstr "Configurar más tarde" @@ -30427,7 +30375,7 @@ msgstr "Mostrar lista integrada de MD" msgid "Show just the typing indicator without avatars" msgstr "Mostrar solo el indicador de escritura sin avatares" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:308 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:284 msgid "Show keyboard mode intro" msgstr "Mostrar introducción al modo teclado" @@ -30538,7 +30486,7 @@ msgstr "Mostrar Neko" msgid "Show new device alerts" msgstr "Mostrar alertas de dispositivos nuevos" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:282 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:264 msgid "Show new device modal" msgstr "Mostrar modal de nuevo dispositivo" @@ -30820,7 +30768,7 @@ msgid "Signed-in devices" msgstr "Dispositivos con sesión iniciada" #. Label for Bluesky OAuth signing key ID input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1077 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1051 msgid "Signing key ID" msgstr "ID de clave de firma" @@ -30910,11 +30858,6 @@ msgstr "Una sola línea" msgid "Single user (all statuses)" msgstr "Un solo usuario (todos los estados)" -#. Label for a CAPTCHA site key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 -msgid "Site key" -msgstr "Clave del sitio" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:98 @@ -30964,7 +30907,7 @@ msgid "Skip the system leave notice — nobody gets pinged." msgstr "Omitir el aviso de salida del sistema: nadie recibirá una notificación." #. Description for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:957 +#: src/features/app/components/setup/SetupWizardSteps.tsx:950 msgid "Skip this now and configure it from the admin panel." msgstr "Omite esto ahora y configúralo desde el panel de administración." @@ -31212,17 +31155,17 @@ msgid "SMS verification is unavailable right now. Try again later or contact sup msgstr "La verificación por SMS no está disponible en este momento. Intenta de nuevo más tarde o contacta a soporte." #. Success message after validating SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1045 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 msgid "SMTP connection verified." msgstr "Conexión SMTP verificada." #. Label for SMTP host input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1033 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1007 msgid "SMTP host" msgstr "Servidor SMTP" #. Failure message after validating SMTP credentials when the server returns no error detail. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1049 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1023 msgid "SMTP validation failed." msgstr "Falló la validación de SMTP." @@ -31402,7 +31345,7 @@ msgstr "Algo salió mal. Intenta de nuevo más tarde." #. Inline error in the web deep-link prompt when opening the desktop app fails. #. Toast error shown when the mature content check request fails unexpectedly. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:18 -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:580 +#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 #: src/features/auth/flow/DesktopDeepLinkPrompt.tsx:31 msgid "Something went wrong. Try again." msgstr "Algo salió mal. Intenta de nuevo." @@ -32099,6 +32042,11 @@ msgstr "Aún indexando; vuelve a intentarlo en un momento" msgid "Still Neko" msgstr "Neko inmóvil" +#. Small toast shown only when an automatic background check before sign-in, sign-up or a similar request takes more than a couple of seconds. No user action needed. Keep it short and calm. +#: src/features/auth/altcha/CaptchaInterceptor.ts:13 +msgid "Still working on it…" +msgstr "Seguimos trabajando…" + #. Stop-recording button label in the desktop voice message composer. #: src/features/voice/components/VoiceMessageComposerModal.tsx:65 msgid "Stop" @@ -33013,7 +32961,7 @@ msgid "Terms of service" msgstr "Términos del servicio" #. Label for Bluesky OAuth terms URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1069 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1043 msgid "Terms URL" msgstr "URL de los Términos del servicio" @@ -33023,7 +32971,7 @@ msgid "Terrorism or violent extremism" msgstr "Terrorismo o extremismo violento" #. Button that validates SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1041 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1015 msgid "Test SMTP" msgstr "Probar SMTP" @@ -33800,7 +33748,7 @@ msgid "This clears quick CSS, imported themes, uploaded assets, and local file r msgstr "Esto borra el CSS rápido, los temas importados, los recursos subidos y las referencias de archivos locales en este dispositivo." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:83 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:82 msgid "This clears your backend premium state entirely, including premium type, billing metadata, and override flags." msgstr "Esto borra por completo tu estado premium del backend, incluido el tipo de premium, los metadatos de facturación y los indicadores de estados forzados." @@ -34200,7 +34148,7 @@ msgid "This message no longer exists." msgstr "Este mensaje ya no existe." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:130 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:129 msgid "This nickname will only be visible in this community" msgstr "Este apodo solo será visible en esta comunidad" @@ -34277,12 +34225,12 @@ msgid "This removes all custom CSS overrides. Theme files in your library are no msgstr "Esto elimina todas las personalizaciones de CSS. Los archivos de temas de tu biblioteca no se verán afectados." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:50 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:49 msgid "This removes all previously authorized IP addresses on your account. The next login from any IP will require email verification." msgstr "Esto elimina todas las direcciones IP autorizadas previamente en tu cuenta. El próximo inicio de sesión desde cualquier IP requerirá verificación por correo electrónico." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:67 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:66 msgid "This removes all trusted domains. You will see the external link warning for all domains again." msgstr "Esto elimina todos los dominios de confianza. Volverás a ver la advertencia de enlace externo para todos los dominios." @@ -34949,7 +34897,7 @@ msgstr "Los cambios en el ícono de la bandeja solo se aplican después de reini msgid "Trending GIFs" msgstr "GIFs del momento" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:383 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:359 msgid "Trigger React crash" msgstr "Provocar un error de React" @@ -35008,7 +34956,7 @@ msgid "Trusted domains" msgstr "Dominios de confianza" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:55 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:54 msgid "Trusted domains cleared." msgstr "Dominios de confianza borrados." @@ -35054,7 +35002,6 @@ msgid "Try a different variable name or clear the search." msgstr "Prueba con otro nombre de variable o borra la búsqueda." #. Generic action label for retrying a failed or interrupted operation. -#: src/features/auth/components/AltchaVerification.tsx:53 #: src/features/auth/flow/AuthRouteLoadError.tsx:22 #: src/features/i18n/utils/CommonMessageDescriptors.ts:75 msgid "Try again" @@ -35132,10 +35079,6 @@ msgstr "Prueba con una llave de seguridad o llave de acceso" msgid "Try sending your message again." msgstr "Intenta enviar tu mensaje de nuevo." -#: src/features/auth/components/modals/CaptchaModal.tsx:177 -msgid "Try Turnstile instead" -msgstr "Prueba Turnstile en su lugar" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:135 msgid "TTS" @@ -36890,7 +36833,7 @@ msgid "Use this when troubleshooting the client or collecting logs. It may add v msgstr "Usa esto cuando estés solucionando problemas del cliente o recopilando registros. Puede añadir mensajes detallados a la consola del navegador para el cliente actual." #. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1037 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1011 msgid "Use TLS" msgstr "Usar TLS" @@ -37056,7 +36999,7 @@ msgstr "Volumen del usuario" #. Generic form-field label for a username. #. Label for SMTP username input. #. Settings search entry label. Also used as a search synonym in the settings search bar. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 #: src/features/i18n/utils/CommonMessageDescriptors.ts:572 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:218 #: src/features/user/components/modals/tabs/my_profile_tab/MyProfileTabUsernameSection.tsx:56 @@ -37337,11 +37280,6 @@ msgstr "Verificar número de teléfono" msgid "Verify phone number form" msgstr "Formulario para verificar el número de teléfono" -#. Short label in the authentication captcha modal. Keep the tone plain and specific. -#: src/features/auth/components/modals/CaptchaModal.tsx:17 -msgid "Verify you're human" -msgstr "Verifica que eres humano" - #. Title of the error modal shown when an unverified account tries to start a DM. #. Title shown when an unverified account cannot start a DM or group DM. #: src/features/app/components/alerts/DmActionErrorModal.tsx:40 @@ -37369,22 +37307,22 @@ msgid "Verify your email before adding an authenticator app." msgstr "Verifica tu correo electrónico antes de agregar una aplicación de autenticación." #. Description text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:117 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:116 msgid "Verify your email before changing your community nickname, avatar, banner, bio, pronouns, or accent color." msgstr "Verifica tu correo electrónico antes de cambiar tu apodo de la comunidad, avatar, banner, biografía, pronombres o color de énfasis." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:121 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:120 msgid "Verify your email before changing your username, display name, avatar, banner, bio, pronouns, time zone, or {premiumProductName} badge privacy." msgstr "Verifica tu correo electrónico antes de cambiar tu nombre de usuario, nombre visible, avatar, banner, biografía, pronombres, zona horaria o la privacidad de tu insignia de {premiumProductName}." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:85 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:84 msgid "Verify your email before editing this community profile. You can still preview it here." msgstr "Verifica tu correo electrónico antes de editar este perfil de la comunidad. Aún puedes previsualizarlo aquí." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:89 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:88 msgid "Verify your email before editing your profile. You can still preview it here." msgstr "Verifica tu correo electrónico antes de editar tu perfil. Aún puedes previsualizarlo aquí." @@ -37416,12 +37354,12 @@ msgid "Verify your email to continue using {productName}." msgstr "Verifica tu correo electrónico para seguir usando {productName}." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:109 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:108 msgid "Verify your email to edit this community profile" msgstr "Verifica tu correo electrónico para editar este perfil de la comunidad" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:113 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:112 msgid "Verify your email to edit your profile" msgstr "Verifica tu correo para editar tu perfil" @@ -38398,10 +38336,6 @@ msgstr "Bajamos el precio de {premiumProductName} en Brasil. Ahora cuesta {month msgid "We need one verification step before you continue. This helps protect accounts and keep spam off {productName}." msgstr "Necesitamos un paso de verificación antes de que continúes. Esto ayuda a proteger las cuentas y a mantener el spam fuera de {productName}." -#: src/features/auth/components/modals/CaptchaModal.tsx:128 -msgid "We need to make sure you're not a bot. Complete the verification below." -msgstr "Necesitamos asegurarnos de que no eres un bot. Completa la verificación a continuación." - #. Required-action modal intro text when both email and phone verification are required. #: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:216 msgid "We need two verification steps before you continue. We will show one step at a time." @@ -39256,7 +39190,7 @@ msgid "You can't befriend yourself" msgstr "No puedes ser tu propio amigo" #. Label in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:134 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:133 msgid "You can't change your nickname here" msgstr "No puedes cambiar tu apodo aquí" @@ -39506,7 +39440,7 @@ msgid "You have unsaved changes." msgstr "Tienes cambios sin guardar." #. Warning text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:81 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:80 msgid "You have unsaved changes. Save or reset before leaving." msgstr "Tienes cambios sin guardar. Guarda o restablece antes de salir." @@ -40031,10 +39965,6 @@ msgstr "No pudimos completar tu acción porque fue marcada por nuestros sistemas msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Tu solicitud está pendiente de revisión. Aún puedes actualizar los datos de tu comunidad o retirar la solicitud." -#: src/features/auth/components/AltchaVerification.tsx:50 -msgid "Your browser couldn't finish the check." -msgstr "Tu navegador no pudo completar la verificación." - #. Body of the browser-audio-required modal explaining why the user must click before audio can play. #: src/features/voice/components/modals/AudioPlaybackPermissionModal.tsx:12 msgid "Your browser requires user interaction before audio can be played. Click the button below to enable voice chat." @@ -40386,7 +40316,7 @@ msgid "YouTube enrichment" msgstr "Enriquecimiento de YouTube" #. Setup wizard title for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:977 +#: src/features/app/components/setup/SetupWizardSteps.tsx:970 msgid "YouTube previews" msgstr "Vistas previas de YouTube" diff --git a/fluxer_app/src/features/i18n/locales/es-ES/messages.po b/fluxer_app/src/features/i18n/locales/es-ES/messages.po index 18bd74109..8383c0d36 100644 --- a/fluxer_app/src/features/i18n/locales/es-ES/messages.po +++ b/fluxer_app/src/features/i18n/locales/es-ES/messages.po @@ -2395,11 +2395,6 @@ msgstr "60 segundos" msgid "7 days" msgstr "7 días" -#. Required-action error when the API requires a captcha for phone verification. -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 -msgid "A browser check is required before phone verification. Try again from the sign-in page or contact support." -msgstr "Se requiere una comprobación del navegador antes de la verificación del teléfono. Inténtalo de nuevo desde la página de inicio de sesión o contacta con el soporte." - #. Hint shown beside in:. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:77 msgid "a channel" @@ -2928,7 +2923,7 @@ msgid "Add a friend to get started." msgstr "Añade un amigo para empezar." #. Setup wizard body for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:973 +#: src/features/app/components/setup/SetupWizardSteps.tsx:966 msgid "Add a Klipy API key to enable GIF search at runtime." msgstr "Añade una clave API de Klipy para habilitar la búsqueda de GIF en tiempo de ejecución." @@ -2965,7 +2960,7 @@ msgid "Add a working email" msgstr "Añade un correo electrónico que funcione" #. Setup wizard body for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:981 +#: src/features/app/components/setup/SetupWizardSteps.tsx:974 msgid "Add a YouTube Data API key to enrich YouTube links." msgstr "Añade una clave de YouTube Data API para enriquecer los enlaces de YouTube." @@ -3011,7 +3006,7 @@ msgid "Add another reaction" msgstr "Añadir otra reacción" #. Setup wizard body for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1005 +#: src/features/app/components/setup/SetupWizardSteps.tsx:990 msgid "Add Bluesky OAuth client metadata and a signing key." msgstr "Añade metadatos del cliente OAuth de Bluesky y una clave de firma." @@ -3161,7 +3156,7 @@ msgid "Add shortcut" msgstr "Añadir atajo" #. Setup wizard body for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:997 +#: src/features/app/components/setup/SetupWizardSteps.tsx:982 msgid "Add SMTP credentials so the instance can send verification and notification email." msgstr "Añade credenciales SMTP para que la instancia pueda enviar correos de verificación y notificación." @@ -3188,7 +3183,7 @@ msgid "Add stream" msgstr "Añadir transmisión" #. Description for configuring an optional setup wizard integration now. -#: src/features/app/components/setup/SetupWizardSteps.tsx:965 +#: src/features/app/components/setup/SetupWizardSteps.tsx:958 msgid "Add the credentials during setup." msgstr "Añade las credenciales durante la configuración." @@ -3954,7 +3949,7 @@ msgid "An invalid status was provided. You can now close this tab and return to msgstr "Se ha proporcionado un estado no válido. Ya puedes cerrar esta pestaña y volver a la aplicación." #. Short label in the authentication auth form. Keep the tone plain and specific. -#: src/features/auth/hooks/useAuthForm.ts:13 +#: src/features/auth/hooks/useAuthForm.ts:12 msgid "An unexpected error occurred" msgstr "Ha ocurrido un error inesperado" @@ -4262,7 +4257,7 @@ msgid "Anyone can request an account, but an administrator must approve it." msgstr "Cualquiera puede solicitar una cuenta, pero un administrador debe aprobarla." #. Label for an integration API key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1018 +#: src/features/app/components/setup/SetupWizardSteps.tsx:994 msgid "API key" msgstr "Clave API" @@ -4958,7 +4953,7 @@ msgid "Authorized apps" msgstr "Aplicaciones autorizadas" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:38 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:37 msgid "Authorized IPs cleared. New logins will require email verification." msgstr "IP autorizadas eliminadas. Los nuevos inicios de sesión requerirán verificación por correo electrónico." @@ -5730,7 +5725,7 @@ msgid "Bluesky connections" msgstr "Conexiones de Bluesky" #. Setup wizard title for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1001 +#: src/features/app/components/setup/SetupWizardSteps.tsx:986 msgid "Bluesky OAuth" msgstr "OAuth de Bluesky" @@ -5897,11 +5892,6 @@ msgstr "Los permisos del bot no pueden ser negativos." msgid "Bot profile" msgstr "Perfil del bot" -#. Setup wizard title for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:985 -msgid "Bot protection" -msgstr "Protección contra bots" - #. Short label in the authentication OAUTH scopes step. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/OAuthScopesStep.tsx:20 msgid "Bot scope requested" @@ -6554,11 +6544,6 @@ msgstr "No se puede editar" msgid "Cannot delete account" msgstr "No se puede eliminar la cuenta" -#. Toast error shown when captcha verification fails inside the auth captcha interceptor. -#: src/features/auth/components/CaptchaInterceptor.tsx:15 -msgid "Captcha verification failed. Try again." -msgstr "Error de verificación de captcha. Inténtalo de nuevo." - #. Section header in the Linux audio source picker. Lists capture-target options (entire system / specific apps). #: src/features/voice/components/AudioSourcePickerLinux.tsx:50 msgid "Capture" @@ -7398,10 +7383,6 @@ msgstr "Comprobando acceso..." msgid "Checking screen recording permission..." msgstr "Comprobando el permiso para grabar la pantalla..." -#: src/features/auth/components/AltchaVerification.tsx:62 -msgid "Checking your browser. This takes a few seconds." -msgstr "Comprobando tu navegador. Tarda unos segundos." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -7571,11 +7552,6 @@ msgstr "Selecciona Archivo y luego Añadir al Dock." msgid "Choose friends to message." msgstr "Elige amigos para enviar mensajes." -#. Setup wizard body for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:989 -msgid "Choose hCaptcha or Cloudflare Turnstile for signup challenges." -msgstr "Elige hCaptcha o Cloudflare Turnstile para los desafíos de registro." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:455 msgid "Choose how chat moves after you send a message" @@ -7982,17 +7958,17 @@ msgid "Clear selection" msgstr "Borrar selección" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:88 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:87 msgid "Clear trust all setting" msgstr "Borrar el ajuste de \"confiar en todo\"" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:63 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:62 msgid "Clear trusted domains" msgstr "Borrar dominios de confianza" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:96 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:95 msgid "Clear trusted domains ({trustedDomainsCount})" msgstr "Borrar dominios de confianza ({trustedDomainsCount})" @@ -8002,7 +7978,7 @@ msgid "Clearer text" msgstr "Texto más claro" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:108 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:107 msgid "Clearing trusted domains..." msgstr "Borrando dominios de confianza..." @@ -8100,7 +8076,7 @@ msgid "Client" msgstr "Cliente" #. Label for Bluesky OAuth client name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1057 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1031 msgid "Client name" msgstr "Nombre del cliente" @@ -8117,7 +8093,7 @@ msgid "Client secret regenerated. Update any code that uses the old secret." msgstr "Se ha regenerado el secreto de cliente. Actualiza cualquier código que use el secreto antiguo." #. Label for Bluesky OAuth client URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1061 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 msgid "Client URL" msgstr "URL del cliente" @@ -8269,11 +8245,6 @@ msgstr "MD cerrados" msgid "Cloud upload" msgstr "Subida a la nube" -#. Cloudflare Turnstile provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1014 -msgid "Cloudflare Turnstile" -msgstr "Cloudflare Turnstile" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:58 msgid "Coal" @@ -8669,7 +8640,7 @@ msgstr "Nombre de la comunidad" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:126 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:125 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:113 msgid "Community nickname" msgstr "Apodo en la comunidad" @@ -8722,7 +8693,7 @@ msgid "Community profile" msgstr "Perfil en la comunidad" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:73 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:72 msgid "Community profile updated" msgstr "Perfil en la comunidad actualizado" @@ -8880,7 +8851,7 @@ msgid "Configure keyboard shortcuts" msgstr "Configurar atajos de teclado" #. Option for configuring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:961 +#: src/features/app/components/setup/SetupWizardSteps.tsx:954 msgid "Configure now" msgstr "Configurar ahora" @@ -12341,7 +12312,7 @@ msgstr "Desconectarse de {channel}" msgid "Disconnect from voice" msgstr "Desconectarse de la llamada de voz" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:261 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:243 msgid "Disconnect socket" msgstr "Desconectar socket" @@ -12479,7 +12450,7 @@ msgstr "Modo de visualización" #. Short label in the inputs tab. Keep it concise. #. Short label in the my profile tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:22 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:138 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:137 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:61 msgid "Display name" msgstr "Nombre visible" @@ -12625,7 +12596,7 @@ msgstr "¿Quieres unirte a {communityName}?" #. Label in the accessibility tab. #. Label in the my profile tab. #: src/features/user/components/modals/tabs/AccessibilityTab.tsx:54 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:146 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:145 msgid "Doc, I'm from the future. I came here in a time machine that you invented. Now, I need your help to get back to the year 1985." msgstr "Doc, soy del futuro. Vine aquí en una máquina del tiempo que tú inventaste. Ahora, necesito tu ayuda para volver al año 1985." @@ -13262,7 +13233,7 @@ msgid "Edit your messages above or below" msgstr "Editar tus mensajes de arriba o de abajo" #. Button or menu action label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:93 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:92 msgid "Edit your profile appearance and see a live preview" msgstr "Edita el aspecto de tu perfil y mira una previsualización en vivo" @@ -13330,7 +13301,7 @@ msgid "Email changed" msgstr "Correo electrónico cambiado" #. Setup wizard title for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:993 +#: src/features/app/components/setup/SetupWizardSteps.tsx:978 msgid "Email delivery" msgstr "Entrega de correo electrónico" @@ -13635,7 +13606,7 @@ msgid "Enable beta feature" msgstr "Activar función beta" #. Label for enabling Bluesky OAuth in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1053 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1027 msgid "Enable Bluesky OAuth" msgstr "Activar OAuth de Bluesky" @@ -13668,7 +13639,7 @@ msgid "Enable developer mode" msgstr "Activar el modo de desarrollador" #. Label for enabling SMTP email delivery in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1021 +#: src/features/app/components/setup/SetupWizardSteps.tsx:995 msgid "Enable email delivery" msgstr "Activar entrega de correo electrónico" @@ -14705,7 +14676,7 @@ msgid "Failed to ban member. Try again." msgstr "No se pudo banear al miembro. Inténtalo de nuevo." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:59 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:58 msgid "Failed to clear trusted domains." msgstr "No se pudieron borrar los dominios de confianza." @@ -14762,7 +14733,7 @@ msgid "Failed to enable camera." msgstr "No se pudo activar la cámara." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:42 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:41 msgid "Failed to forget authorized IPs. Try again." msgstr "No se pudieron olvidar las IP autorizadas. Inténtalo de nuevo." @@ -14907,7 +14878,7 @@ msgid "Failed to resend verification code. Try again later." msgstr "No se pudo reenviar el código de verificación. Inténtalo de nuevo más tarde." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:75 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:74 msgid "Failed to reset premium state." msgstr "No se pudo restablecer el estado premium." @@ -15581,7 +15552,7 @@ msgstr "Forzar esqueleto de carga" msgid "Force mature media" msgstr "Forzar contenido para adultos" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:276 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:258 msgid "Force move to AFK channel" msgstr "Forzar traslado al canal de inactividad (AFK)" @@ -15640,7 +15611,7 @@ msgid "Forced off" msgstr "Desactivado forzosamente" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:46 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:45 msgid "Forget authorized IPs" msgstr "Olvidar IP autorizadas" @@ -15650,7 +15621,7 @@ msgid "Forget subscriptions" msgstr "Olvidar suscripciones" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:104 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:103 msgid "Forgetting authorized IPs..." msgstr "Olvidando las IP autorizadas..." @@ -15907,12 +15878,12 @@ msgid "from <0>{0}" msgstr "de <0>{0}" #. Label for SMTP from email input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1025 +#: src/features/app/components/setup/SetupWizardSteps.tsx:999 msgid "From email" msgstr "Correo del remitente" #. Label for SMTP from name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1029 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1003 msgid "From name" msgstr "Nombre del remitente" @@ -16204,7 +16175,7 @@ msgid "GIF preview" msgstr "Previsualización de GIF" #. Setup wizard title for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:969 +#: src/features/app/components/setup/SetupWizardSteps.tsx:962 msgid "GIF search" msgstr "Búsqueda de GIF" @@ -16853,21 +16824,12 @@ msgstr "¿Tienes un código de regalo? Canjéalo para desbloquear {PREMIUM_PRODU msgid "Having fun?" msgstr "¿Te lo estás pasando bien?" -#: src/features/auth/components/modals/CaptchaModal.tsx:175 -msgid "Having issues? Try hCaptcha instead" -msgstr "¿Tienes problemas? Prueba hCaptcha en su lugar" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:63 msgctxt "us-state" msgid "Hawaii" msgstr "Hawái" -#. hCaptcha provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1013 -msgid "hCaptcha" -msgstr "hCaptcha" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:238 msgid "HD" @@ -19768,7 +19730,7 @@ msgid "Logo" msgstr "Logotipo" #. Label for Bluesky OAuth logo URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1065 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1039 msgid "Logo URL" msgstr "URL del logotipo" @@ -22941,7 +22903,7 @@ msgid "No tokens match \"{searchQuery}\"." msgstr "No hay variables que coincidan con \"{searchQuery}\"." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:92 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:91 msgid "No trusted domains" msgstr "Sin dominios de confianza" @@ -23696,10 +23658,6 @@ msgstr "Abrir selector del navegador" msgid "Open call view" msgstr "Abrir vista de la llamada" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:288 -msgid "Open captcha modal" -msgstr "Abrir modal de captcha" - #. Accessible label for the channel header title button in a community channel. #: src/features/channel/components/channel_header/shared.ts:14 msgid "Open channel details for {channelName}" @@ -23712,7 +23670,7 @@ msgstr "Abrir detalles del canal {channelName}" msgid "Open chat" msgstr "Abrir chat" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:314 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:290 msgid "Open claim account modal" msgstr "Abrir ventana para completar el registro" @@ -23944,11 +23902,11 @@ msgstr "Abrir pegatina en el navegador" msgid "Open streaming privacy settings" msgstr "Abrir ajustes de privacidad de la transmisión" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:327 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:303 msgid "Open sudo verification modal" msgstr "Abrir modal de verificación de sudo" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:342 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:318 msgid "Open system DM" msgstr "Abrir MD del sistema" @@ -24430,7 +24388,7 @@ msgstr "Las claves de acceso requieren un paquete de macOS firmado con un identi #. Generic form-field label for a password. #. Label for SMTP password input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1036 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1010 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:146 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:183 @@ -25212,7 +25170,7 @@ msgid "Popup" msgstr "Ventana emergente" #. Label for SMTP port input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1034 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1008 msgid "Port" msgstr "Puerto" @@ -25338,7 +25296,7 @@ msgid "Premium since date" msgstr "Fecha de inicio de premium" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:71 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:70 msgid "Premium state reset on the backend." msgstr "Estado prémium restablecido en el backend." @@ -25608,7 +25566,7 @@ msgid "Privacy settings" msgstr "Ajustes de privacidad" #. Label for Bluesky OAuth privacy URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1073 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1047 msgid "Privacy URL" msgstr "URL de privacidad" @@ -25633,7 +25591,7 @@ msgid "Private details" msgstr "Datos privados" #. Label for Bluesky OAuth private key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1081 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1055 msgid "Private key" msgstr "Clave privada" @@ -25699,18 +25657,18 @@ msgstr "Color del perfil" #. Settings section label for editing profile appearance and identity. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:105 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:104 #: src/features/user/components/settings_utils/section_registry/GeneralSettingsSections.ts:6 msgid "Profile customization" msgstr "Personalización del perfil" #. Label in the my profile tab. Preserve {selectedGuildName}; it is inserted by code. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:101 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:100 msgid "Profile customization for {selectedGuildName}" msgstr "Personalización del perfil para {selectedGuildName}" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:97 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:96 msgid "Profile customization form" msgstr "Formulario de personalización del perfil" @@ -25775,7 +25733,7 @@ msgid "Profile type" msgstr "Tipo de perfil" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:77 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:76 msgid "Profile updated" msgstr "Perfil actualizado" @@ -25812,7 +25770,7 @@ msgstr "Preguntar al detectar nuevos dispositivos de audio" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:142 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:141 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:177 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:160 msgid "Pronouns" @@ -25842,11 +25800,6 @@ msgstr "Introduce el ID de usuario o el nombre de usuario de la persona a la que msgid "Provide your full legal name for the declaration." msgstr "Indica tu nombre legal completo para la declaración." -#. Label for an integration provider choice. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 -msgid "Provider" -msgstr "Proveedor" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27626,7 +27579,7 @@ msgid "Reset password" msgstr "Restablecer contraseña" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:79 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:78 msgid "Reset premium state" msgstr "Restablecer estado premium" @@ -27635,7 +27588,7 @@ msgstr "Restablecer estado premium" msgid "Reset slider to default value" msgstr "Restablecer el deslizador a su valor predeterminado" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:247 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:229 msgid "Reset socket" msgstr "Reiniciar socket" @@ -27684,7 +27637,7 @@ msgid "Reset zoom" msgstr "Restablecer zoom" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:112 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:111 msgid "Resetting premium state..." msgstr "Restableciendo estado premium..." @@ -28315,7 +28268,7 @@ msgid "Run the instance as one community instead of many. This can only be enabl msgstr "Ejecuta la instancia como una única comunidad en lugar de varias. Solo se puede activar ahora, durante la configuración." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:100 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:99 msgid "Runtime utilities" msgstr "Utilidades de tiempo de ejecución" @@ -29103,11 +29056,6 @@ msgstr "Botón secundario pulsado." msgid "Secret" msgstr "Secreto" -#. Label for a CAPTCHA secret key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1020 -msgid "Secret key" -msgstr "Clave secreta" - #. Settings search entry label. Names the settings search entry in the settings UI. #. Short label in the secrets section. Keep it concise. Keep the tone plain and specific. #: src/features/user/components/modals/tabs/applications_tab/application_detail/SecretsSection.tsx:11 @@ -29925,7 +29873,7 @@ msgid "Set up authenticator app" msgstr "Configurar aplicación de autenticación" #. Option for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:953 +#: src/features/app/components/setup/SetupWizardSteps.tsx:946 msgid "Set up later" msgstr "Configurar más tarde" @@ -30427,7 +30375,7 @@ msgstr "Mostrar lista integrada de MD" msgid "Show just the typing indicator without avatars" msgstr "Mostrar solo el indicador de escritura sin avatares" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:308 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:284 msgid "Show keyboard mode intro" msgstr "Mostrar introducción al modo teclado" @@ -30538,7 +30486,7 @@ msgstr "Mostrar Neko" msgid "Show new device alerts" msgstr "Mostrar alertas de nuevos dispositivos" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:282 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:264 msgid "Show new device modal" msgstr "Mostrar modal de nuevo dispositivo" @@ -30820,7 +30768,7 @@ msgid "Signed-in devices" msgstr "Dispositivos con sesión iniciada" #. Label for Bluesky OAuth signing key ID input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1077 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1051 msgid "Signing key ID" msgstr "ID de clave de firma" @@ -30910,11 +30858,6 @@ msgstr "Una sola línea" msgid "Single user (all statuses)" msgstr "Usuario único (todos los estados)" -#. Label for a CAPTCHA site key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 -msgid "Site key" -msgstr "Clave del sitio" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:98 @@ -30964,7 +30907,7 @@ msgid "Skip the system leave notice — nobody gets pinged." msgstr "Omitir el aviso de salida del sistema: nadie recibirá una notificación." #. Description for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:957 +#: src/features/app/components/setup/SetupWizardSteps.tsx:950 msgid "Skip this now and configure it from the admin panel." msgstr "Omítelo ahora y configúralo desde el panel de administración." @@ -31212,17 +31155,17 @@ msgid "SMS verification is unavailable right now. Try again later or contact sup msgstr "La verificación por SMS no está disponible en este momento. Inténtalo de nuevo más tarde o contacta con el soporte técnico." #. Success message after validating SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1045 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 msgid "SMTP connection verified." msgstr "Conexión SMTP verificada." #. Label for SMTP host input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1033 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1007 msgid "SMTP host" msgstr "Servidor SMTP" #. Failure message after validating SMTP credentials when the server returns no error detail. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1049 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1023 msgid "SMTP validation failed." msgstr "La validación SMTP ha fallado." @@ -31402,7 +31345,7 @@ msgstr "Ha ocurrido un error. Inténtalo de nuevo más tarde." #. Inline error in the web deep-link prompt when opening the desktop app fails. #. Toast error shown when the mature content check request fails unexpectedly. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:18 -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:580 +#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 #: src/features/auth/flow/DesktopDeepLinkPrompt.tsx:31 msgid "Something went wrong. Try again." msgstr "Ha ocurrido un error. Inténtalo de nuevo." @@ -32099,6 +32042,11 @@ msgstr "Aún indexando. Vuelve a intentarlo en un momento" msgid "Still Neko" msgstr "Neko inmóvil" +#. Small toast shown only when an automatic background check before sign-in, sign-up or a similar request takes more than a couple of seconds. No user action needed. Keep it short and calm. +#: src/features/auth/altcha/CaptchaInterceptor.ts:13 +msgid "Still working on it…" +msgstr "Seguimos con ello…" + #. Stop-recording button label in the desktop voice message composer. #: src/features/voice/components/VoiceMessageComposerModal.tsx:65 msgid "Stop" @@ -33013,7 +32961,7 @@ msgid "Terms of service" msgstr "Condiciones del servicio" #. Label for Bluesky OAuth terms URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1069 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1043 msgid "Terms URL" msgstr "URL de las Condiciones del servicio" @@ -33023,7 +32971,7 @@ msgid "Terrorism or violent extremism" msgstr "Terrorismo o extremismo violento" #. Button that validates SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1041 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1015 msgid "Test SMTP" msgstr "Probar SMTP" @@ -33800,7 +33748,7 @@ msgid "This clears quick CSS, imported themes, uploaded assets, and local file r msgstr "Esto borra el CSS rápido, los temas importados, los recursos subidos y las referencias a archivos locales en este dispositivo." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:83 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:82 msgid "This clears your backend premium state entirely, including premium type, billing metadata, and override flags." msgstr "Esto borra por completo tu estado premium del backend, incluido el tipo de premium, los metadatos de facturación y los indicadores de estados forzados." @@ -34200,7 +34148,7 @@ msgid "This message no longer exists." msgstr "Este mensaje ya no existe." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:130 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:129 msgid "This nickname will only be visible in this community" msgstr "Este apodo solo será visible en esta comunidad" @@ -34277,12 +34225,12 @@ msgid "This removes all custom CSS overrides. Theme files in your library are no msgstr "Esto elimina todas las personalizaciones de CSS. Los archivos de temas de tu biblioteca no se verán afectados." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:50 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:49 msgid "This removes all previously authorized IP addresses on your account. The next login from any IP will require email verification." msgstr "Esto elimina todas las direcciones IP autorizadas previamente en tu cuenta. El próximo inicio de sesión desde cualquier IP requerirá verificación por correo electrónico." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:67 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:66 msgid "This removes all trusted domains. You will see the external link warning for all domains again." msgstr "Esto elimina todos los dominios de confianza. Volverás a ver la advertencia de enlace externo para todos los dominios." @@ -34949,7 +34897,7 @@ msgstr "Los cambios en el icono de la bandeja solo se aplican después de reinic msgid "Trending GIFs" msgstr "GIF del momento" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:383 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:359 msgid "Trigger React crash" msgstr "Provocar un error de React" @@ -35008,7 +34956,7 @@ msgid "Trusted domains" msgstr "Dominios de confianza" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:55 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:54 msgid "Trusted domains cleared." msgstr "Dominios de confianza borrados." @@ -35054,7 +35002,6 @@ msgid "Try a different variable name or clear the search." msgstr "Prueba con otro nombre de variable o borra la búsqueda." #. Generic action label for retrying a failed or interrupted operation. -#: src/features/auth/components/AltchaVerification.tsx:53 #: src/features/auth/flow/AuthRouteLoadError.tsx:22 #: src/features/i18n/utils/CommonMessageDescriptors.ts:75 msgid "Try again" @@ -35132,10 +35079,6 @@ msgstr "Probar con una llave de seguridad o clave de acceso" msgid "Try sending your message again." msgstr "Intenta enviar tu mensaje de nuevo." -#: src/features/auth/components/modals/CaptchaModal.tsx:177 -msgid "Try Turnstile instead" -msgstr "Prueba Turnstile en su lugar" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:135 msgid "TTS" @@ -36890,7 +36833,7 @@ msgid "Use this when troubleshooting the client or collecting logs. It may add v msgstr "Úsalo para solucionar problemas del cliente o recopilar registros. Puede añadir mensajes detallados a la consola del navegador para el cliente actual." #. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1037 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1011 msgid "Use TLS" msgstr "Usar TLS" @@ -37056,7 +36999,7 @@ msgstr "Volumen del usuario" #. Generic form-field label for a username. #. Label for SMTP username input. #. Settings search entry label. Also used as a search synonym in the settings search bar. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 #: src/features/i18n/utils/CommonMessageDescriptors.ts:572 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:218 #: src/features/user/components/modals/tabs/my_profile_tab/MyProfileTabUsernameSection.tsx:56 @@ -37337,11 +37280,6 @@ msgstr "Verificar número de teléfono" msgid "Verify phone number form" msgstr "Formulario de verificación del número de teléfono" -#. Short label in the authentication captcha modal. Keep the tone plain and specific. -#: src/features/auth/components/modals/CaptchaModal.tsx:17 -msgid "Verify you're human" -msgstr "Verifica que eres humano" - #. Title of the error modal shown when an unverified account tries to start a DM. #. Title shown when an unverified account cannot start a DM or group DM. #: src/features/app/components/alerts/DmActionErrorModal.tsx:40 @@ -37369,22 +37307,22 @@ msgid "Verify your email before adding an authenticator app." msgstr "Verifica tu correo electrónico antes de añadir una aplicación de autenticación." #. Description text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:117 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:116 msgid "Verify your email before changing your community nickname, avatar, banner, bio, pronouns, or accent color." msgstr "Verifica tu correo electrónico antes de cambiar tu apodo de comunidad, avatar, banner, biografía, pronombres o color de énfasis." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:121 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:120 msgid "Verify your email before changing your username, display name, avatar, banner, bio, pronouns, time zone, or {premiumProductName} badge privacy." msgstr "Verifica tu correo electrónico antes de cambiar tu nombre de usuario, nombre visible, avatar, banner, biografía, pronombres, zona horaria o la privacidad de la insignia de {premiumProductName}." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:85 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:84 msgid "Verify your email before editing this community profile. You can still preview it here." msgstr "Verifica tu correo electrónico antes de editar este perfil de comunidad. Aún puedes previsualizarlo aquí." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:89 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:88 msgid "Verify your email before editing your profile. You can still preview it here." msgstr "Verifica tu correo electrónico antes de editar tu perfil. Puedes previsualizarlo aquí." @@ -37416,12 +37354,12 @@ msgid "Verify your email to continue using {productName}." msgstr "Verifica tu correo electrónico para seguir usando {productName}." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:109 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:108 msgid "Verify your email to edit this community profile" msgstr "Verifica tu correo para editar este perfil de la comunidad" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:113 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:112 msgid "Verify your email to edit your profile" msgstr "Verifica tu correo para editar tu perfil" @@ -38398,10 +38336,6 @@ msgstr "Hemos bajado el precio de {premiumProductName} en Brasil. Ahora cuesta { msgid "We need one verification step before you continue. This helps protect accounts and keep spam off {productName}." msgstr "Necesitamos un paso de verificación antes de que puedas continuar. Esto ayuda a proteger las cuentas y a mantener el spam fuera de {productName}." -#: src/features/auth/components/modals/CaptchaModal.tsx:128 -msgid "We need to make sure you're not a bot. Complete the verification below." -msgstr "Tenemos que asegurarnos de que no eres un bot. Completa la verificación a continuación." - #. Required-action modal intro text when both email and phone verification are required. #: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:216 msgid "We need two verification steps before you continue. We will show one step at a time." @@ -39256,7 +39190,7 @@ msgid "You can't befriend yourself" msgstr "No puedes ser tu propio amigo" #. Label in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:134 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:133 msgid "You can't change your nickname here" msgstr "No puedes cambiar tu apodo aquí" @@ -39506,7 +39440,7 @@ msgid "You have unsaved changes." msgstr "Tienes cambios sin guardar." #. Warning text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:81 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:80 msgid "You have unsaved changes. Save or reset before leaving." msgstr "Tienes cambios sin guardar. Guarda o restablece antes de salir." @@ -40031,10 +39965,6 @@ msgstr "No se ha podido completar tu acción porque ha sido marcada por nuestros msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Tu solicitud está pendiente de revisión. Aún puedes actualizar los datos de tu comunidad o retirar la solicitud." -#: src/features/auth/components/AltchaVerification.tsx:50 -msgid "Your browser couldn't finish the check." -msgstr "Tu navegador no pudo completar la verificación." - #. Body of the browser-audio-required modal explaining why the user must click before audio can play. #: src/features/voice/components/modals/AudioPlaybackPermissionModal.tsx:12 msgid "Your browser requires user interaction before audio can be played. Click the button below to enable voice chat." @@ -40386,7 +40316,7 @@ msgid "YouTube enrichment" msgstr "Enriquecimiento de YouTube" #. Setup wizard title for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:977 +#: src/features/app/components/setup/SetupWizardSteps.tsx:970 msgid "YouTube previews" msgstr "Vistas previas de YouTube" diff --git a/fluxer_app/src/features/i18n/locales/fi/messages.po b/fluxer_app/src/features/i18n/locales/fi/messages.po index d22650835..76c6bce5d 100644 --- a/fluxer_app/src/features/i18n/locales/fi/messages.po +++ b/fluxer_app/src/features/i18n/locales/fi/messages.po @@ -2395,11 +2395,6 @@ msgstr "60 sekuntia" msgid "7 days" msgstr "7 päivää" -#. Required-action error when the API requires a captcha for phone verification. -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 -msgid "A browser check is required before phone verification. Try again from the sign-in page or contact support." -msgstr "Selaimen tarkistus vaaditaan ennen puhelinnumeron vahvistamista. Yritä uudelleen kirjautumissivulta tai ota yhteyttä tukeen." - #. Hint shown beside in:. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:77 msgid "a channel" @@ -2928,7 +2923,7 @@ msgid "Add a friend to get started." msgstr "Aloita lisäämällä kaveri." #. Setup wizard body for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:973 +#: src/features/app/components/setup/SetupWizardSteps.tsx:966 msgid "Add a Klipy API key to enable GIF search at runtime." msgstr "Lisää Klipy API -avain ottaaksesi GIF-haun käyttöön ajon aikana." @@ -2965,7 +2960,7 @@ msgid "Add a working email" msgstr "Lisää toimiva sähköpostiosoite" #. Setup wizard body for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:981 +#: src/features/app/components/setup/SetupWizardSteps.tsx:974 msgid "Add a YouTube Data API key to enrich YouTube links." msgstr "Lisää YouTube Data API -avain rikastamaan YouTube-linkkejä." @@ -3011,7 +3006,7 @@ msgid "Add another reaction" msgstr "Lisää toinen reaktio" #. Setup wizard body for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1005 +#: src/features/app/components/setup/SetupWizardSteps.tsx:990 msgid "Add Bluesky OAuth client metadata and a signing key." msgstr "Lisää Bluesky OAuth -asiakkaan metatiedot ja allekirjoitusavain." @@ -3161,7 +3156,7 @@ msgid "Add shortcut" msgstr "Lisää pikanäppäin" #. Setup wizard body for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:997 +#: src/features/app/components/setup/SetupWizardSteps.tsx:982 msgid "Add SMTP credentials so the instance can send verification and notification email." msgstr "Lisää SMTP-tunnistetiedot, jotta instanssi voi lähettää vahvistus- ja ilmoitussähköposteja." @@ -3188,7 +3183,7 @@ msgid "Add stream" msgstr "Lisää striimi" #. Description for configuring an optional setup wizard integration now. -#: src/features/app/components/setup/SetupWizardSteps.tsx:965 +#: src/features/app/components/setup/SetupWizardSteps.tsx:958 msgid "Add the credentials during setup." msgstr "Lisää tunnistetiedot asennuksen aikana." @@ -3954,7 +3949,7 @@ msgid "An invalid status was provided. You can now close this tab and return to msgstr "Annettu tila on virheellinen. Voit nyt sulkea tämän välilehden ja palata takaisin sovellukseen." #. Short label in the authentication auth form. Keep the tone plain and specific. -#: src/features/auth/hooks/useAuthForm.ts:13 +#: src/features/auth/hooks/useAuthForm.ts:12 msgid "An unexpected error occurred" msgstr "Tapahtui odottamaton virhe" @@ -4262,7 +4257,7 @@ msgid "Anyone can request an account, but an administrator must approve it." msgstr "Kuka tahansa voi pyytää tiliä, mutta ylläpitäjän on hyväksyttävä se." #. Label for an integration API key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1018 +#: src/features/app/components/setup/SetupWizardSteps.tsx:994 msgid "API key" msgstr "API-avain" @@ -4958,7 +4953,7 @@ msgid "Authorized apps" msgstr "Valtuutetut sovellukset" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:38 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:37 msgid "Authorized IPs cleared. New logins will require email verification." msgstr "Valtuutetut IP-osoitteet tyhjennetty. Uudet kirjautumiset vaativat sähköpostivahvistuksen." @@ -5730,7 +5725,7 @@ msgid "Bluesky connections" msgstr "Bluesky-yhteydet" #. Setup wizard title for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1001 +#: src/features/app/components/setup/SetupWizardSteps.tsx:986 msgid "Bluesky OAuth" msgstr "Bluesky OAuth" @@ -5897,11 +5892,6 @@ msgstr "Botin käyttöoikeudet eivät voi olla negatiivisia." msgid "Bot profile" msgstr "Botin profiili" -#. Setup wizard title for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:985 -msgid "Bot protection" -msgstr "Bottisuojaus" - #. Short label in the authentication OAUTH scopes step. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/OAuthScopesStep.tsx:20 msgid "Bot scope requested" @@ -6554,11 +6544,6 @@ msgstr "Ei muokattavissa" msgid "Cannot delete account" msgstr "Tiliä ei voi poistaa" -#. Toast error shown when captcha verification fails inside the auth captcha interceptor. -#: src/features/auth/components/CaptchaInterceptor.tsx:15 -msgid "Captcha verification failed. Try again." -msgstr "Captcha-varmennus epäonnistui. Yritä uudelleen." - #. Section header in the Linux audio source picker. Lists capture-target options (entire system / specific apps). #: src/features/voice/components/AudioSourcePickerLinux.tsx:50 msgid "Capture" @@ -7398,10 +7383,6 @@ msgstr "Tarkistetaan käyttöoikeutta..." msgid "Checking screen recording permission..." msgstr "Tarkistetaan näytön tallennuslupaa…" -#: src/features/auth/components/AltchaVerification.tsx:62 -msgid "Checking your browser. This takes a few seconds." -msgstr "Selataan selaimesi asetuksia. Tämä kestää muutaman sekunnin." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -7571,11 +7552,6 @@ msgstr "Valitse Arkisto ja sitten Lisää Dockiin." msgid "Choose friends to message." msgstr "Valitse kaverit, joille lähetät viestin." -#. Setup wizard body for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:989 -msgid "Choose hCaptcha or Cloudflare Turnstile for signup challenges." -msgstr "Valitse hCaptcha tai Cloudflare Turnstile rekisteröitymishaasteisiin." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:455 msgid "Choose how chat moves after you send a message" @@ -7982,17 +7958,17 @@ msgid "Clear selection" msgstr "Tyhjennä valinta" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:88 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:87 msgid "Clear trust all setting" msgstr "Tyhjennä luota kaikki -asetus" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:63 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:62 msgid "Clear trusted domains" msgstr "Tyhjennä luotetut verkkotunnukset" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:96 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:95 msgid "Clear trusted domains ({trustedDomainsCount})" msgstr "Tyhjennä luotetut verkkotunnukset ({trustedDomainsCount})" @@ -8002,7 +7978,7 @@ msgid "Clearer text" msgstr "Selkeämpi teksti" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:108 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:107 msgid "Clearing trusted domains..." msgstr "Tyhjennetään luotetut verkkotunnukset..." @@ -8100,7 +8076,7 @@ msgid "Client" msgstr "Asiakasohjelma" #. Label for Bluesky OAuth client name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1057 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1031 msgid "Client name" msgstr "Asiakkaan nimi" @@ -8117,7 +8093,7 @@ msgid "Client secret regenerated. Update any code that uses the old secret." msgstr "Asiakassalaisuus luotu uudelleen. Päivitä kaikki koodi, joka käyttää vanhaa salaisuutta." #. Label for Bluesky OAuth client URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1061 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 msgid "Client URL" msgstr "Asiakkaan URL" @@ -8269,11 +8245,6 @@ msgstr "Suljetut yksityisviestit" msgid "Cloud upload" msgstr "Pilvilataus" -#. Cloudflare Turnstile provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1014 -msgid "Cloudflare Turnstile" -msgstr "Cloudflare Turnstile" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:58 msgid "Coal" @@ -8669,7 +8640,7 @@ msgstr "Yhteisön nimi" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:126 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:125 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:113 msgid "Community nickname" msgstr "Yhteisön lempinimi" @@ -8722,7 +8693,7 @@ msgid "Community profile" msgstr "Yhteisöprofiili" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:73 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:72 msgid "Community profile updated" msgstr "Yhteisöprofiili päivitetty" @@ -8880,7 +8851,7 @@ msgid "Configure keyboard shortcuts" msgstr "Määritä pikanäppäimet" #. Option for configuring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:961 +#: src/features/app/components/setup/SetupWizardSteps.tsx:954 msgid "Configure now" msgstr "Määritä nyt" @@ -12341,7 +12312,7 @@ msgstr "Katkaise yhteys kanavalta {channel}" msgid "Disconnect from voice" msgstr "Katkaise puhelu" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:261 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:243 msgid "Disconnect socket" msgstr "Katkaise socket-yhteys" @@ -12479,7 +12450,7 @@ msgstr "Näyttötila" #. Short label in the inputs tab. Keep it concise. #. Short label in the my profile tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:22 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:138 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:137 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:61 msgid "Display name" msgstr "Näyttönimi" @@ -12625,7 +12596,7 @@ msgstr "Haluatko liittyä yhteisöön {communityName}?" #. Label in the accessibility tab. #. Label in the my profile tab. #: src/features/user/components/modals/tabs/AccessibilityTab.tsx:54 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:146 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:145 msgid "Doc, I'm from the future. I came here in a time machine that you invented. Now, I need your help to get back to the year 1985." msgstr "Doc, tulin tulevaisuudesta. Saavuin tänne aikakoneella, jonka sinä keksit. Nyt tarvitsen apuasi päästäkseni takaisin vuoteen 1985." @@ -13262,7 +13233,7 @@ msgid "Edit your messages above or below" msgstr "Muokkaa viestejäsi yllä tai alla" #. Button or menu action label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:93 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:92 msgid "Edit your profile appearance and see a live preview" msgstr "Muokkaa profiilisi ulkoasua ja katso esikatselua reaaliajassa" @@ -13330,7 +13301,7 @@ msgid "Email changed" msgstr "Sähköpostiosoite vaihdettu" #. Setup wizard title for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:993 +#: src/features/app/components/setup/SetupWizardSteps.tsx:978 msgid "Email delivery" msgstr "Sähköpostin lähetys" @@ -13635,7 +13606,7 @@ msgid "Enable beta feature" msgstr "Ota beetaominaisuus käyttöön" #. Label for enabling Bluesky OAuth in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1053 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1027 msgid "Enable Bluesky OAuth" msgstr "Ota Bluesky OAuth käyttöön" @@ -13668,7 +13639,7 @@ msgid "Enable developer mode" msgstr "Ota kehittäjätila käyttöön" #. Label for enabling SMTP email delivery in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1021 +#: src/features/app/components/setup/SetupWizardSteps.tsx:995 msgid "Enable email delivery" msgstr "Ota sähköpostien lähetys käyttöön" @@ -14705,7 +14676,7 @@ msgid "Failed to ban member. Try again." msgstr "Porttikiellon antaminen jäsenelle epäonnistui. Yritä uudelleen." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:59 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:58 msgid "Failed to clear trusted domains." msgstr "Luotettujen verkkotunnusten tyhjennys epäonnistui." @@ -14762,7 +14733,7 @@ msgid "Failed to enable camera." msgstr "Kameran käynnistys epäonnistui." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:42 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:41 msgid "Failed to forget authorized IPs. Try again." msgstr "Valtuutettujen IP-osoitteiden unohtaminen epäonnistui. Yritä uudelleen." @@ -14907,7 +14878,7 @@ msgid "Failed to resend verification code. Try again later." msgstr "Vahvistuskoodin uudelleenlähetys epäonnistui. Yritä myöhemmin uudelleen." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:75 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:74 msgid "Failed to reset premium state." msgstr "Premium-tilan nollaus epäonnistui." @@ -15581,7 +15552,7 @@ msgstr "Pakota latausluuranko" msgid "Force mature media" msgstr "Pakota aikuisille tarkoitettu media" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:276 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:258 msgid "Force move to AFK channel" msgstr "Pakota siirto AFK-kanavalle" @@ -15640,7 +15611,7 @@ msgid "Forced off" msgstr "Pakotettu pois päältä" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:46 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:45 msgid "Forget authorized IPs" msgstr "Unohda valtuutetut IP-osoitteet" @@ -15650,7 +15621,7 @@ msgid "Forget subscriptions" msgstr "Unohda tilaukset" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:104 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:103 msgid "Forgetting authorized IPs..." msgstr "Valtuutettujen IP-osoitteiden unohtaminen..." @@ -15907,12 +15878,12 @@ msgid "from <0>{0}" msgstr "yhteisöstä <0>{0}" #. Label for SMTP from email input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1025 +#: src/features/app/components/setup/SetupWizardSteps.tsx:999 msgid "From email" msgstr "Lähettäjän sähköpostiosoite" #. Label for SMTP from name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1029 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1003 msgid "From name" msgstr "Lähettäjän nimi" @@ -16204,7 +16175,7 @@ msgid "GIF preview" msgstr "GIF-esikatselu" #. Setup wizard title for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:969 +#: src/features/app/components/setup/SetupWizardSteps.tsx:962 msgid "GIF search" msgstr "GIF-haku" @@ -16853,21 +16824,12 @@ msgstr "Onko sinulla lahjakoodi? Lunasta se avataksesi {PREMIUM_PRODUCT_NAME}." msgid "Having fun?" msgstr "Pidätkö hauskaa?" -#: src/features/auth/components/modals/CaptchaModal.tsx:175 -msgid "Having issues? Try hCaptcha instead" -msgstr "Onko ongelmia? Kokeile sen sijaan hCaptchaa" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:63 msgctxt "us-state" msgid "Hawaii" msgstr "Havaiji" -#. hCaptcha provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1013 -msgid "hCaptcha" -msgstr "hCaptcha" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:238 msgid "HD" @@ -19768,7 +19730,7 @@ msgid "Logo" msgstr "Logo" #. Label for Bluesky OAuth logo URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1065 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1039 msgid "Logo URL" msgstr "Logon URL-osoite" @@ -22941,7 +22903,7 @@ msgid "No tokens match \"{searchQuery}\"." msgstr "Mikään tunnus ei vastaa hakua \"{searchQuery}\"." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:92 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:91 msgid "No trusted domains" msgstr "Ei luotettuja verkkotunnuksia" @@ -23696,10 +23658,6 @@ msgstr "Avaa selainvalitsin" msgid "Open call view" msgstr "Avaa puhelunäkymä" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:288 -msgid "Open captcha modal" -msgstr "Avaa captcha-modaali" - #. Accessible label for the channel header title button in a community channel. #: src/features/channel/components/channel_header/shared.ts:14 msgid "Open channel details for {channelName}" @@ -23712,7 +23670,7 @@ msgstr "Avaa kanavan {channelName} tiedot" msgid "Open chat" msgstr "Avaa chat" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:314 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:290 msgid "Open claim account modal" msgstr "Avaa tilin viimeistelyikkuna" @@ -23944,11 +23902,11 @@ msgstr "Avaa tarra selaimessa" msgid "Open streaming privacy settings" msgstr "Avaa suoratoiston yksityisyysasetukset" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:327 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:303 msgid "Open sudo verification modal" msgstr "Avaa sudo-vahvistusikkuna" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:342 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:318 msgid "Open system DM" msgstr "Avaa järjestelmän yksityisviesti" @@ -24430,7 +24388,7 @@ msgstr "Pääsyavaimet edellyttävät allekirjoitettua macOS-pakettia, jossa on #. Generic form-field label for a password. #. Label for SMTP password input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1036 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1010 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:146 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:183 @@ -25212,7 +25170,7 @@ msgid "Popup" msgstr "Ponnahdusikkuna" #. Label for SMTP port input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1034 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1008 msgid "Port" msgstr "Portti" @@ -25338,7 +25296,7 @@ msgid "Premium since date" msgstr "Premium-tilaus alkaen" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:71 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:70 msgid "Premium state reset on the backend." msgstr "Premium-tila nollattu taustajärjestelmässä." @@ -25608,7 +25566,7 @@ msgid "Privacy settings" msgstr "Tietosuoja-asetukset" #. Label for Bluesky OAuth privacy URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1073 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1047 msgid "Privacy URL" msgstr "Tietosuojakäytännön URL" @@ -25633,7 +25591,7 @@ msgid "Private details" msgstr "Yksityiset tiedot" #. Label for Bluesky OAuth private key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1081 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1055 msgid "Private key" msgstr "Yksityinen avain" @@ -25699,18 +25657,18 @@ msgstr "Profiilin väri" #. Settings section label for editing profile appearance and identity. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:105 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:104 #: src/features/user/components/settings_utils/section_registry/GeneralSettingsSections.ts:6 msgid "Profile customization" msgstr "Profiilin muokkaus" #. Label in the my profile tab. Preserve {selectedGuildName}; it is inserted by code. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:101 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:100 msgid "Profile customization for {selectedGuildName}" msgstr "Profiilin muokkaus yhteisössä {selectedGuildName}" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:97 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:96 msgid "Profile customization form" msgstr "Profiilin muokkauslomake" @@ -25775,7 +25733,7 @@ msgid "Profile type" msgstr "Profiilityyppi" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:77 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:76 msgid "Profile updated" msgstr "Profiili päivitetty" @@ -25812,7 +25770,7 @@ msgstr "Kysy, kun uusi äänilaite yhdistetään" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:142 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:141 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:177 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:160 msgid "Pronouns" @@ -25842,11 +25800,6 @@ msgstr "Anna ilmoittamasi henkilön käyttäjätunnus tai käyttäjänimi." msgid "Provide your full legal name for the declaration." msgstr "Anna koko virallinen nimesi vakuutusta varten." -#. Label for an integration provider choice. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 -msgid "Provider" -msgstr "Palveluntarjoaja" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27626,7 +27579,7 @@ msgid "Reset password" msgstr "Palauta salasana" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:79 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:78 msgid "Reset premium state" msgstr "Nollaa premium-tila" @@ -27635,7 +27588,7 @@ msgstr "Nollaa premium-tila" msgid "Reset slider to default value" msgstr "Palauta liukusäädin oletusarvoon" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:247 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:229 msgid "Reset socket" msgstr "Nollaa socket" @@ -27684,7 +27637,7 @@ msgid "Reset zoom" msgstr "Palauta zoomaus" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:112 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:111 msgid "Resetting premium state..." msgstr "Nollataan premium-tilaa..." @@ -28315,7 +28268,7 @@ msgid "Run the instance as one community instead of many. This can only be enabl msgstr "Käytä instanssia yhtenä yhteisönä usean sijaan. Tämä voidaan ottaa käyttöön vain nyt, asennuksen aikana." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:100 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:99 msgid "Runtime utilities" msgstr "Ajoaikatyökalut" @@ -29103,11 +29056,6 @@ msgstr "Toissijaista painiketta napsautettu." msgid "Secret" msgstr "Salaisuus" -#. Label for a CAPTCHA secret key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1020 -msgid "Secret key" -msgstr "Salainen avain" - #. Settings search entry label. Names the settings search entry in the settings UI. #. Short label in the secrets section. Keep it concise. Keep the tone plain and specific. #: src/features/user/components/modals/tabs/applications_tab/application_detail/SecretsSection.tsx:11 @@ -29925,7 +29873,7 @@ msgid "Set up authenticator app" msgstr "Määritä todennussovellus" #. Option for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:953 +#: src/features/app/components/setup/SetupWizardSteps.tsx:946 msgid "Set up later" msgstr "Määritä myöhemmin" @@ -30427,7 +30375,7 @@ msgstr "Näytä yksityisviestiluettelo" msgid "Show just the typing indicator without avatars" msgstr "Näytä vain kirjoitusilmaisin ilman profiilikuvia" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:308 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:284 msgid "Show keyboard mode intro" msgstr "Näytä näppäimistötilan esittely" @@ -30538,7 +30486,7 @@ msgstr "Näytä Neko" msgid "Show new device alerts" msgstr "Näytä uusien laitteiden ilmoitukset" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:282 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:264 msgid "Show new device modal" msgstr "Näytä uuden laitteen modaali-ikkuna" @@ -30820,7 +30768,7 @@ msgid "Signed-in devices" msgstr "Kirjautuneet laitteet" #. Label for Bluesky OAuth signing key ID input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1077 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1051 msgid "Signing key ID" msgstr "Allekirjoitusavaimen tunnus" @@ -30910,11 +30858,6 @@ msgstr "Yksi rivi" msgid "Single user (all statuses)" msgstr "Yksi käyttäjä (kaikki tilat)" -#. Label for a CAPTCHA site key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 -msgid "Site key" -msgstr "Sivuston avain" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:98 @@ -30964,7 +30907,7 @@ msgid "Skip the system leave notice — nobody gets pinged." msgstr "Ohita järjestelmän poistumisilmoitus – kukaan ei saa ilmoitusta." #. Description for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:957 +#: src/features/app/components/setup/SetupWizardSteps.tsx:950 msgid "Skip this now and configure it from the admin panel." msgstr "Ohita tämä nyt ja määritä se hallintapaneelista." @@ -31212,17 +31155,17 @@ msgid "SMS verification is unavailable right now. Try again later or contact sup msgstr "Tekstiviestivahvistus ei ole käytettävissä juuri nyt. Yritä myöhemmin uudelleen tai ota yhteyttä tukeen." #. Success message after validating SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1045 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 msgid "SMTP connection verified." msgstr "SMTP-yhteys vahvistettu." #. Label for SMTP host input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1033 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1007 msgid "SMTP host" msgstr "SMTP-isäntä" #. Failure message after validating SMTP credentials when the server returns no error detail. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1049 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1023 msgid "SMTP validation failed." msgstr "SMTP-vahvistus epäonnistui." @@ -31402,7 +31345,7 @@ msgstr "Jokin meni pieleen. Yritä myöhemmin uudelleen." #. Inline error in the web deep-link prompt when opening the desktop app fails. #. Toast error shown when the mature content check request fails unexpectedly. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:18 -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:580 +#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 #: src/features/auth/flow/DesktopDeepLinkPrompt.tsx:31 msgid "Something went wrong. Try again." msgstr "Jokin meni pieleen. Yritä uudelleen." @@ -32099,6 +32042,11 @@ msgstr "Indeksointi käynnissä – tarkista hetken kuluttua" msgid "Still Neko" msgstr "Liikkumaton Neko" +#. Small toast shown only when an automatic background check before sign-in, sign-up or a similar request takes more than a couple of seconds. No user action needed. Keep it short and calm. +#: src/features/auth/altcha/CaptchaInterceptor.ts:13 +msgid "Still working on it…" +msgstr "Vielä työstetään…" + #. Stop-recording button label in the desktop voice message composer. #: src/features/voice/components/VoiceMessageComposerModal.tsx:65 msgid "Stop" @@ -33013,7 +32961,7 @@ msgid "Terms of service" msgstr "Käyttöehdot" #. Label for Bluesky OAuth terms URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1069 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1043 msgid "Terms URL" msgstr "Käyttöehtojen URL-osoite" @@ -33023,7 +32971,7 @@ msgid "Terrorism or violent extremism" msgstr "Terrorismi tai väkivaltainen ekstremismi" #. Button that validates SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1041 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1015 msgid "Test SMTP" msgstr "Testaa SMTP-yhteys" @@ -33800,7 +33748,7 @@ msgid "This clears quick CSS, imported themes, uploaded assets, and local file r msgstr "Tämä tyhjentää pika-CSS:n, tuodut teemat, ladatut resurssit ja paikalliset tiedostoviittaukset tällä laitteella." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:83 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:82 msgid "This clears your backend premium state entirely, including premium type, billing metadata, and override flags." msgstr "Tämä tyhjentää koko premium-tilasi taustajärjestelmästä, mukaan lukien premium-tyypin, laskutustiedot ja ohituskytkimet." @@ -34200,7 +34148,7 @@ msgid "This message no longer exists." msgstr "Tätä viestiä ei enää ole." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:130 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:129 msgid "This nickname will only be visible in this community" msgstr "Tämä lempinimi näkyy vain tässä yhteisössä" @@ -34277,12 +34225,12 @@ msgid "This removes all custom CSS overrides. Theme files in your library are no msgstr "Tämä poistaa kaikki mukautetut CSS-ohitukset. Kirjastosi teematiedostot eivät muutu." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:50 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:49 msgid "This removes all previously authorized IP addresses on your account. The next login from any IP will require email verification." msgstr "Tämä poistaa kaikki aiemmin valtuutetut IP-osoitteet tililtäsi. Seuraava kirjautuminen mistä tahansa IP-osoitteesta vaatii sähköpostivahvistuksen." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:67 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:66 msgid "This removes all trusted domains. You will see the external link warning for all domains again." msgstr "Tämä poistaa kaikki luotetut verkkotunnukset. Näet ulkoisen linkin varoituksen uudelleen kaikille verkkotunnuksille." @@ -34949,7 +34897,7 @@ msgstr "Ilmaisinalueen kuvakkeen muutokset tulevat voimaan vasta uudelleenkäynn msgid "Trending GIFs" msgstr "Suositut GIFit" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:383 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:359 msgid "Trigger React crash" msgstr "Aiheuta React-kaatuminen" @@ -35008,7 +34956,7 @@ msgid "Trusted domains" msgstr "Luotetut verkkotunnukset" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:55 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:54 msgid "Trusted domains cleared." msgstr "Luotetut verkkotunnukset tyhjennetty." @@ -35054,7 +35002,6 @@ msgid "Try a different variable name or clear the search." msgstr "Kokeile toista muuttujan nimeä tai tyhjennä haku." #. Generic action label for retrying a failed or interrupted operation. -#: src/features/auth/components/AltchaVerification.tsx:53 #: src/features/auth/flow/AuthRouteLoadError.tsx:22 #: src/features/i18n/utils/CommonMessageDescriptors.ts:75 msgid "Try again" @@ -35132,10 +35079,6 @@ msgstr "Käytä mieluummin turva-avainta tai pääsyavainta" msgid "Try sending your message again." msgstr "Yritä lähettää viesti uudelleen." -#: src/features/auth/components/modals/CaptchaModal.tsx:177 -msgid "Try Turnstile instead" -msgstr "Kokeile sen sijaan Turnstile-varmennusta" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:135 msgid "TTS" @@ -36890,7 +36833,7 @@ msgid "Use this when troubleshooting the client or collecting logs. It may add v msgstr "Käytä tätä vianmääritykseen tai lokien keräämiseen. Se voi lisätä yksityiskohtaisia viestejä selaimen konsoliin nykyiselle asiakasohjelmalle." #. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1037 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1011 msgid "Use TLS" msgstr "Käytä TLS:ää" @@ -37056,7 +36999,7 @@ msgstr "Käyttäjän äänenvoimakkuus" #. Generic form-field label for a username. #. Label for SMTP username input. #. Settings search entry label. Also used as a search synonym in the settings search bar. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 #: src/features/i18n/utils/CommonMessageDescriptors.ts:572 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:218 #: src/features/user/components/modals/tabs/my_profile_tab/MyProfileTabUsernameSection.tsx:56 @@ -37337,11 +37280,6 @@ msgstr "Vahvista puhelinnumero" msgid "Verify phone number form" msgstr "Vahvista puhelinnumero -lomake" -#. Short label in the authentication captcha modal. Keep the tone plain and specific. -#: src/features/auth/components/modals/CaptchaModal.tsx:17 -msgid "Verify you're human" -msgstr "Vahvista, että olet ihminen" - #. Title of the error modal shown when an unverified account tries to start a DM. #. Title shown when an unverified account cannot start a DM or group DM. #: src/features/app/components/alerts/DmActionErrorModal.tsx:40 @@ -37369,22 +37307,22 @@ msgid "Verify your email before adding an authenticator app." msgstr "Vahvista sähköpostiosoitteesi ennen todennussovelluksen lisäämistä." #. Description text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:117 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:116 msgid "Verify your email before changing your community nickname, avatar, banner, bio, pronouns, or accent color." msgstr "Vahvista sähköpostiosoitteesi ennen kuin vaihdat yhteisön lempinimeäsi, avataria, banneria, kuvaustasi, pronomineja tai korostusväriä." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:121 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:120 msgid "Verify your email before changing your username, display name, avatar, banner, bio, pronouns, time zone, or {premiumProductName} badge privacy." msgstr "Vahvista sähköpostiosoitteesi ennen kuin vaihdat käyttäjänimeäsi, näyttönimeäsi, avataria, banneria, kuvaustasi, pronomineja, aikavyöhykettä tai {premiumProductName}-merkin yksityisyyttä." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:85 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:84 msgid "Verify your email before editing this community profile. You can still preview it here." msgstr "Vahvista sähköpostiosoitteesi ennen yhteisöprofiilin muokkaamista. Voit esikatsella sitä täällä." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:89 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:88 msgid "Verify your email before editing your profile. You can still preview it here." msgstr "Vahvista sähköpostiosoitteesi ennen profiilin muokkaamista. Voit esikatsella sitä täällä." @@ -37416,12 +37354,12 @@ msgid "Verify your email to continue using {productName}." msgstr "Vahvista sähköpostiosoitteesi jatkaaksesi {productName}-palvelun käyttöä." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:109 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:108 msgid "Verify your email to edit this community profile" msgstr "Vahvista sähköpostiosoitteesi muokataksesi yhteisöprofiilia" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:113 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:112 msgid "Verify your email to edit your profile" msgstr "Vahvista sähköpostiosoitteesi muokataksesi profiiliasi" @@ -38398,10 +38336,6 @@ msgstr "Laskimme tuotteen {premiumProductName} hintaa Brasiliassa. Se on nyt {mo msgid "We need one verification step before you continue. This helps protect accounts and keep spam off {productName}." msgstr "Tarvitsemme yhden vahvistusvaiheen, ennen kuin voit jatkaa. Tämä auttaa suojaamaan tilejä ja pitämään roskapostin poissa palvelusta {productName}." -#: src/features/auth/components/modals/CaptchaModal.tsx:128 -msgid "We need to make sure you're not a bot. Complete the verification below." -msgstr "Varmistetaan, ettet ole botti. Tee alla oleva vahvistus." - #. Required-action modal intro text when both email and phone verification are required. #: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:216 msgid "We need two verification steps before you continue. We will show one step at a time." @@ -39256,7 +39190,7 @@ msgid "You can't befriend yourself" msgstr "Et voi ystävystyä itsesi kanssa" #. Label in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:134 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:133 msgid "You can't change your nickname here" msgstr "Et voi vaihtaa lempinimeäsi täällä" @@ -39506,7 +39440,7 @@ msgid "You have unsaved changes." msgstr "Sinulla on tallentamattomia muutoksia." #. Warning text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:81 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:80 msgid "You have unsaved changes. Save or reset before leaving." msgstr "Sinulla on tallentamattomia muutoksia. Tallenna tai palauta ennen poistumista." @@ -40031,10 +39965,6 @@ msgstr "Toimintoasi ei voitu suorittaa, koska turvajärjestelmämme merkitsivät msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Hakemuksesi odottaa tarkistusta. Voit edelleen päivittää listauksesi tietoja tai peruuttaa hakemuksen." -#: src/features/auth/components/AltchaVerification.tsx:50 -msgid "Your browser couldn't finish the check." -msgstr "Selaimesi ei saanut tarkistusta valmiiksi." - #. Body of the browser-audio-required modal explaining why the user must click before audio can play. #: src/features/voice/components/modals/AudioPlaybackPermissionModal.tsx:12 msgid "Your browser requires user interaction before audio can be played. Click the button below to enable voice chat." @@ -40386,7 +40316,7 @@ msgid "YouTube enrichment" msgstr "YouTube-rikastaminen" #. Setup wizard title for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:977 +#: src/features/app/components/setup/SetupWizardSteps.tsx:970 msgid "YouTube previews" msgstr "YouTube-esikatselut" diff --git a/fluxer_app/src/features/i18n/locales/fr/messages.po b/fluxer_app/src/features/i18n/locales/fr/messages.po index 271ef3c38..4521e85b5 100644 --- a/fluxer_app/src/features/i18n/locales/fr/messages.po +++ b/fluxer_app/src/features/i18n/locales/fr/messages.po @@ -2395,11 +2395,6 @@ msgstr "60 secondes" msgid "7 days" msgstr "7 jours" -#. Required-action error when the API requires a captcha for phone verification. -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 -msgid "A browser check is required before phone verification. Try again from the sign-in page or contact support." -msgstr "Une vérification du navigateur est requise avant la vérification du téléphone. Réessayez depuis la page de connexion ou contactez l'assistance." - #. Hint shown beside in:. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:77 msgid "a channel" @@ -2928,7 +2923,7 @@ msgid "Add a friend to get started." msgstr "Ajoutez un ami pour commencer." #. Setup wizard body for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:973 +#: src/features/app/components/setup/SetupWizardSteps.tsx:966 msgid "Add a Klipy API key to enable GIF search at runtime." msgstr "Ajoutez une clé API Klipy pour activer la recherche de GIF pendant l'exécution." @@ -2965,7 +2960,7 @@ msgid "Add a working email" msgstr "Ajouter une adresse e-mail valide" #. Setup wizard body for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:981 +#: src/features/app/components/setup/SetupWizardSteps.tsx:974 msgid "Add a YouTube Data API key to enrich YouTube links." msgstr "Ajoutez une clé API YouTube Data pour enrichir les liens YouTube." @@ -3011,7 +3006,7 @@ msgid "Add another reaction" msgstr "Ajouter une autre réaction" #. Setup wizard body for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1005 +#: src/features/app/components/setup/SetupWizardSteps.tsx:990 msgid "Add Bluesky OAuth client metadata and a signing key." msgstr "Ajoutez les métadonnées du client OAuth Bluesky et une clé de signature." @@ -3161,7 +3156,7 @@ msgid "Add shortcut" msgstr "Ajouter un raccourci" #. Setup wizard body for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:997 +#: src/features/app/components/setup/SetupWizardSteps.tsx:982 msgid "Add SMTP credentials so the instance can send verification and notification email." msgstr "Ajoutez les identifiants SMTP pour que l'instance puisse envoyer des e-mails de vérification et de notification." @@ -3188,7 +3183,7 @@ msgid "Add stream" msgstr "Ajouter une diffusion" #. Description for configuring an optional setup wizard integration now. -#: src/features/app/components/setup/SetupWizardSteps.tsx:965 +#: src/features/app/components/setup/SetupWizardSteps.tsx:958 msgid "Add the credentials during setup." msgstr "Ajoutez les identifiants pendant la configuration." @@ -3954,7 +3949,7 @@ msgid "An invalid status was provided. You can now close this tab and return to msgstr "Un statut non valide a été fourni. Vous pouvez maintenant fermer cet onglet et retourner à l'application." #. Short label in the authentication auth form. Keep the tone plain and specific. -#: src/features/auth/hooks/useAuthForm.ts:13 +#: src/features/auth/hooks/useAuthForm.ts:12 msgid "An unexpected error occurred" msgstr "Une erreur inattendue est survenue" @@ -4262,7 +4257,7 @@ msgid "Anyone can request an account, but an administrator must approve it." msgstr "Tout le monde peut demander un compte, mais un administrateur doit l'approuver." #. Label for an integration API key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1018 +#: src/features/app/components/setup/SetupWizardSteps.tsx:994 msgid "API key" msgstr "Clé d'API" @@ -4958,7 +4953,7 @@ msgid "Authorized apps" msgstr "Applications autorisées" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:38 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:37 msgid "Authorized IPs cleared. New logins will require email verification." msgstr "Adresses IP autorisées effacées. Les nouvelles connexions nécessiteront une vérification par e-mail." @@ -5730,7 +5725,7 @@ msgid "Bluesky connections" msgstr "Connexions Bluesky" #. Setup wizard title for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1001 +#: src/features/app/components/setup/SetupWizardSteps.tsx:986 msgid "Bluesky OAuth" msgstr "OAuth Bluesky" @@ -5897,11 +5892,6 @@ msgstr "La valeur des permissions du bot ne peut pas être négative." msgid "Bot profile" msgstr "Profil du bot" -#. Setup wizard title for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:985 -msgid "Bot protection" -msgstr "Protection contre les bots" - #. Short label in the authentication OAUTH scopes step. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/OAuthScopesStep.tsx:20 msgid "Bot scope requested" @@ -6554,11 +6544,6 @@ msgstr "Impossible à modifier" msgid "Cannot delete account" msgstr "Impossible de supprimer le compte" -#. Toast error shown when captcha verification fails inside the auth captcha interceptor. -#: src/features/auth/components/CaptchaInterceptor.tsx:15 -msgid "Captcha verification failed. Try again." -msgstr "Échec de la vérification du CAPTCHA. Veuillez réessayer." - #. Section header in the Linux audio source picker. Lists capture-target options (entire system / specific apps). #: src/features/voice/components/AudioSourcePickerLinux.tsx:50 msgid "Capture" @@ -7398,10 +7383,6 @@ msgstr "Vérification de l'accès..." msgid "Checking screen recording permission..." msgstr "Vérification de l’autorisation d’enregistrement d’écran…" -#: src/features/auth/components/AltchaVerification.tsx:62 -msgid "Checking your browser. This takes a few seconds." -msgstr "Vérification de votre navigateur. Cela prend quelques secondes." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -7571,11 +7552,6 @@ msgstr "Choisissez Fichier, puis Ajouter au Dock." msgid "Choose friends to message." msgstr "Choisissez des amis à qui envoyer un message." -#. Setup wizard body for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:989 -msgid "Choose hCaptcha or Cloudflare Turnstile for signup challenges." -msgstr "Choisissez hCaptcha ou Cloudflare Turnstile pour les vérifications à l’inscription." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:455 msgid "Choose how chat moves after you send a message" @@ -7982,17 +7958,17 @@ msgid "Clear selection" msgstr "Effacer la sélection" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:88 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:87 msgid "Clear trust all setting" msgstr "Effacer le paramètre \" Faire confiance à tous \"" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:63 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:62 msgid "Clear trusted domains" msgstr "Effacer les domaines de confiance" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:96 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:95 msgid "Clear trusted domains ({trustedDomainsCount})" msgstr "Effacer les domaines de confiance ({trustedDomainsCount})" @@ -8002,7 +7978,7 @@ msgid "Clearer text" msgstr "Texte plus clair" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:108 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:107 msgid "Clearing trusted domains..." msgstr "Effacement des domaines de confiance…" @@ -8100,7 +8076,7 @@ msgid "Client" msgstr "Client" #. Label for Bluesky OAuth client name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1057 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1031 msgid "Client name" msgstr "Nom du client" @@ -8117,7 +8093,7 @@ msgid "Client secret regenerated. Update any code that uses the old secret." msgstr "Secret client régénéré. Mettez à jour tout code utilisant l'ancien secret." #. Label for Bluesky OAuth client URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1061 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 msgid "Client URL" msgstr "URL du client" @@ -8269,11 +8245,6 @@ msgstr "MP fermés" msgid "Cloud upload" msgstr "Envoi vers le cloud" -#. Cloudflare Turnstile provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1014 -msgid "Cloudflare Turnstile" -msgstr "Cloudflare Turnstile" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:58 msgid "Coal" @@ -8669,7 +8640,7 @@ msgstr "Nom de la communauté" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:126 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:125 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:113 msgid "Community nickname" msgstr "Surnom dans la communauté" @@ -8722,7 +8693,7 @@ msgid "Community profile" msgstr "Profil dans la communauté" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:73 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:72 msgid "Community profile updated" msgstr "Profil dans la communauté mis à jour" @@ -8880,7 +8851,7 @@ msgid "Configure keyboard shortcuts" msgstr "Configurer les raccourcis clavier" #. Option for configuring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:961 +#: src/features/app/components/setup/SetupWizardSteps.tsx:954 msgid "Configure now" msgstr "Configurer maintenant" @@ -12341,7 +12312,7 @@ msgstr "Se déconnecter de {channel}" msgid "Disconnect from voice" msgstr "Se déconnecter de l'appel vocal" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:261 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:243 msgid "Disconnect socket" msgstr "Déconnecter le socket" @@ -12479,7 +12450,7 @@ msgstr "Mode d'affichage" #. Short label in the inputs tab. Keep it concise. #. Short label in the my profile tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:22 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:138 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:137 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:61 msgid "Display name" msgstr "Nom affiché" @@ -12625,7 +12596,7 @@ msgstr "Voulez-vous rejoindre {communityName} ?" #. Label in the accessibility tab. #. Label in the my profile tab. #: src/features/user/components/modals/tabs/AccessibilityTab.tsx:54 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:146 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:145 msgid "Doc, I'm from the future. I came here in a time machine that you invented. Now, I need your help to get back to the year 1985." msgstr "Doc, je viens du futur. Je suis venu ici dans une machine à voyager dans le temps que vous avez inventée. Maintenant, j'ai besoin de votre aide pour retourner en 1985." @@ -13262,7 +13233,7 @@ msgid "Edit your messages above or below" msgstr "Modifier vos messages au-dessus ou en dessous" #. Button or menu action label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:93 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:92 msgid "Edit your profile appearance and see a live preview" msgstr "Modifiez l'apparence de votre profil et voyez un aperçu en direct" @@ -13330,7 +13301,7 @@ msgid "Email changed" msgstr "E-mail modifié" #. Setup wizard title for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:993 +#: src/features/app/components/setup/SetupWizardSteps.tsx:978 msgid "Email delivery" msgstr "Envoi d’e-mails" @@ -13635,7 +13606,7 @@ msgid "Enable beta feature" msgstr "Activer la fonctionnalité bêta" #. Label for enabling Bluesky OAuth in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1053 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1027 msgid "Enable Bluesky OAuth" msgstr "Activer l'authentification OAuth Bluesky" @@ -13668,7 +13639,7 @@ msgid "Enable developer mode" msgstr "Activer le mode développeur" #. Label for enabling SMTP email delivery in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1021 +#: src/features/app/components/setup/SetupWizardSteps.tsx:995 msgid "Enable email delivery" msgstr "Activer l’envoi d’e-mails" @@ -14705,7 +14676,7 @@ msgid "Failed to ban member. Try again." msgstr "Échec du bannissement du membre. Veuillez réessayer." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:59 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:58 msgid "Failed to clear trusted domains." msgstr "Échec de la suppression des domaines de confiance." @@ -14762,7 +14733,7 @@ msgid "Failed to enable camera." msgstr "Échec de l'activation de la caméra." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:42 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:41 msgid "Failed to forget authorized IPs. Try again." msgstr "Impossible d’oublier les adresses IP autorisées. Réessayez." @@ -14907,7 +14878,7 @@ msgid "Failed to resend verification code. Try again later." msgstr "Échec du renvoi du code de vérification. Veuillez réessayer plus tard." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:75 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:74 msgid "Failed to reset premium state." msgstr "Échec de la réinitialisation du statut premium." @@ -15581,7 +15552,7 @@ msgstr "Forcer l’affichage de l’espace réservé au chargement" msgid "Force mature media" msgstr "Forcer les médias pour adultes" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:276 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:258 msgid "Force move to AFK channel" msgstr "Forcer le déplacement vers le salon AFK" @@ -15640,7 +15611,7 @@ msgid "Forced off" msgstr "Désactivé de force" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:46 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:45 msgid "Forget authorized IPs" msgstr "Oublier les IP autorisées" @@ -15650,7 +15621,7 @@ msgid "Forget subscriptions" msgstr "Oublier les abonnements" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:104 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:103 msgid "Forgetting authorized IPs..." msgstr "Oubli des IP autorisées..." @@ -15907,12 +15878,12 @@ msgid "from <0>{0}" msgstr "de <0>{0}" #. Label for SMTP from email input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1025 +#: src/features/app/components/setup/SetupWizardSteps.tsx:999 msgid "From email" msgstr "E-mail de l’expéditeur" #. Label for SMTP from name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1029 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1003 msgid "From name" msgstr "Nom de l’expéditeur" @@ -16204,7 +16175,7 @@ msgid "GIF preview" msgstr "Aperçu du GIF" #. Setup wizard title for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:969 +#: src/features/app/components/setup/SetupWizardSteps.tsx:962 msgid "GIF search" msgstr "Recherche GIF" @@ -16853,21 +16824,12 @@ msgstr "Vous avez un code cadeau ? Échangez-le pour débloquer {PREMIUM_PRODUCT msgid "Having fun?" msgstr "Vous vous amusez bien ?" -#: src/features/auth/components/modals/CaptchaModal.tsx:175 -msgid "Having issues? Try hCaptcha instead" -msgstr "Vous rencontrez des problèmes ? Essayez plutôt hCaptcha" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:63 msgctxt "us-state" msgid "Hawaii" msgstr "Hawaï" -#. hCaptcha provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1013 -msgid "hCaptcha" -msgstr "hCaptcha" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:238 msgid "HD" @@ -19768,7 +19730,7 @@ msgid "Logo" msgstr "Logo" #. Label for Bluesky OAuth logo URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1065 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1039 msgid "Logo URL" msgstr "URL du logo" @@ -22941,7 +22903,7 @@ msgid "No tokens match \"{searchQuery}\"." msgstr "Aucune variable ne correspond à « {searchQuery} »." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:92 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:91 msgid "No trusted domains" msgstr "Aucun domaine de confiance" @@ -23696,10 +23658,6 @@ msgstr "Ouvrir le sélecteur de navigateur" msgid "Open call view" msgstr "Ouvrir l'appel" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:288 -msgid "Open captcha modal" -msgstr "Ouvrir la modale de captcha" - #. Accessible label for the channel header title button in a community channel. #: src/features/channel/components/channel_header/shared.ts:14 msgid "Open channel details for {channelName}" @@ -23712,7 +23670,7 @@ msgstr "Ouvrir les détails du salon {channelName}" msgid "Open chat" msgstr "Ouvrir le chat" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:314 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:290 msgid "Open claim account modal" msgstr "Ouvrir la fenêtre de finalisation de l’inscription" @@ -23944,11 +23902,11 @@ msgstr "Ouvrir le sticker dans le navigateur" msgid "Open streaming privacy settings" msgstr "Ouvrir les paramètres de confidentialité de la diffusion" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:327 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:303 msgid "Open sudo verification modal" msgstr "Ouvrir la fenêtre de vérification sudo" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:342 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:318 msgid "Open system DM" msgstr "Ouvrir la conversation privée avec le système" @@ -24430,7 +24388,7 @@ msgstr "Les clés d'accès nécessitent un paquet macOS signé avec un identifia #. Generic form-field label for a password. #. Label for SMTP password input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1036 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1010 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:146 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:183 @@ -25212,7 +25170,7 @@ msgid "Popup" msgstr "Pop-up" #. Label for SMTP port input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1034 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1008 msgid "Port" msgstr "Port" @@ -25338,7 +25296,7 @@ msgid "Premium since date" msgstr "Premium depuis le" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:71 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:70 msgid "Premium state reset on the backend." msgstr "Statut premium réinitialisé côté serveur." @@ -25608,7 +25566,7 @@ msgid "Privacy settings" msgstr "Paramètres de confidentialité" #. Label for Bluesky OAuth privacy URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1073 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1047 msgid "Privacy URL" msgstr "URL de confidentialité" @@ -25633,7 +25591,7 @@ msgid "Private details" msgstr "Détails privés" #. Label for Bluesky OAuth private key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1081 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1055 msgid "Private key" msgstr "Clé privée" @@ -25699,18 +25657,18 @@ msgstr "Couleur du profil" #. Settings section label for editing profile appearance and identity. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:105 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:104 #: src/features/user/components/settings_utils/section_registry/GeneralSettingsSections.ts:6 msgid "Profile customization" msgstr "Personnalisation du profil" #. Label in the my profile tab. Preserve {selectedGuildName}; it is inserted by code. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:101 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:100 msgid "Profile customization for {selectedGuildName}" msgstr "Personnalisation du profil pour {selectedGuildName}" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:97 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:96 msgid "Profile customization form" msgstr "Formulaire de personnalisation du profil" @@ -25775,7 +25733,7 @@ msgid "Profile type" msgstr "Type de profil" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:77 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:76 msgid "Profile updated" msgstr "Profil mis à jour" @@ -25812,7 +25770,7 @@ msgstr "Demander la confirmation pour les nouveaux périphériques audio." #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:142 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:141 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:177 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:160 msgid "Pronouns" @@ -25842,11 +25800,6 @@ msgstr "Indiquez l'identifiant ou le nom d'utilisateur de la personne que vous s msgid "Provide your full legal name for the declaration." msgstr "Indiquez vos nom et prénom tels qu’ils figurent sur vos documents officiels pour la déclaration." -#. Label for an integration provider choice. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 -msgid "Provider" -msgstr "Fournisseur" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27626,7 +27579,7 @@ msgid "Reset password" msgstr "Réinitialiser le mot de passe" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:79 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:78 msgid "Reset premium state" msgstr "Réinitialiser l'état premium" @@ -27635,7 +27588,7 @@ msgstr "Réinitialiser l'état premium" msgid "Reset slider to default value" msgstr "Réinitialiser le curseur à sa valeur par défaut" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:247 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:229 msgid "Reset socket" msgstr "Réinitialiser le socket" @@ -27684,7 +27637,7 @@ msgid "Reset zoom" msgstr "Réinitialiser le zoom" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:112 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:111 msgid "Resetting premium state..." msgstr "Réinitialisation de l'état premium…" @@ -28315,7 +28268,7 @@ msgid "Run the instance as one community instead of many. This can only be enabl msgstr "Exécutez l'instance comme une seule communauté au lieu de plusieurs. Ceci ne peut être activé que maintenant, pendant la configuration." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:100 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:99 msgid "Runtime utilities" msgstr "Utilitaires d'exécution" @@ -29103,11 +29056,6 @@ msgstr "Bouton secondaire cliqué." msgid "Secret" msgstr "Secret" -#. Label for a CAPTCHA secret key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1020 -msgid "Secret key" -msgstr "Clé secrète" - #. Settings search entry label. Names the settings search entry in the settings UI. #. Short label in the secrets section. Keep it concise. Keep the tone plain and specific. #: src/features/user/components/modals/tabs/applications_tab/application_detail/SecretsSection.tsx:11 @@ -29925,7 +29873,7 @@ msgid "Set up authenticator app" msgstr "Configurer l'application d'authentification" #. Option for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:953 +#: src/features/app/components/setup/SetupWizardSteps.tsx:946 msgid "Set up later" msgstr "Configurer plus tard" @@ -30427,7 +30375,7 @@ msgstr "Afficher la liste intégrée des MP" msgid "Show just the typing indicator without avatars" msgstr "Afficher uniquement l'indicateur de saisie, sans les avatars" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:308 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:284 msgid "Show keyboard mode intro" msgstr "Afficher l'introduction au mode clavier" @@ -30538,7 +30486,7 @@ msgstr "Afficher Neko" msgid "Show new device alerts" msgstr "Afficher les alertes de nouvel appareil" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:282 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:264 msgid "Show new device modal" msgstr "Afficher la fenêtre modale du nouvel appareil" @@ -30820,7 +30768,7 @@ msgid "Signed-in devices" msgstr "Appareils connectés" #. Label for Bluesky OAuth signing key ID input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1077 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1051 msgid "Signing key ID" msgstr "ID de clé de signature" @@ -30910,11 +30858,6 @@ msgstr "Ligne unique" msgid "Single user (all statuses)" msgstr "Utilisateur unique (tous les statuts)" -#. Label for a CAPTCHA site key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 -msgid "Site key" -msgstr "Clé du site" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:98 @@ -30964,7 +30907,7 @@ msgid "Skip the system leave notice — nobody gets pinged." msgstr "Ne pas afficher la notification de départ du système : personne ne sera averti." #. Description for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:957 +#: src/features/app/components/setup/SetupWizardSteps.tsx:950 msgid "Skip this now and configure it from the admin panel." msgstr "Ignorez ceci pour l'instant et configurez-le depuis le panneau d'administration." @@ -31212,17 +31155,17 @@ msgid "SMS verification is unavailable right now. Try again later or contact sup msgstr "La vérification par SMS est indisponible pour le moment. Réessayez plus tard ou contactez l'assistance." #. Success message after validating SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1045 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 msgid "SMTP connection verified." msgstr "Connexion SMTP vérifiée." #. Label for SMTP host input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1033 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1007 msgid "SMTP host" msgstr "Hôte SMTP" #. Failure message after validating SMTP credentials when the server returns no error detail. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1049 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1023 msgid "SMTP validation failed." msgstr "La validation SMTP a échoué." @@ -31402,7 +31345,7 @@ msgstr "Un problème est survenu. Veuillez réessayer plus tard." #. Inline error in the web deep-link prompt when opening the desktop app fails. #. Toast error shown when the mature content check request fails unexpectedly. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:18 -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:580 +#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 #: src/features/auth/flow/DesktopDeepLinkPrompt.tsx:31 msgid "Something went wrong. Try again." msgstr "Une erreur est survenue. Veuillez réessayer." @@ -32099,6 +32042,11 @@ msgstr "Indexation en cours — réessayez dans un instant" msgid "Still Neko" msgstr "Neko immobile" +#. Small toast shown only when an automatic background check before sign-in, sign-up or a similar request takes more than a couple of seconds. No user action needed. Keep it short and calm. +#: src/features/auth/altcha/CaptchaInterceptor.ts:13 +msgid "Still working on it…" +msgstr "Toujours en cours…" + #. Stop-recording button label in the desktop voice message composer. #: src/features/voice/components/VoiceMessageComposerModal.tsx:65 msgid "Stop" @@ -33013,7 +32961,7 @@ msgid "Terms of service" msgstr "Conditions d'utilisation" #. Label for Bluesky OAuth terms URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1069 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1043 msgid "Terms URL" msgstr "URL des conditions" @@ -33023,7 +32971,7 @@ msgid "Terrorism or violent extremism" msgstr "Terrorisme ou extrémisme violent" #. Button that validates SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1041 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1015 msgid "Test SMTP" msgstr "Tester le SMTP" @@ -33800,7 +33748,7 @@ msgid "This clears quick CSS, imported themes, uploaded assets, and local file r msgstr "Cela efface le CSS rapide, les thèmes importés, les ressources envoyées et les références de fichiers locaux sur cet appareil." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:83 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:82 msgid "This clears your backend premium state entirely, including premium type, billing metadata, and override flags." msgstr "Cela efface entièrement votre statut premium côté serveur, y compris le type d’abonnement, les métadonnées de facturation et les indicateurs de forçage." @@ -34200,7 +34148,7 @@ msgid "This message no longer exists." msgstr "Ce message n’existe plus." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:130 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:129 msgid "This nickname will only be visible in this community" msgstr "Ce surnom ne sera visible que dans cette communauté" @@ -34277,12 +34225,12 @@ msgid "This removes all custom CSS overrides. Theme files in your library are no msgstr "Ceci supprime toutes les personnalisations CSS. Les fichiers de thème de votre bibliothèque ne sont pas affectés." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:50 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:49 msgid "This removes all previously authorized IP addresses on your account. The next login from any IP will require email verification." msgstr "Ceci supprime toutes les adresses IP précédemment autorisées sur votre compte. La prochaine connexion depuis n'importe quelle IP nécessitera une vérification par e-mail." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:67 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:66 msgid "This removes all trusted domains. You will see the external link warning for all domains again." msgstr "Ceci supprime tous les domaines de confiance. Le message d'avertissement des liens externes s'affichera à nouveau pour tous les domaines." @@ -34949,7 +34897,7 @@ msgstr "Sous Linux, les modifications de l’icône de la zone de notification s msgid "Trending GIFs" msgstr "GIF tendance" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:383 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:359 msgid "Trigger React crash" msgstr "Déclencher un crash React" @@ -35008,7 +34956,7 @@ msgid "Trusted domains" msgstr "Domaines de confiance" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:55 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:54 msgid "Trusted domains cleared." msgstr "Domaines de confiance effacés." @@ -35054,7 +35002,6 @@ msgid "Try a different variable name or clear the search." msgstr "Essayez un autre nom de variable ou effacez la recherche." #. Generic action label for retrying a failed or interrupted operation. -#: src/features/auth/components/AltchaVerification.tsx:53 #: src/features/auth/flow/AuthRouteLoadError.tsx:22 #: src/features/i18n/utils/CommonMessageDescriptors.ts:75 msgid "Try again" @@ -35132,10 +35079,6 @@ msgstr "Essayer plutôt une clé de sécurité / clé d'accès" msgid "Try sending your message again." msgstr "Essayez de renvoyer votre message." -#: src/features/auth/components/modals/CaptchaModal.tsx:177 -msgid "Try Turnstile instead" -msgstr "Essayer plutôt Turnstile" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:135 msgid "TTS" @@ -36890,7 +36833,7 @@ msgid "Use this when troubleshooting the client or collecting logs. It may add v msgstr "Utilisez cette option pour dépanner le client ou collecter des journaux. Elle peut ajouter des messages détaillés à la console du navigateur pour le client actuel." #. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1037 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1011 msgid "Use TLS" msgstr "Utiliser TLS" @@ -37056,7 +36999,7 @@ msgstr "Volume de l'utilisateur" #. Generic form-field label for a username. #. Label for SMTP username input. #. Settings search entry label. Also used as a search synonym in the settings search bar. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 #: src/features/i18n/utils/CommonMessageDescriptors.ts:572 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:218 #: src/features/user/components/modals/tabs/my_profile_tab/MyProfileTabUsernameSection.tsx:56 @@ -37337,11 +37280,6 @@ msgstr "Vérifier le numéro de téléphone" msgid "Verify phone number form" msgstr "Formulaire de vérification du numéro de téléphone" -#. Short label in the authentication captcha modal. Keep the tone plain and specific. -#: src/features/auth/components/modals/CaptchaModal.tsx:17 -msgid "Verify you're human" -msgstr "Vérifiez que vous n'êtes pas un robot" - #. Title of the error modal shown when an unverified account tries to start a DM. #. Title shown when an unverified account cannot start a DM or group DM. #: src/features/app/components/alerts/DmActionErrorModal.tsx:40 @@ -37369,22 +37307,22 @@ msgid "Verify your email before adding an authenticator app." msgstr "Vérifiez votre adresse e-mail avant d'ajouter une application d'authentification." #. Description text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:117 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:116 msgid "Verify your email before changing your community nickname, avatar, banner, bio, pronouns, or accent color." msgstr "Vérifiez votre adresse e-mail avant de modifier votre surnom, votre avatar, votre bannière, votre bio, vos pronoms ou votre couleur d’accentuation dans une communauté." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:121 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:120 msgid "Verify your email before changing your username, display name, avatar, banner, bio, pronouns, time zone, or {premiumProductName} badge privacy." msgstr "Vérifiez votre adresse e-mail avant de modifier votre nom d’utilisateur, votre nom affiché, votre avatar, votre bannière, votre bio, vos pronoms, votre fuseau horaire ou la confidentialité de votre badge {premiumProductName}." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:85 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:84 msgid "Verify your email before editing this community profile. You can still preview it here." msgstr "Vérifiez votre adresse e-mail avant de modifier ce profil dans la communauté. Vous pouvez toujours en consulter l’aperçu ici." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:89 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:88 msgid "Verify your email before editing your profile. You can still preview it here." msgstr "Vérifiez votre e-mail avant de modifier votre profil. Vous pouvez toujours le prévisualiser ici." @@ -37416,12 +37354,12 @@ msgid "Verify your email to continue using {productName}." msgstr "Vérifiez votre e-mail pour continuer à utiliser {productName}." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:109 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:108 msgid "Verify your email to edit this community profile" msgstr "Vérifiez votre adresse e-mail pour modifier ce profil dans la communauté" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:113 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:112 msgid "Verify your email to edit your profile" msgstr "Vérifiez votre e-mail pour modifier votre profil" @@ -38398,10 +38336,6 @@ msgstr "Nous avons baissé le prix de {premiumProductName} au Brésil. Il est ma msgid "We need one verification step before you continue. This helps protect accounts and keep spam off {productName}." msgstr "Nous avons besoin d'une étape de vérification avant que vous puissiez continuer. Cela permet de protéger les comptes et de limiter le spam sur {productName}." -#: src/features/auth/components/modals/CaptchaModal.tsx:128 -msgid "We need to make sure you're not a bot. Complete the verification below." -msgstr "Nous devons nous assurer que vous n'êtes pas un robot. Veuillez compléter la vérification ci-dessous." - #. Required-action modal intro text when both email and phone verification are required. #: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:216 msgid "We need two verification steps before you continue. We will show one step at a time." @@ -39256,7 +39190,7 @@ msgid "You can't befriend yourself" msgstr "Vous ne pouvez pas être ami avec vous-même" #. Label in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:134 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:133 msgid "You can't change your nickname here" msgstr "Vous ne pouvez pas modifier votre surnom ici" @@ -39506,7 +39440,7 @@ msgid "You have unsaved changes." msgstr "Vous avez des modifications non enregistrées." #. Warning text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:81 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:80 msgid "You have unsaved changes. Save or reset before leaving." msgstr "Vous avez des modifications non enregistrées. Enregistrez-les ou réinitialisez-les avant de partir." @@ -40031,10 +39965,6 @@ msgstr "Votre action n'a pas pu être effectuée, car elle a été signalée par msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Votre candidature est en attente d’examen. Vous pouvez encore modifier les détails de votre fiche ou retirer votre candidature." -#: src/features/auth/components/AltchaVerification.tsx:50 -msgid "Your browser couldn't finish the check." -msgstr "Votre navigateur n'a pas pu terminer la vérification." - #. Body of the browser-audio-required modal explaining why the user must click before audio can play. #: src/features/voice/components/modals/AudioPlaybackPermissionModal.tsx:12 msgid "Your browser requires user interaction before audio can be played. Click the button below to enable voice chat." @@ -40386,7 +40316,7 @@ msgid "YouTube enrichment" msgstr "Enrichissement YouTube" #. Setup wizard title for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:977 +#: src/features/app/components/setup/SetupWizardSteps.tsx:970 msgid "YouTube previews" msgstr "Aperçus YouTube" diff --git a/fluxer_app/src/features/i18n/locales/he/messages.po b/fluxer_app/src/features/i18n/locales/he/messages.po index 30372487a..d0d07b396 100644 --- a/fluxer_app/src/features/i18n/locales/he/messages.po +++ b/fluxer_app/src/features/i18n/locales/he/messages.po @@ -2395,11 +2395,6 @@ msgstr "60 שניות" msgid "7 days" msgstr "7 ימים" -#. Required-action error when the API requires a captcha for phone verification. -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 -msgid "A browser check is required before phone verification. Try again from the sign-in page or contact support." -msgstr "נדרשת בדיקת דפדפן לפני אימות הטלפון. יש לנסות שוב מדף ההתחברות או ליצור קשר עם התמיכה." - #. Hint shown beside in:. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:77 msgid "a channel" @@ -2928,7 +2923,7 @@ msgid "Add a friend to get started." msgstr "הוסף חבר כדי להתחיל." #. Setup wizard body for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:973 +#: src/features/app/components/setup/SetupWizardSteps.tsx:966 msgid "Add a Klipy API key to enable GIF search at runtime." msgstr "הוסף מפתח API של Klipy כדי לאפשר חיפוש GIF בזמן ריצה." @@ -2965,7 +2960,7 @@ msgid "Add a working email" msgstr "הוסף אימייל פעיל" #. Setup wizard body for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:981 +#: src/features/app/components/setup/SetupWizardSteps.tsx:974 msgid "Add a YouTube Data API key to enrich YouTube links." msgstr "הוסף מפתח API של YouTube Data כדי להעשיר קישורי YouTube." @@ -3011,7 +3006,7 @@ msgid "Add another reaction" msgstr "הוספת ריאקציה נוספת" #. Setup wizard body for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1005 +#: src/features/app/components/setup/SetupWizardSteps.tsx:990 msgid "Add Bluesky OAuth client metadata and a signing key." msgstr "הוסף מטא-נתונים של לקוח OAuth של Bluesky ומפתח חתימה." @@ -3161,7 +3156,7 @@ msgid "Add shortcut" msgstr "הוספת קיצור דרך" #. Setup wizard body for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:997 +#: src/features/app/components/setup/SetupWizardSteps.tsx:982 msgid "Add SMTP credentials so the instance can send verification and notification email." msgstr "הוסף פרטי כניסה ל-SMTP כדי שהמופע יוכל לשלוח אימייל אימות והתראות." @@ -3188,7 +3183,7 @@ msgid "Add stream" msgstr "הוסף שידור" #. Description for configuring an optional setup wizard integration now. -#: src/features/app/components/setup/SetupWizardSteps.tsx:965 +#: src/features/app/components/setup/SetupWizardSteps.tsx:958 msgid "Add the credentials during setup." msgstr "הוסף את פרטי הכניסה במהלך ההגדרה." @@ -3954,7 +3949,7 @@ msgid "An invalid status was provided. You can now close this tab and return to msgstr "צוין סטטוס לא חוקי. עכשיו אפשר לסגור את הכרטיסייה הזו ולחזור לאפליקציה." #. Short label in the authentication auth form. Keep the tone plain and specific. -#: src/features/auth/hooks/useAuthForm.ts:13 +#: src/features/auth/hooks/useAuthForm.ts:12 msgid "An unexpected error occurred" msgstr "אירעה שגיאה בלתי צפויה" @@ -4262,7 +4257,7 @@ msgid "Anyone can request an account, but an administrator must approve it." msgstr "כל אחד יכול לבקש חשבון, אך מנהל מערכת חייב לאשר אותו." #. Label for an integration API key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1018 +#: src/features/app/components/setup/SetupWizardSteps.tsx:994 msgid "API key" msgstr "מפתח API" @@ -4958,7 +4953,7 @@ msgid "Authorized apps" msgstr "אפליקציות מורשות" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:38 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:37 msgid "Authorized IPs cleared. New logins will require email verification." msgstr "כתובות ה-IP המורשות נוקו. התחברויות חדשות ידרשו אימות אימייל." @@ -5730,7 +5725,7 @@ msgid "Bluesky connections" msgstr "חיבורי Bluesky" #. Setup wizard title for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1001 +#: src/features/app/components/setup/SetupWizardSteps.tsx:986 msgid "Bluesky OAuth" msgstr "OAuth של Bluesky" @@ -5897,11 +5892,6 @@ msgstr "הרשאות בוט לא יכולות להיות שליליות." msgid "Bot profile" msgstr "פרופיל בוט" -#. Setup wizard title for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:985 -msgid "Bot protection" -msgstr "הגנה מפני בוטים" - #. Short label in the authentication OAUTH scopes step. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/OAuthScopesStep.tsx:20 msgid "Bot scope requested" @@ -6554,11 +6544,6 @@ msgstr "לא ניתן לערוך" msgid "Cannot delete account" msgstr "לא ניתן למחוק את החשבון" -#. Toast error shown when captcha verification fails inside the auth captcha interceptor. -#: src/features/auth/components/CaptchaInterceptor.tsx:15 -msgid "Captcha verification failed. Try again." -msgstr "אימות הקאפצ'ה נכשל. יש לנסות שוב." - #. Section header in the Linux audio source picker. Lists capture-target options (entire system / specific apps). #: src/features/voice/components/AudioSourcePickerLinux.tsx:50 msgid "Capture" @@ -7398,10 +7383,6 @@ msgstr "בודק גישה..." msgid "Checking screen recording permission..." msgstr "בודק הרשאת הקלטת מסך..." -#: src/features/auth/components/AltchaVerification.tsx:62 -msgid "Checking your browser. This takes a few seconds." -msgstr "בודקים את הדפדפן שלך. זה לוקח כמה שניות." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -7571,11 +7552,6 @@ msgstr "בחר \"קובץ\", ואז \"הוספה ל-Dock\"." msgid "Choose friends to message." msgstr "בחר חברים לשלוח להם הודעה." -#. Setup wizard body for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:989 -msgid "Choose hCaptcha or Cloudflare Turnstile for signup challenges." -msgstr "בחר hCaptcha או Cloudflare Turnstile עבור אתגרי הרשמה." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:455 msgid "Choose how chat moves after you send a message" @@ -7982,17 +7958,17 @@ msgid "Clear selection" msgstr "נקה בחירה" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:88 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:87 msgid "Clear trust all setting" msgstr "נקה את ההגדרה \"בטח הכל\"" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:63 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:62 msgid "Clear trusted domains" msgstr "נקה דומיינים מהימנים" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:96 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:95 msgid "Clear trusted domains ({trustedDomainsCount})" msgstr "נקה דומיינים מהימנים ({trustedDomainsCount})" @@ -8002,7 +7978,7 @@ msgid "Clearer text" msgstr "טקסט ברור יותר" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:108 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:107 msgid "Clearing trusted domains..." msgstr "מנקה דומיינים מהימנים..." @@ -8100,7 +8076,7 @@ msgid "Client" msgstr "לקוח" #. Label for Bluesky OAuth client name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1057 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1031 msgid "Client name" msgstr "שם הלקוח" @@ -8117,7 +8093,7 @@ msgid "Client secret regenerated. Update any code that uses the old secret." msgstr "סוד הלקוח נוצר מחדש. עדכן כל קוד שמשתמש בסוד הישן." #. Label for Bluesky OAuth client URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1061 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 msgid "Client URL" msgstr "כתובת הלקוח" @@ -8269,11 +8245,6 @@ msgstr "הודעות פרטיות סגורות" msgid "Cloud upload" msgstr "העלאה לענן" -#. Cloudflare Turnstile provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1014 -msgid "Cloudflare Turnstile" -msgstr "Cloudflare Turnstile" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:58 msgid "Coal" @@ -8669,7 +8640,7 @@ msgstr "שם קהילה" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:126 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:125 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:113 msgid "Community nickname" msgstr "כינוי בקהילה" @@ -8722,7 +8693,7 @@ msgid "Community profile" msgstr "פרופיל קהילה" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:73 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:72 msgid "Community profile updated" msgstr "פרופיל הקהילה עודכן" @@ -8880,7 +8851,7 @@ msgid "Configure keyboard shortcuts" msgstr "הגדרת קיצורי מקלדת" #. Option for configuring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:961 +#: src/features/app/components/setup/SetupWizardSteps.tsx:954 msgid "Configure now" msgstr "הגדר כעת" @@ -12341,7 +12312,7 @@ msgstr "התנתק מ-{channel}" msgid "Disconnect from voice" msgstr "התנתק משיחה קולית" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:261 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:243 msgid "Disconnect socket" msgstr "נתק את ה-socket" @@ -12479,7 +12450,7 @@ msgstr "מצב תצוגה" #. Short label in the inputs tab. Keep it concise. #. Short label in the my profile tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:22 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:138 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:137 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:61 msgid "Display name" msgstr "שם לתצוגה" @@ -12625,7 +12596,7 @@ msgstr "האם תרצה להצטרף ל-{communityName}?" #. Label in the accessibility tab. #. Label in the my profile tab. #: src/features/user/components/modals/tabs/AccessibilityTab.tsx:54 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:146 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:145 msgid "Doc, I'm from the future. I came here in a time machine that you invented. Now, I need your help to get back to the year 1985." msgstr "דוק, אני מהעתיד. הגעתי לכאן במכונת זמן שאתה המצאת. עכשיו, אני צריך את עזרתך כדי לחזור לשנת 1985." @@ -13262,7 +13233,7 @@ msgid "Edit your messages above or below" msgstr "עריכת ההודעות שלך למעלה או למטה" #. Button or menu action label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:93 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:92 msgid "Edit your profile appearance and see a live preview" msgstr "ערוך את מראה הפרופיל שלך וצפה בתצוגה מקדימה חיה" @@ -13330,7 +13301,7 @@ msgid "Email changed" msgstr "האימייל שונה" #. Setup wizard title for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:993 +#: src/features/app/components/setup/SetupWizardSteps.tsx:978 msgid "Email delivery" msgstr "משלוח אימייל" @@ -13635,7 +13606,7 @@ msgid "Enable beta feature" msgstr "הפעלת תכונת בטא" #. Label for enabling Bluesky OAuth in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1053 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1027 msgid "Enable Bluesky OAuth" msgstr "אפשר OAuth של Bluesky" @@ -13668,7 +13639,7 @@ msgid "Enable developer mode" msgstr "הפעל מצב מפתחים" #. Label for enabling SMTP email delivery in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1021 +#: src/features/app/components/setup/SetupWizardSteps.tsx:995 msgid "Enable email delivery" msgstr "אפשר שליחת אימייל" @@ -14705,7 +14676,7 @@ msgid "Failed to ban member. Try again." msgstr "חסימת החבר נכשלה. יש לנסות שוב." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:59 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:58 msgid "Failed to clear trusted domains." msgstr "ניקוי הדומיינים המהימנים נכשל." @@ -14762,7 +14733,7 @@ msgid "Failed to enable camera." msgstr "הפעלת המצלמה נכשלה." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:42 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:41 msgid "Failed to forget authorized IPs. Try again." msgstr "מחיקת כתובות ה-IP המורשות נכשלה. יש לנסות שוב." @@ -14907,7 +14878,7 @@ msgid "Failed to resend verification code. Try again later." msgstr "שליחת קוד האימות מחדש נכשלה. יש לנסות שוב מאוחר יותר." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:75 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:74 msgid "Failed to reset premium state." msgstr "איפוס מצב הפרימיום נכשל." @@ -15581,7 +15552,7 @@ msgstr "כפיית שלד טעינה" msgid "Force mature media" msgstr "כפיית מדיה למבוגרים" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:276 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:258 msgid "Force move to AFK channel" msgstr "העברה כפויה לערוץ AFK" @@ -15640,7 +15611,7 @@ msgid "Forced off" msgstr "כבוי בכפייה" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:46 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:45 msgid "Forget authorized IPs" msgstr "מחק כתובות IP מורשות" @@ -15650,7 +15621,7 @@ msgid "Forget subscriptions" msgstr "מחיקת מנויים להתראות" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:104 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:103 msgid "Forgetting authorized IPs..." msgstr "מוחק כתובות IP מורשות..." @@ -15907,12 +15878,12 @@ msgid "from <0>{0}" msgstr "מ-<0>{0}" #. Label for SMTP from email input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1025 +#: src/features/app/components/setup/SetupWizardSteps.tsx:999 msgid "From email" msgstr "כתובת אימייל של השולח" #. Label for SMTP from name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1029 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1003 msgid "From name" msgstr "שם השולח" @@ -16204,7 +16175,7 @@ msgid "GIF preview" msgstr "תצוגה מקדימה של GIF" #. Setup wizard title for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:969 +#: src/features/app/components/setup/SetupWizardSteps.tsx:962 msgid "GIF search" msgstr "חיפוש GIF" @@ -16853,21 +16824,12 @@ msgstr "יש לך קוד מתנה? הפק אותו כדי לפתוח את {PREMI msgid "Having fun?" msgstr "כיף לך?" -#: src/features/auth/components/modals/CaptchaModal.tsx:175 -msgid "Having issues? Try hCaptcha instead" -msgstr "נתקלת בבעיות? נסה את hCaptcha במקום" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:63 msgctxt "us-state" msgid "Hawaii" msgstr "הוואי" -#. hCaptcha provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1013 -msgid "hCaptcha" -msgstr "hCaptcha" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:238 msgid "HD" @@ -19768,7 +19730,7 @@ msgid "Logo" msgstr "לוגו" #. Label for Bluesky OAuth logo URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1065 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1039 msgid "Logo URL" msgstr "כתובת URL של הלוגו" @@ -22941,7 +22903,7 @@ msgid "No tokens match \"{searchQuery}\"." msgstr "אין אסימונים תואמים ל-\"{searchQuery}\"." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:92 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:91 msgid "No trusted domains" msgstr "אין דומיינים מהימנים" @@ -23696,10 +23658,6 @@ msgstr "פתיחת בורר דפדפנים" msgid "Open call view" msgstr "פתח תצוגת שיחה" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:288 -msgid "Open captcha modal" -msgstr "פתיחת חלון קופץ של אימות אנושי" - #. Accessible label for the channel header title button in a community channel. #: src/features/channel/components/channel_header/shared.ts:14 msgid "Open channel details for {channelName}" @@ -23712,7 +23670,7 @@ msgstr "פתח פרטי ערוץ עבור {channelName}" msgid "Open chat" msgstr "פתח צ'אט" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:314 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:290 msgid "Open claim account modal" msgstr "פתיחת חלון קופץ של תביעת החשבון" @@ -23944,11 +23902,11 @@ msgstr "פתח מדבקה בדפדפן" msgid "Open streaming privacy settings" msgstr "פתח את הגדרות פרטיות הסטרימינג" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:327 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:303 msgid "Open sudo verification modal" msgstr "פתח חלון קופץ של אימות זהות" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:342 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:318 msgid "Open system DM" msgstr "פתח את צ'אט המערכת" @@ -24430,7 +24388,7 @@ msgstr "מפתחות גישה דורשים חבילת macOS חתומה עם מז #. Generic form-field label for a password. #. Label for SMTP password input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1036 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1010 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:146 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:183 @@ -25212,7 +25170,7 @@ msgid "Popup" msgstr "חלון קופץ" #. Label for SMTP port input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1034 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1008 msgid "Port" msgstr "יציאה" @@ -25338,7 +25296,7 @@ msgid "Premium since date" msgstr "פרימיום מתאריך" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:71 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:70 msgid "Premium state reset on the backend." msgstr "מצב הפרימיום אופס בשרת." @@ -25608,7 +25566,7 @@ msgid "Privacy settings" msgstr "הגדרות פרטיות" #. Label for Bluesky OAuth privacy URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1073 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1047 msgid "Privacy URL" msgstr "כתובת URL של פרטיות" @@ -25633,7 +25591,7 @@ msgid "Private details" msgstr "פרטים אישיים" #. Label for Bluesky OAuth private key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1081 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1055 msgid "Private key" msgstr "מפתח פרטי" @@ -25699,18 +25657,18 @@ msgstr "צבע פרופיל" #. Settings section label for editing profile appearance and identity. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:105 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:104 #: src/features/user/components/settings_utils/section_registry/GeneralSettingsSections.ts:6 msgid "Profile customization" msgstr "התאמה אישית של הפרופיל" #. Label in the my profile tab. Preserve {selectedGuildName}; it is inserted by code. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:101 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:100 msgid "Profile customization for {selectedGuildName}" msgstr "התאמה אישית של פרופיל עבור {selectedGuildName}" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:97 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:96 msgid "Profile customization form" msgstr "טופס התאמה אישית של הפרופיל" @@ -25775,7 +25733,7 @@ msgid "Profile type" msgstr "סוג פרופיל" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:77 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:76 msgid "Profile updated" msgstr "הפרופיל עודכן" @@ -25812,7 +25770,7 @@ msgstr "הצגת בקשה כשמתחבר התקן שמע חדש" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:142 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:141 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:177 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:160 msgid "Pronouns" @@ -25842,11 +25800,6 @@ msgstr "יש לספק מזהה משתמש או שם משתמש של האדם ש msgid "Provide your full legal name for the declaration." msgstr "יש לציין את שמך המלא כפי שמופיע במסמכים רשמיים לצורך ההצהרה." -#. Label for an integration provider choice. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 -msgid "Provider" -msgstr "ספק" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27626,7 +27579,7 @@ msgid "Reset password" msgstr "איפוס סיסמה" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:79 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:78 msgid "Reset premium state" msgstr "איפוס מצב פרימיום" @@ -27635,7 +27588,7 @@ msgstr "איפוס מצב פרימיום" msgid "Reset slider to default value" msgstr "איפוס המחוון לערך ברירת המחדל" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:247 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:229 msgid "Reset socket" msgstr "איפוס סוקט" @@ -27684,7 +27637,7 @@ msgid "Reset zoom" msgstr "איפוס זום" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:112 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:111 msgid "Resetting premium state..." msgstr "מאפס מצב פרימיום..." @@ -28315,7 +28268,7 @@ msgid "Run the instance as one community instead of many. This can only be enabl msgstr "הפעל את המופע כקהילה אחת במקום קהילות רבות. ניתן להפעיל זאת רק כעת, במהלך ההגדרה." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:100 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:99 msgid "Runtime utilities" msgstr "כלי עזר לזמן ריצה" @@ -29103,11 +29056,6 @@ msgstr "כפתור משני נלחץ." msgid "Secret" msgstr "סוד" -#. Label for a CAPTCHA secret key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1020 -msgid "Secret key" -msgstr "מפתח סודי" - #. Settings search entry label. Names the settings search entry in the settings UI. #. Short label in the secrets section. Keep it concise. Keep the tone plain and specific. #: src/features/user/components/modals/tabs/applications_tab/application_detail/SecretsSection.tsx:11 @@ -29925,7 +29873,7 @@ msgid "Set up authenticator app" msgstr "הגדרת אפליקציית אימות" #. Option for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:953 +#: src/features/app/components/setup/SetupWizardSteps.tsx:946 msgid "Set up later" msgstr "הגדר מאוחר יותר" @@ -30427,7 +30375,7 @@ msgstr "הצגת רשימת הצ'אטים המוטבעת" msgid "Show just the typing indicator without avatars" msgstr "הצג רק את חיווי ההקלדה ללא אווטארים" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:308 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:284 msgid "Show keyboard mode intro" msgstr "הצגת מבוא למצב מקלדת" @@ -30538,7 +30486,7 @@ msgstr "הצג נקו" msgid "Show new device alerts" msgstr "הצגת התראות על מכשירים חדשים" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:282 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:264 msgid "Show new device modal" msgstr "הצגת חלון קופץ של מכשיר חדש" @@ -30820,7 +30768,7 @@ msgid "Signed-in devices" msgstr "מכשירים מחוברים" #. Label for Bluesky OAuth signing key ID input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1077 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1051 msgid "Signing key ID" msgstr "מזהה מפתח חתימה" @@ -30910,11 +30858,6 @@ msgstr "שורה בודדת" msgid "Single user (all statuses)" msgstr "משתמש יחיד (כל הסטטוסים)" -#. Label for a CAPTCHA site key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 -msgid "Site key" -msgstr "מפתח אתר" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:98 @@ -30964,7 +30907,7 @@ msgid "Skip the system leave notice — nobody gets pinged." msgstr "דלג על הודעת העזיבה של המערכת — אף אחד לא יקבל התראה." #. Description for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:957 +#: src/features/app/components/setup/SetupWizardSteps.tsx:950 msgid "Skip this now and configure it from the admin panel." msgstr "דלג על זה כעת והגדר אותו מלוח הניהול." @@ -31212,17 +31155,17 @@ msgid "SMS verification is unavailable right now. Try again later or contact sup msgstr "אימות באמצעות SMS אינו זמין כרגע. נסה שוב מאוחר יותר או צור קשר עם התמיכה." #. Success message after validating SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1045 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 msgid "SMTP connection verified." msgstr "החיבור ל-SMTP אומת." #. Label for SMTP host input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1033 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1007 msgid "SMTP host" msgstr "מארח SMTP" #. Failure message after validating SMTP credentials when the server returns no error detail. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1049 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1023 msgid "SMTP validation failed." msgstr "אימות ה-SMTP נכשל." @@ -31402,7 +31345,7 @@ msgstr "משהו השתבש. יש לנסות שוב מאוחר יותר." #. Inline error in the web deep-link prompt when opening the desktop app fails. #. Toast error shown when the mature content check request fails unexpectedly. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:18 -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:580 +#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 #: src/features/auth/flow/DesktopDeepLinkPrompt.tsx:31 msgid "Something went wrong. Try again." msgstr "משהו השתבש. יש לנסות שוב." @@ -32099,6 +32042,11 @@ msgstr "עדיין מתבצע אינדוקס — יש לבדוק שוב בעוד msgid "Still Neko" msgstr "נקו במקום" +#. Small toast shown only when an automatic background check before sign-in, sign-up or a similar request takes more than a couple of seconds. No user action needed. Keep it short and calm. +#: src/features/auth/altcha/CaptchaInterceptor.ts:13 +msgid "Still working on it…" +msgstr "עדיין עובדים על זה…" + #. Stop-recording button label in the desktop voice message composer. #: src/features/voice/components/VoiceMessageComposerModal.tsx:65 msgid "Stop" @@ -33013,7 +32961,7 @@ msgid "Terms of service" msgstr "תנאי שירות" #. Label for Bluesky OAuth terms URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1069 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1043 msgid "Terms URL" msgstr "כתובת URL של תנאים" @@ -33023,7 +32971,7 @@ msgid "Terrorism or violent extremism" msgstr "טרור או קיצוניות אלימה" #. Button that validates SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1041 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1015 msgid "Test SMTP" msgstr "בדוק SMTP" @@ -33800,7 +33748,7 @@ msgid "This clears quick CSS, imported themes, uploaded assets, and local file r msgstr "פעולה זו מנקה CSS מהיר, ערכות נושא מיובאות, נכסים שהועלו והפניות לקבצים מקומיים במכשיר זה." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:83 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:82 msgid "This clears your backend premium state entirely, including premium type, billing metadata, and override flags." msgstr "פעולה זו מנקה לחלוטין את מצב הפרימיום שלך בשרת, כולל סוג הפרימיום, מטא-נתונים של חיוב ודגלי עקיפה." @@ -34200,7 +34148,7 @@ msgid "This message no longer exists." msgstr "ההודעה הזו כבר לא קיימת." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:130 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:129 msgid "This nickname will only be visible in this community" msgstr "הכינוי הזה יהיה גלוי רק בקהילה הזו" @@ -34277,12 +34225,12 @@ msgid "This removes all custom CSS overrides. Theme files in your library are no msgstr "פעולה זו מסירה את כל עקיפות ה-CSS המותאמות אישית. קובצי ערכת נושא בספרייה שלך לא יושפעו." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:50 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:49 msgid "This removes all previously authorized IP addresses on your account. The next login from any IP will require email verification." msgstr "פעולה זו תסיר את כל כתובות ה-IP המורשות בחשבונך. ההתחברות הבאה מכל כתובת IP תחייב אימות באימייל." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:67 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:66 msgid "This removes all trusted domains. You will see the external link warning for all domains again." msgstr "פעולה זו תסיר את כל הדומיינים המהימנים. אזהרת הקישור החיצוני תוצג שוב עבור כל הדומיינים." @@ -34949,7 +34897,7 @@ msgstr "שינויים בסמל מגש המערכת יחולו רק לאחר ה msgid "Trending GIFs" msgstr "קובצי GIF פופולריים" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:383 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:359 msgid "Trigger React crash" msgstr "הפעל קריסת React" @@ -35008,7 +34956,7 @@ msgid "Trusted domains" msgstr "דומיינים מהימנים" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:55 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:54 msgid "Trusted domains cleared." msgstr "הדומיינים המהימנים נוקו." @@ -35054,7 +35002,6 @@ msgid "Try a different variable name or clear the search." msgstr "נסה שם משתנה אחר או נקה את החיפוש." #. Generic action label for retrying a failed or interrupted operation. -#: src/features/auth/components/AltchaVerification.tsx:53 #: src/features/auth/flow/AuthRouteLoadError.tsx:22 #: src/features/i18n/utils/CommonMessageDescriptors.ts:75 msgid "Try again" @@ -35132,10 +35079,6 @@ msgstr "נסה במקום זאת מפתח אבטחה / מפתח גישה" msgid "Try sending your message again." msgstr "נסה לשלוח את ההודעה שוב." -#: src/features/auth/components/modals/CaptchaModal.tsx:177 -msgid "Try Turnstile instead" -msgstr "נסה במקום זאת את Turnstile" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:135 msgid "TTS" @@ -36890,7 +36833,7 @@ msgid "Use this when troubleshooting the client or collecting logs. It may add v msgstr "השתמש באפשרות זו בעת פתרון בעיות בלקוח או איסוף יומנים. היא עשויה להוסיף הודעות מפורטות לקונסולת הדפדפן עבור הלקוח הנוכחי." #. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1037 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1011 msgid "Use TLS" msgstr "השתמש ב-TLS" @@ -37056,7 +36999,7 @@ msgstr "עוצמת שמע של משתמש" #. Generic form-field label for a username. #. Label for SMTP username input. #. Settings search entry label. Also used as a search synonym in the settings search bar. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 #: src/features/i18n/utils/CommonMessageDescriptors.ts:572 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:218 #: src/features/user/components/modals/tabs/my_profile_tab/MyProfileTabUsernameSection.tsx:56 @@ -37337,11 +37280,6 @@ msgstr "אימות מספר טלפון" msgid "Verify phone number form" msgstr "טופס אימות מספר טלפון" -#. Short label in the authentication captcha modal. Keep the tone plain and specific. -#: src/features/auth/components/modals/CaptchaModal.tsx:17 -msgid "Verify you're human" -msgstr "יש לוודא שאתה אנושי" - #. Title of the error modal shown when an unverified account tries to start a DM. #. Title shown when an unverified account cannot start a DM or group DM. #: src/features/app/components/alerts/DmActionErrorModal.tsx:40 @@ -37369,22 +37307,22 @@ msgid "Verify your email before adding an authenticator app." msgstr "יש לאמת את כתובת האימייל שלך לפני הוספת אפליקציית אימות." #. Description text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:117 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:116 msgid "Verify your email before changing your community nickname, avatar, banner, bio, pronouns, or accent color." msgstr "יש לאמת את כתובת האימייל שלך לפני שינוי הכינוי, האווטאר, הבאנר, הביוגרפיה, כינויי הגוף או צבע ההדגשה שלך בקהילה." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:121 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:120 msgid "Verify your email before changing your username, display name, avatar, banner, bio, pronouns, time zone, or {premiumProductName} badge privacy." msgstr "יש לאמת את כתובת האימייל שלך לפני שינוי שם המשתמש, שם התצוגה, האווטאר, הבאנר, הביוגרפיה, כינויי הגוף, אזור הזמן או פרטיות התג של {premiumProductName}." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:85 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:84 msgid "Verify your email before editing this community profile. You can still preview it here." msgstr "יש לאמת את כתובת האימייל לפני עריכת פרופיל הקהילה. עדיין ניתן להציג תצוגה מקדימה כאן." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:89 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:88 msgid "Verify your email before editing your profile. You can still preview it here." msgstr "יש לאמת את כתובת האימייל לפני עריכת הפרופיל. עדיין ניתן להציג תצוגה מקדימה כאן." @@ -37416,12 +37354,12 @@ msgid "Verify your email to continue using {productName}." msgstr "יש לאמת את כתובת האימייל שלך כדי להמשיך להשתמש ב-{productName}." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:109 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:108 msgid "Verify your email to edit this community profile" msgstr "אמת את כתובת האימייל שלך כדי לערוך את פרופיל הקהילה הזה" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:113 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:112 msgid "Verify your email to edit your profile" msgstr "אמת את כתובת האימייל שלך כדי לערוך את הפרופיל" @@ -38398,10 +38336,6 @@ msgstr "הורדנו את המחיר של {premiumProductName} בברזיל. כ msgid "We need one verification step before you continue. This helps protect accounts and keep spam off {productName}." msgstr "אנחנו צריכים שלב אימות אחד לפני שתוכל להמשיך. זה עוזר להגן על חשבונות ולמנוע ספאם ב-{productName}." -#: src/features/auth/components/modals/CaptchaModal.tsx:128 -msgid "We need to make sure you're not a bot. Complete the verification below." -msgstr "אנחנו צריכים לוודא שאתה לא בוט. השלם את האימות למטה." - #. Required-action modal intro text when both email and phone verification are required. #: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:216 msgid "We need two verification steps before you continue. We will show one step at a time." @@ -39256,7 +39190,7 @@ msgid "You can't befriend yourself" msgstr "אי אפשר להוסיף את עצמך כחבר" #. Label in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:134 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:133 msgid "You can't change your nickname here" msgstr "אי אפשר לשנות את הכינוי שלך כאן" @@ -39506,7 +39440,7 @@ msgid "You have unsaved changes." msgstr "יש לך שינויים שלא נשמרו." #. Warning text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:81 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:80 msgid "You have unsaved changes. Save or reset before leaving." msgstr "יש לך שינויים שלא נשמרו. שמור או אפס לפני שתעזוב." @@ -40031,10 +39965,6 @@ msgstr "הפעולה שלך לא הושלמה כי היא סומנה על ידי msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "הבקשה שלך ממתינה לבדיקה. עדיין באפשרותך לעדכן את פרטי הרישום או לבטל את הבקשה." -#: src/features/auth/components/AltchaVerification.tsx:50 -msgid "Your browser couldn't finish the check." -msgstr "הדפדפן שלך לא הצליח לסיים את הבדיקה." - #. Body of the browser-audio-required modal explaining why the user must click before audio can play. #: src/features/voice/components/modals/AudioPlaybackPermissionModal.tsx:12 msgid "Your browser requires user interaction before audio can be played. Click the button below to enable voice chat." @@ -40386,7 +40316,7 @@ msgid "YouTube enrichment" msgstr "העשרת YouTube" #. Setup wizard title for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:977 +#: src/features/app/components/setup/SetupWizardSteps.tsx:970 msgid "YouTube previews" msgstr "תצוגות מקדימות של YouTube" diff --git a/fluxer_app/src/features/i18n/locales/hi/messages.po b/fluxer_app/src/features/i18n/locales/hi/messages.po index c5ae75a2c..492206f6c 100644 --- a/fluxer_app/src/features/i18n/locales/hi/messages.po +++ b/fluxer_app/src/features/i18n/locales/hi/messages.po @@ -2395,11 +2395,6 @@ msgstr "60 सेकंड" msgid "7 days" msgstr "7 दिन" -#. Required-action error when the API requires a captcha for phone verification. -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 -msgid "A browser check is required before phone verification. Try again from the sign-in page or contact support." -msgstr "फ़ोन वेरिफ़िकेशन से पहले ब्राउज़र जाँच ज़रूरी है। साइन-इन पेज से फिर से कोशिश करें या सहायता से संपर्क करें।" - #. Hint shown beside in:. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:77 msgid "a channel" @@ -2928,7 +2923,7 @@ msgid "Add a friend to get started." msgstr "शुरू करने के लिए किसी दोस्त को जोड़ें।" #. Setup wizard body for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:973 +#: src/features/app/components/setup/SetupWizardSteps.tsx:966 msgid "Add a Klipy API key to enable GIF search at runtime." msgstr "रनटाइम पर GIF खोज चालू करने के लिए Klipy API कुंजी जोड़ें।" @@ -2965,7 +2960,7 @@ msgid "Add a working email" msgstr "एक काम करने वाला ईमेल जोड़ें" #. Setup wizard body for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:981 +#: src/features/app/components/setup/SetupWizardSteps.tsx:974 msgid "Add a YouTube Data API key to enrich YouTube links." msgstr "YouTube लिंक को बेहतर बनाने के लिए YouTube Data API कुंजी जोड़ें।" @@ -3011,7 +3006,7 @@ msgid "Add another reaction" msgstr "एक और रिएक्शन जोड़ें" #. Setup wizard body for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1005 +#: src/features/app/components/setup/SetupWizardSteps.tsx:990 msgid "Add Bluesky OAuth client metadata and a signing key." msgstr "Bluesky OAuth क्लाइंट मेटाडेटा और एक साइनिंग कुंजी जोड़ें।" @@ -3161,7 +3156,7 @@ msgid "Add shortcut" msgstr "शॉर्टकट जोड़ें" #. Setup wizard body for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:997 +#: src/features/app/components/setup/SetupWizardSteps.tsx:982 msgid "Add SMTP credentials so the instance can send verification and notification email." msgstr "SMTP क्रेडेंशियल जोड़ें, ताकि इंस्टेंस वेरिफ़िकेशन और सूचना ईमेल भेज सके।" @@ -3188,7 +3183,7 @@ msgid "Add stream" msgstr "स्ट्रीम जोड़ें" #. Description for configuring an optional setup wizard integration now. -#: src/features/app/components/setup/SetupWizardSteps.tsx:965 +#: src/features/app/components/setup/SetupWizardSteps.tsx:958 msgid "Add the credentials during setup." msgstr "सेटअप के दौरान क्रेडेंशियल जोड़ें।" @@ -3954,7 +3949,7 @@ msgid "An invalid status was provided. You can now close this tab and return to msgstr "अमान्य स्टेटस मिला। अब आप इस टैब को बंद करके ऐप पर वापस जा सकते हैं।" #. Short label in the authentication auth form. Keep the tone plain and specific. -#: src/features/auth/hooks/useAuthForm.ts:13 +#: src/features/auth/hooks/useAuthForm.ts:12 msgid "An unexpected error occurred" msgstr "कोई अनपेक्षित गड़बड़ी हुई" @@ -4262,7 +4257,7 @@ msgid "Anyone can request an account, but an administrator must approve it." msgstr "कोई भी अकाउंट के लिए अनुरोध कर सकता है, लेकिन एडमिनिस्ट्रेटर को उसे मंज़ूरी देनी होगी।" #. Label for an integration API key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1018 +#: src/features/app/components/setup/SetupWizardSteps.tsx:994 msgid "API key" msgstr "API कुंजी" @@ -4958,7 +4953,7 @@ msgid "Authorized apps" msgstr "अधिकृत ऐप" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:38 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:37 msgid "Authorized IPs cleared. New logins will require email verification." msgstr "अधिकृत आईपी हटा दिए गए हैं। नए लॉगिन के लिए ईमेल वेरिफ़िकेशन ज़रूरी होगा।" @@ -5730,7 +5725,7 @@ msgid "Bluesky connections" msgstr "ब्लूस्काई कनेक्शन" #. Setup wizard title for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1001 +#: src/features/app/components/setup/SetupWizardSteps.tsx:986 msgid "Bluesky OAuth" msgstr "ब्लूस्काई OAuth" @@ -5897,11 +5892,6 @@ msgstr "बॉट अनुमतियाँ ऋणात्मक नहीं msgid "Bot profile" msgstr "बॉट प्रोफ़ाइल" -#. Setup wizard title for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:985 -msgid "Bot protection" -msgstr "बॉट सुरक्षा" - #. Short label in the authentication OAUTH scopes step. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/OAuthScopesStep.tsx:20 msgid "Bot scope requested" @@ -6554,11 +6544,6 @@ msgstr "एडिट नहीं किया जा सकता" msgid "Cannot delete account" msgstr "अकाउंट नहीं मिटाया जा सकता" -#. Toast error shown when captcha verification fails inside the auth captcha interceptor. -#: src/features/auth/components/CaptchaInterceptor.tsx:15 -msgid "Captcha verification failed. Try again." -msgstr "कैप्चा वेरिफ़िकेशन विफल रहा। फिर से कोशिश करें।" - #. Section header in the Linux audio source picker. Lists capture-target options (entire system / specific apps). #: src/features/voice/components/AudioSourcePickerLinux.tsx:50 msgid "Capture" @@ -7398,10 +7383,6 @@ msgstr "एक्सेस जाँचा जा रहा है..." msgid "Checking screen recording permission..." msgstr "स्क्रीन रिकॉर्डिंग अनुमति की जाँच की जा रही है..." -#: src/features/auth/components/AltchaVerification.tsx:62 -msgid "Checking your browser. This takes a few seconds." -msgstr "आपके ब्राउज़र की जाँच हो रही है। इसमें कुछ सेकंड लगेंगे।" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -7571,11 +7552,6 @@ msgstr "फ़ाइल चुनें, फिर Dock में जोड़ msgid "Choose friends to message." msgstr "मैसेज करने के लिए दोस्तों को चुनें।" -#. Setup wizard body for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:989 -msgid "Choose hCaptcha or Cloudflare Turnstile for signup challenges." -msgstr "साइनअप चुनौतियों के लिए hCaptcha या Cloudflare Turnstile चुनें।" - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:455 msgid "Choose how chat moves after you send a message" @@ -7982,17 +7958,17 @@ msgid "Clear selection" msgstr "चयन साफ़ करें" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:88 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:87 msgid "Clear trust all setting" msgstr "सभी ट्रस्ट सेटिंग साफ़ करें" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:63 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:62 msgid "Clear trusted domains" msgstr "भरोसेमंद डोमेन मिटाएँ" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:96 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:95 msgid "Clear trusted domains ({trustedDomainsCount})" msgstr "भरोसेमंद डोमेन मिटाएँ ({trustedDomainsCount})" @@ -8002,7 +7978,7 @@ msgid "Clearer text" msgstr "ज़्यादा स्पष्ट टेक्स्ट" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:108 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:107 msgid "Clearing trusted domains..." msgstr "भरोसेमंद डोमेन हटाए जा रहे हैं..." @@ -8100,7 +8076,7 @@ msgid "Client" msgstr "क्लाइंट" #. Label for Bluesky OAuth client name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1057 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1031 msgid "Client name" msgstr "क्लाइंट का नाम" @@ -8117,7 +8093,7 @@ msgid "Client secret regenerated. Update any code that uses the old secret." msgstr "क्लाइंट सीक्रेट फिर से जनरेट हो गया है। पुराने सीक्रेट का इस्तेमाल करने वाले किसी भी कोड को अपडेट करें।" #. Label for Bluesky OAuth client URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1061 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 msgid "Client URL" msgstr "क्लाइंट यूआरएल" @@ -8269,11 +8245,6 @@ msgstr "बंद किए गए DM" msgid "Cloud upload" msgstr "क्लाउड अपलोड" -#. Cloudflare Turnstile provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1014 -msgid "Cloudflare Turnstile" -msgstr "Cloudflare Turnstile" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:58 msgid "Coal" @@ -8669,7 +8640,7 @@ msgstr "कम्युनिटी का नाम" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:126 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:125 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:113 msgid "Community nickname" msgstr "कम्युनिटी उपनाम" @@ -8722,7 +8693,7 @@ msgid "Community profile" msgstr "कम्युनिटी प्रोफ़ाइल" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:73 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:72 msgid "Community profile updated" msgstr "कम्युनिटी प्रोफ़ाइल अपडेट की गई" @@ -8880,7 +8851,7 @@ msgid "Configure keyboard shortcuts" msgstr "कीबोर्ड शॉर्टकट कॉन्फ़िगर करें" #. Option for configuring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:961 +#: src/features/app/components/setup/SetupWizardSteps.tsx:954 msgid "Configure now" msgstr "अभी कॉन्फ़िगर करें" @@ -12341,7 +12312,7 @@ msgstr "{channel} से डिस्कनेक्ट करें" msgid "Disconnect from voice" msgstr "वॉइस से डिस्कनेक्ट करें" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:261 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:243 msgid "Disconnect socket" msgstr "सॉकेट डिस्कनेक्ट करें" @@ -12479,7 +12450,7 @@ msgstr "डिस्प्ले मोड" #. Short label in the inputs tab. Keep it concise. #. Short label in the my profile tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:22 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:138 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:137 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:61 msgid "Display name" msgstr "डिस्प्ले नाम" @@ -12625,7 +12596,7 @@ msgstr "क्या आप {communityName} में शामिल होन #. Label in the accessibility tab. #. Label in the my profile tab. #: src/features/user/components/modals/tabs/AccessibilityTab.tsx:54 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:146 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:145 msgid "Doc, I'm from the future. I came here in a time machine that you invented. Now, I need your help to get back to the year 1985." msgstr "डॉक्टर, मैं भविष्य से आया हूँ। मैं आपकी बनाई टाइम मशीन से यहाँ आया हूँ। अब, मुझे 1985 में वापस जाने के लिए आपकी मदद चाहिए।" @@ -13262,7 +13233,7 @@ msgid "Edit your messages above or below" msgstr "अपने संदेशों को ऊपर या नीचे संपादित करें" #. Button or menu action label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:93 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:92 msgid "Edit your profile appearance and see a live preview" msgstr "अपनी प्रोफ़ाइल का स्वरूप बदलें और लाइव प्रीव्यू देखें" @@ -13330,7 +13301,7 @@ msgid "Email changed" msgstr "ईमेल बदल गया" #. Setup wizard title for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:993 +#: src/features/app/components/setup/SetupWizardSteps.tsx:978 msgid "Email delivery" msgstr "ईमेल डिलीवरी" @@ -13635,7 +13606,7 @@ msgid "Enable beta feature" msgstr "बीटा सुविधा चालू करें" #. Label for enabling Bluesky OAuth in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1053 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1027 msgid "Enable Bluesky OAuth" msgstr "ब्लूस्काई OAuth चालू करें" @@ -13668,7 +13639,7 @@ msgid "Enable developer mode" msgstr "डेवलपर मोड चालू करें" #. Label for enabling SMTP email delivery in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1021 +#: src/features/app/components/setup/SetupWizardSteps.tsx:995 msgid "Enable email delivery" msgstr "ईमेल डिलीवरी चालू करें" @@ -14705,7 +14676,7 @@ msgid "Failed to ban member. Try again." msgstr "सदस्य को बैन नहीं कर पाए। फिर से कोशिश करें।" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:59 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:58 msgid "Failed to clear trusted domains." msgstr "भरोसेमंद डोमेन साफ़ नहीं किए जा सके।" @@ -14762,7 +14733,7 @@ msgid "Failed to enable camera." msgstr "कैमरा चालू नहीं हो पाया।" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:42 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:41 msgid "Failed to forget authorized IPs. Try again." msgstr "अधिकृत आईपी भुलाए नहीं जा सके। फिर से कोशिश करें।" @@ -14907,7 +14878,7 @@ msgid "Failed to resend verification code. Try again later." msgstr "वेरिफ़िकेशन कोड दोबारा नहीं भेजा जा सका। बाद में फिर से कोशिश करें।" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:75 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:74 msgid "Failed to reset premium state." msgstr "प्रीमियम स्थिति रीसेट नहीं हो पाई।" @@ -15581,7 +15552,7 @@ msgstr "लोडिंग स्केलेटन फ़ोर्स करे msgid "Force mature media" msgstr "वयस्क मीडिया फ़ोर्स करें" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:276 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:258 msgid "Force move to AFK channel" msgstr "AFK चैनल में ज़बरदस्ती ले जाएं" @@ -15640,7 +15611,7 @@ msgid "Forced off" msgstr "ज़बरदस्ती बंद किया गया" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:46 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:45 msgid "Forget authorized IPs" msgstr "अधिकृत आईपी भूल जाएं" @@ -15650,7 +15621,7 @@ msgid "Forget subscriptions" msgstr "सदस्यताएँ भूल जाएँ" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:104 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:103 msgid "Forgetting authorized IPs..." msgstr "अधिकृत आईपी भूल रहे हैं..." @@ -15907,12 +15878,12 @@ msgid "from <0>{0}" msgstr "<0>{0} से" #. Label for SMTP from email input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1025 +#: src/features/app/components/setup/SetupWizardSteps.tsx:999 msgid "From email" msgstr "प्रेषक ईमेल" #. Label for SMTP from name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1029 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1003 msgid "From name" msgstr "प्रेषक का नाम" @@ -16204,7 +16175,7 @@ msgid "GIF preview" msgstr "GIF का प्रीव्यू" #. Setup wizard title for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:969 +#: src/features/app/components/setup/SetupWizardSteps.tsx:962 msgid "GIF search" msgstr "GIF खोज" @@ -16853,21 +16824,12 @@ msgstr "गिफ्ट कोड है? {PREMIUM_PRODUCT_NAME} को अन msgid "Having fun?" msgstr "मज़े कर रहे हैं?" -#: src/features/auth/components/modals/CaptchaModal.tsx:175 -msgid "Having issues? Try hCaptcha instead" -msgstr "समस्या आ रही है? इसके बजाय hCaptcha आज़माएँ" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:63 msgctxt "us-state" msgid "Hawaii" msgstr "हवाई" -#. hCaptcha provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1013 -msgid "hCaptcha" -msgstr "hCaptcha" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:238 msgid "HD" @@ -19768,7 +19730,7 @@ msgid "Logo" msgstr "लोगो" #. Label for Bluesky OAuth logo URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1065 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1039 msgid "Logo URL" msgstr "लोगो यूआरएल" @@ -22941,7 +22903,7 @@ msgid "No tokens match \"{searchQuery}\"." msgstr "\"{searchQuery}\" से कोई टोकन मेल नहीं खाता।" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:92 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:91 msgid "No trusted domains" msgstr "कोई भरोसेमंद डोमेन नहीं" @@ -23696,10 +23658,6 @@ msgstr "ब्राउज़र पिकर खोलें" msgid "Open call view" msgstr "कॉल व्यू खोलें" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:288 -msgid "Open captcha modal" -msgstr "कैप्चा मॉडल खोलें" - #. Accessible label for the channel header title button in a community channel. #: src/features/channel/components/channel_header/shared.ts:14 msgid "Open channel details for {channelName}" @@ -23712,7 +23670,7 @@ msgstr "{channelName} के चैनल विवरण खोलें" msgid "Open chat" msgstr "चैट खोलें" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:314 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:290 msgid "Open claim account modal" msgstr "अकाउंट क्लेम मॉडल खोलें" @@ -23944,11 +23902,11 @@ msgstr "ब्राउज़र में स्टिकर खोलें" msgid "Open streaming privacy settings" msgstr "स्ट्रीमिंग गोपनीयता सेटिंग्स खोलें" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:327 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:303 msgid "Open sudo verification modal" msgstr "सुडो वेरिफ़िकेशन मॉडल खोलें" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:342 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:318 msgid "Open system DM" msgstr "सिस्टम DM खोलें" @@ -24430,7 +24388,7 @@ msgstr "पासकी के लिए मान्य ऐप्लिके #. Generic form-field label for a password. #. Label for SMTP password input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1036 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1010 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:146 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:183 @@ -25212,7 +25170,7 @@ msgid "Popup" msgstr "पॉपअप" #. Label for SMTP port input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1034 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1008 msgid "Port" msgstr "पोर्ट" @@ -25338,7 +25296,7 @@ msgid "Premium since date" msgstr "प्रीमियम इस तारीख से" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:71 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:70 msgid "Premium state reset on the backend." msgstr "प्रीमियम स्थिति बैकएंड पर रीसेट हो गई।" @@ -25608,7 +25566,7 @@ msgid "Privacy settings" msgstr "गोपनीयता सेटिंग्स" #. Label for Bluesky OAuth privacy URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1073 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1047 msgid "Privacy URL" msgstr "गोपनीयता यूआरएल" @@ -25633,7 +25591,7 @@ msgid "Private details" msgstr "निजी विवरण" #. Label for Bluesky OAuth private key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1081 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1055 msgid "Private key" msgstr "निजी कुंजी" @@ -25699,18 +25657,18 @@ msgstr "प्रोफ़ाइल रंग" #. Settings section label for editing profile appearance and identity. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:105 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:104 #: src/features/user/components/settings_utils/section_registry/GeneralSettingsSections.ts:6 msgid "Profile customization" msgstr "प्रोफ़ाइल कस्टमाइज़ेशन" #. Label in the my profile tab. Preserve {selectedGuildName}; it is inserted by code. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:101 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:100 msgid "Profile customization for {selectedGuildName}" msgstr "{selectedGuildName} के लिए प्रोफ़ाइल कस्टमाइज़ेशन" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:97 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:96 msgid "Profile customization form" msgstr "प्रोफ़ाइल कस्टमाइज़ेशन फ़ॉर्म" @@ -25775,7 +25733,7 @@ msgid "Profile type" msgstr "प्रोफ़ाइल प्रकार" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:77 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:76 msgid "Profile updated" msgstr "प्रोफ़ाइल अपडेट की गई" @@ -25812,7 +25770,7 @@ msgstr "नया ऑडियो डिवाइस कनेक्ट हो #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:142 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:141 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:177 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:160 msgid "Pronouns" @@ -25842,11 +25800,6 @@ msgstr "जिस व्यक्ति की आप रिपोर्ट क msgid "Provide your full legal name for the declaration." msgstr "घोषणा के लिए अपना पूरा कानूनी नाम दें।" -#. Label for an integration provider choice. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 -msgid "Provider" -msgstr "प्रदाता" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27626,7 +27579,7 @@ msgid "Reset password" msgstr "पासवर्ड रीसेट करें" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:79 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:78 msgid "Reset premium state" msgstr "प्रीमियम स्थिति रीसेट करें" @@ -27635,7 +27588,7 @@ msgstr "प्रीमियम स्थिति रीसेट करें msgid "Reset slider to default value" msgstr "स्लाइडर को डिफ़ॉल्ट मान पर रीसेट करें" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:247 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:229 msgid "Reset socket" msgstr "सॉकेट रीसेट करें" @@ -27684,7 +27637,7 @@ msgid "Reset zoom" msgstr "ज़ूम रीसेट करें" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:112 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:111 msgid "Resetting premium state..." msgstr "प्रीमियम स्थिति रीसेट की जा रही है..." @@ -28315,7 +28268,7 @@ msgid "Run the instance as one community instead of many. This can only be enabl msgstr "इंस्टेंस को कई कम्युनिटी के बजाय एक ही कम्युनिटी के तौर पर चलाएँ। इसे सिर्फ़ अभी, सेटअप के दौरान ही चालू किया जा सकता है।" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:100 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:99 msgid "Runtime utilities" msgstr "रनटाइम यूटिलिटीज़" @@ -29103,11 +29056,6 @@ msgstr "सेकेंडरी बटन पर क्लिक किया msgid "Secret" msgstr "सीक्रेट" -#. Label for a CAPTCHA secret key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1020 -msgid "Secret key" -msgstr "गुप्त कुंजी" - #. Settings search entry label. Names the settings search entry in the settings UI. #. Short label in the secrets section. Keep it concise. Keep the tone plain and specific. #: src/features/user/components/modals/tabs/applications_tab/application_detail/SecretsSection.tsx:11 @@ -29925,7 +29873,7 @@ msgid "Set up authenticator app" msgstr "ऑथेंटिकेटर ऐप सेट अप करें" #. Option for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:953 +#: src/features/app/components/setup/SetupWizardSteps.tsx:946 msgid "Set up later" msgstr "बाद में सेट अप करें" @@ -30427,7 +30375,7 @@ msgstr "इनलाइन DM सूची दिखाएं" msgid "Show just the typing indicator without avatars" msgstr "बिना अवतार के सिर्फ़ टाइपिंग इंडिकेटर दिखाएं" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:308 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:284 msgid "Show keyboard mode intro" msgstr "कीबोर्ड मोड परिचय दिखाएं" @@ -30538,7 +30486,7 @@ msgstr "नेको दिखाएं" msgid "Show new device alerts" msgstr "नए डिवाइस अलर्ट दिखाएं" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:282 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:264 msgid "Show new device modal" msgstr "नया डिवाइस मोडल दिखाएं" @@ -30820,7 +30768,7 @@ msgid "Signed-in devices" msgstr "साइन इन किए गए डिवाइस" #. Label for Bluesky OAuth signing key ID input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1077 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1051 msgid "Signing key ID" msgstr "साइनिंग कुंजी आईडी" @@ -30910,11 +30858,6 @@ msgstr "एकल पंक्ति" msgid "Single user (all statuses)" msgstr "एक यूज़र (सभी स्टेटस)" -#. Label for a CAPTCHA site key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 -msgid "Site key" -msgstr "साइट कुंजी" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:98 @@ -30964,7 +30907,7 @@ msgid "Skip the system leave notice — nobody gets pinged." msgstr "छोड़ने का सिस्टम मैसेज नहीं दिखेगा, किसी को पिंग नहीं होगा।" #. Description for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:957 +#: src/features/app/components/setup/SetupWizardSteps.tsx:950 msgid "Skip this now and configure it from the admin panel." msgstr "इसे अभी छोड़ें और एडमिन पैनल से कॉन्फ़िगर करें।" @@ -31212,17 +31155,17 @@ msgid "SMS verification is unavailable right now. Try again later or contact sup msgstr "SMS वेरिफ़िकेशन अभी उपलब्ध नहीं है। बाद में फिर से कोशिश करें या सहायता से संपर्क करें।" #. Success message after validating SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1045 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 msgid "SMTP connection verified." msgstr "SMTP कनेक्शन सत्यापित हो गया।" #. Label for SMTP host input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1033 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1007 msgid "SMTP host" msgstr "SMTP होस्ट" #. Failure message after validating SMTP credentials when the server returns no error detail. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1049 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1023 msgid "SMTP validation failed." msgstr "SMTP वैलिडेशन विफल रहा।" @@ -31402,7 +31345,7 @@ msgstr "कुछ गड़बड़ हो गई। बाद में फि #. Inline error in the web deep-link prompt when opening the desktop app fails. #. Toast error shown when the mature content check request fails unexpectedly. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:18 -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:580 +#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 #: src/features/auth/flow/DesktopDeepLinkPrompt.tsx:31 msgid "Something went wrong. Try again." msgstr "कुछ गड़बड़ हो गई। फिर से कोशिश करें।" @@ -32099,6 +32042,11 @@ msgstr "अभी इंडेक्स किया जा रहा है — msgid "Still Neko" msgstr "स्थिर नेको" +#. Small toast shown only when an automatic background check before sign-in, sign-up or a similar request takes more than a couple of seconds. No user action needed. Keep it short and calm. +#: src/features/auth/altcha/CaptchaInterceptor.ts:13 +msgid "Still working on it…" +msgstr "अभी भी काम कर रहा है…" + #. Stop-recording button label in the desktop voice message composer. #: src/features/voice/components/VoiceMessageComposerModal.tsx:65 msgid "Stop" @@ -33013,7 +32961,7 @@ msgid "Terms of service" msgstr "सेवा की शर्तें" #. Label for Bluesky OAuth terms URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1069 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1043 msgid "Terms URL" msgstr "नियम यूआरएल" @@ -33023,7 +32971,7 @@ msgid "Terrorism or violent extremism" msgstr "आतंकवाद या हिंसक चरमपंथ" #. Button that validates SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1041 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1015 msgid "Test SMTP" msgstr "SMTP टेस्ट करें" @@ -33800,7 +33748,7 @@ msgid "This clears quick CSS, imported themes, uploaded assets, and local file r msgstr "यह इस डिवाइस पर क्विक CSS, इंपोर्ट की गई थीम, अपलोड की गई एसेट और लोकल फ़ाइल रेफ़रेंस हटा देगा।" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:83 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:82 msgid "This clears your backend premium state entirely, including premium type, billing metadata, and override flags." msgstr "यह आपकी बैकएंड प्रीमियम स्थिति को पूरी तरह से साफ़ कर देता है, जिसमें प्रीमियम प्रकार, बिलिंग मेटाडेटा और ओवरराइड फ़्लैग शामिल हैं।" @@ -34200,7 +34148,7 @@ msgid "This message no longer exists." msgstr "यह मैसेज अब मौजूद नहीं है।" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:130 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:129 msgid "This nickname will only be visible in this community" msgstr "यह निकनेम सिर्फ़ इस कम्युनिटी में दिखेगा" @@ -34277,12 +34225,12 @@ msgid "This removes all custom CSS overrides. Theme files in your library are no msgstr "यह सभी कस्टम CSS ओवरराइड हटा देता है। आपकी लाइब्रेरी में थीम फ़ाइलें प्रभावित नहीं होती हैं।" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:50 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:49 msgid "This removes all previously authorized IP addresses on your account. The next login from any IP will require email verification." msgstr "यह आपके अकाउंट से पहले से अधिकृत सभी आईपी पते हटा देता है। किसी भी आईपी से अगले लॉगिन पर ईमेल वेरिफ़िकेशन ज़रूरी होगा।" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:67 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:66 msgid "This removes all trusted domains. You will see the external link warning for all domains again." msgstr "यह सभी भरोसेमंद डोमेन हटा देता है। आपको सभी डोमेन के लिए बाहरी लिंक की चेतावनी फिर से दिखाई देगी।" @@ -34949,7 +34897,7 @@ msgstr "ट्रे आइकॉन में बदलाव Linux पर र msgid "Trending GIFs" msgstr "ट्रेंडिंग GIF" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:383 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:359 msgid "Trigger React crash" msgstr "React क्रैश ट्रिगर करें" @@ -35008,7 +34956,7 @@ msgid "Trusted domains" msgstr "भरोसेमंद डोमेन" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:55 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:54 msgid "Trusted domains cleared." msgstr "भरोसेमंद डोमेन हटा दिए गए हैं।" @@ -35054,7 +35002,6 @@ msgid "Try a different variable name or clear the search." msgstr "कोई दूसरा वैरिएबल नाम आज़माएँ या खोज साफ़ करें।" #. Generic action label for retrying a failed or interrupted operation. -#: src/features/auth/components/AltchaVerification.tsx:53 #: src/features/auth/flow/AuthRouteLoadError.tsx:22 #: src/features/i18n/utils/CommonMessageDescriptors.ts:75 msgid "Try again" @@ -35132,10 +35079,6 @@ msgstr "इसके बजाय सुरक्षा कुंजी/पा msgid "Try sending your message again." msgstr "अपना मैसेज फिर से भेजने की कोशिश करें।" -#: src/features/auth/components/modals/CaptchaModal.tsx:177 -msgid "Try Turnstile instead" -msgstr "इसके बजाय Turnstile आज़माएँ" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:135 msgid "TTS" @@ -36890,7 +36833,7 @@ msgid "Use this when troubleshooting the client or collecting logs. It may add v msgstr "इसका इस्तेमाल क्लाइंट को ट्रबलशूट करते समय या लॉग इकट्ठा करते समय करें। यह मौजूदा क्लाइंट के लिए ब्राउज़र कंसोल में ज़्यादा जानकारी वाले मैसेज जोड़ सकता है।" #. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1037 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1011 msgid "Use TLS" msgstr "TLS का उपयोग करें" @@ -37056,7 +36999,7 @@ msgstr "यूज़र का वॉल्यूम" #. Generic form-field label for a username. #. Label for SMTP username input. #. Settings search entry label. Also used as a search synonym in the settings search bar. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 #: src/features/i18n/utils/CommonMessageDescriptors.ts:572 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:218 #: src/features/user/components/modals/tabs/my_profile_tab/MyProfileTabUsernameSection.tsx:56 @@ -37337,11 +37280,6 @@ msgstr "फ़ोन नंबर वेरिफ़ाई करें" msgid "Verify phone number form" msgstr "फ़ोन नंबर वेरिफ़ाई करने का फ़ॉर्म" -#. Short label in the authentication captcha modal. Keep the tone plain and specific. -#: src/features/auth/components/modals/CaptchaModal.tsx:17 -msgid "Verify you're human" -msgstr "पुष्टि करें कि आप इंसान हैं" - #. Title of the error modal shown when an unverified account tries to start a DM. #. Title shown when an unverified account cannot start a DM or group DM. #: src/features/app/components/alerts/DmActionErrorModal.tsx:40 @@ -37369,22 +37307,22 @@ msgid "Verify your email before adding an authenticator app." msgstr "ऑथेंटिकेटर ऐप जोड़ने से पहले अपना ईमेल वेरिफ़ाई करें।" #. Description text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:117 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:116 msgid "Verify your email before changing your community nickname, avatar, banner, bio, pronouns, or accent color." msgstr "अपना कम्युनिटी निकनेम, अवतार, बैनर, बायो, सर्वनाम या एक्सेंट कलर बदलने से पहले अपना ईमेल वेरिफ़ाई करें।" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:121 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:120 msgid "Verify your email before changing your username, display name, avatar, banner, bio, pronouns, time zone, or {premiumProductName} badge privacy." msgstr "अपना यूज़रनेम, डिसप्ले नेम, अवतार, बैनर, बायो, सर्वनाम, टाइमज़ोन या {premiumProductName} बैज की प्राइवेसी बदलने से पहले अपना ईमेल वेरिफ़ाई करें।" #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:85 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:84 msgid "Verify your email before editing this community profile. You can still preview it here." msgstr "इस कम्युनिटी प्रोफ़ाइल को एडिट करने से पहले अपना ईमेल वेरिफ़ाई करें। आप इसे अभी भी यहाँ देख सकते हैं।" #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:89 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:88 msgid "Verify your email before editing your profile. You can still preview it here." msgstr "प्रोफ़ाइल एडिट करने से पहले अपना ईमेल वेरिफ़ाई करें। आप इसे अभी भी यहाँ देख सकते हैं।" @@ -37416,12 +37354,12 @@ msgid "Verify your email to continue using {productName}." msgstr "{productName} का उपयोग जारी रखने के लिए अपना ईमेल वेरिफ़ाई करें।" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:109 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:108 msgid "Verify your email to edit this community profile" msgstr "इस कम्युनिटी प्रोफ़ाइल को एडिट करने के लिए अपना ईमेल वेरिफ़ाई करें" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:113 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:112 msgid "Verify your email to edit your profile" msgstr "अपनी प्रोफ़ाइल एडिट करने के लिए अपना ईमेल वेरिफ़ाई करें" @@ -38398,10 +38336,6 @@ msgstr "हमने ब्राज़ील में {premiumProductName} क msgid "We need one verification step before you continue. This helps protect accounts and keep spam off {productName}." msgstr "जारी रखने से पहले हमें एक वेरिफ़िकेशन चरण की ज़रूरत है। यह अकाउंट को सुरक्षित रखने और {productName} से स्पैम दूर रखने में मदद करता है।" -#: src/features/auth/components/modals/CaptchaModal.tsx:128 -msgid "We need to make sure you're not a bot. Complete the verification below." -msgstr "हमें यह सुनिश्चित करना होगा कि आप बॉट नहीं हैं। नीचे दिया गया वेरिफ़िकेशन पूरा करें।" - #. Required-action modal intro text when both email and phone verification are required. #: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:216 msgid "We need two verification steps before you continue. We will show one step at a time." @@ -39256,7 +39190,7 @@ msgid "You can't befriend yourself" msgstr "आप खुद को दोस्त नहीं बना सकते" #. Label in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:134 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:133 msgid "You can't change your nickname here" msgstr "आप अपना उपनाम यहां नहीं बदल सकते" @@ -39506,7 +39440,7 @@ msgid "You have unsaved changes." msgstr "आपके कुछ बदलाव सेव नहीं हुए हैं।" #. Warning text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:81 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:80 msgid "You have unsaved changes. Save or reset before leaving." msgstr "आपके कुछ बदलाव सेव नहीं हुए हैं। जाने से पहले सेव करें या रीसेट करें।" @@ -40031,10 +39965,6 @@ msgstr "आपकी कार्रवाई पूरी नहीं हो msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "आपका आवेदन समीक्षा के लिए लंबित है। आप अभी भी अपनी लिस्टिंग का विवरण अपडेट कर सकते हैं या आवेदन वापस ले सकते हैं।" -#: src/features/auth/components/AltchaVerification.tsx:50 -msgid "Your browser couldn't finish the check." -msgstr "आपका ब्राउज़र जाँच पूरी नहीं कर सका।" - #. Body of the browser-audio-required modal explaining why the user must click before audio can play. #: src/features/voice/components/modals/AudioPlaybackPermissionModal.tsx:12 msgid "Your browser requires user interaction before audio can be played. Click the button below to enable voice chat." @@ -40386,7 +40316,7 @@ msgid "YouTube enrichment" msgstr "YouTube एनरिचमेंट" #. Setup wizard title for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:977 +#: src/features/app/components/setup/SetupWizardSteps.tsx:970 msgid "YouTube previews" msgstr "YouTube प्रीव्यू" diff --git a/fluxer_app/src/features/i18n/locales/hr/messages.po b/fluxer_app/src/features/i18n/locales/hr/messages.po index 7f731ec6b..b41f68b40 100644 --- a/fluxer_app/src/features/i18n/locales/hr/messages.po +++ b/fluxer_app/src/features/i18n/locales/hr/messages.po @@ -2395,11 +2395,6 @@ msgstr "60 sekundi" msgid "7 days" msgstr "7 dana" -#. Required-action error when the API requires a captcha for phone verification. -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 -msgid "A browser check is required before phone verification. Try again from the sign-in page or contact support." -msgstr "Potrebna je provjera preglednika prije provjere telefona. Pokušajte ponovno sa stranice za prijavu ili se obratite podršci." - #. Hint shown beside in:. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:77 msgid "a channel" @@ -2928,7 +2923,7 @@ msgid "Add a friend to get started." msgstr "Dodajte prijatelja za početak." #. Setup wizard body for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:973 +#: src/features/app/components/setup/SetupWizardSteps.tsx:966 msgid "Add a Klipy API key to enable GIF search at runtime." msgstr "Dodajte Klipy API ključ kako biste omogućili pretraživanje GIF-ova tijekom rada." @@ -2965,7 +2960,7 @@ msgid "Add a working email" msgstr "Dodajte ispravnu e-adresu" #. Setup wizard body for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:981 +#: src/features/app/components/setup/SetupWizardSteps.tsx:974 msgid "Add a YouTube Data API key to enrich YouTube links." msgstr "Dodajte YouTube Data API ključ kako biste obogatili YouTube poveznice." @@ -3011,7 +3006,7 @@ msgid "Add another reaction" msgstr "Dodaj još jednu reakciju" #. Setup wizard body for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1005 +#: src/features/app/components/setup/SetupWizardSteps.tsx:990 msgid "Add Bluesky OAuth client metadata and a signing key." msgstr "Dodajte metapodatke OAuth klijenta za Bluesky i ključ za potpisivanje." @@ -3161,7 +3156,7 @@ msgid "Add shortcut" msgstr "Dodaj prečac" #. Setup wizard body for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:997 +#: src/features/app/components/setup/SetupWizardSteps.tsx:982 msgid "Add SMTP credentials so the instance can send verification and notification email." msgstr "Dodajte SMTP vjerodajnice kako bi instanca mogla slati e-poštu za provjeru i obavijesti." @@ -3188,7 +3183,7 @@ msgid "Add stream" msgstr "Dodaj prijenos" #. Description for configuring an optional setup wizard integration now. -#: src/features/app/components/setup/SetupWizardSteps.tsx:965 +#: src/features/app/components/setup/SetupWizardSteps.tsx:958 msgid "Add the credentials during setup." msgstr "Dodajte vjerodajnice tijekom postavljanja." @@ -3954,7 +3949,7 @@ msgid "An invalid status was provided. You can now close this tab and return to msgstr "Naveden je nevažeći status. Sada možete zatvoriti ovu karticu i vratiti se u aplikaciju." #. Short label in the authentication auth form. Keep the tone plain and specific. -#: src/features/auth/hooks/useAuthForm.ts:13 +#: src/features/auth/hooks/useAuthForm.ts:12 msgid "An unexpected error occurred" msgstr "Došlo je do neočekivane pogreške" @@ -4262,7 +4257,7 @@ msgid "Anyone can request an account, but an administrator must approve it." msgstr "Svatko može zatražiti račun, ali administrator ga mora odobriti." #. Label for an integration API key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1018 +#: src/features/app/components/setup/SetupWizardSteps.tsx:994 msgid "API key" msgstr "API ključ" @@ -4958,7 +4953,7 @@ msgid "Authorized apps" msgstr "Autorizirane aplikacije" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:38 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:37 msgid "Authorized IPs cleared. New logins will require email verification." msgstr "Autorizirane IP adrese su obrisane. Za nove prijave bit će potrebna provjera e-pošte." @@ -5730,7 +5725,7 @@ msgid "Bluesky connections" msgstr "Povezivanje s Blueskyjem" #. Setup wizard title for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1001 +#: src/features/app/components/setup/SetupWizardSteps.tsx:986 msgid "Bluesky OAuth" msgstr "Bluesky OAuth" @@ -5897,11 +5892,6 @@ msgstr "Dopuštenja bota ne mogu biti negativna." msgid "Bot profile" msgstr "Profil bota" -#. Setup wizard title for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:985 -msgid "Bot protection" -msgstr "Zaštita od botova" - #. Short label in the authentication OAUTH scopes step. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/OAuthScopesStep.tsx:20 msgid "Bot scope requested" @@ -6554,11 +6544,6 @@ msgstr "Nije moguće urediti" msgid "Cannot delete account" msgstr "Nije moguće izbrisati račun" -#. Toast error shown when captcha verification fails inside the auth captcha interceptor. -#: src/features/auth/components/CaptchaInterceptor.tsx:15 -msgid "Captcha verification failed. Try again." -msgstr "Provjera Captche nije uspjela. Pokušajte ponovno." - #. Section header in the Linux audio source picker. Lists capture-target options (entire system / specific apps). #: src/features/voice/components/AudioSourcePickerLinux.tsx:50 msgid "Capture" @@ -7398,10 +7383,6 @@ msgstr "Provjera pristupa..." msgid "Checking screen recording permission..." msgstr "Provjera dopuštenja za snimanje zaslona..." -#: src/features/auth/components/AltchaVerification.tsx:62 -msgid "Checking your browser. This takes a few seconds." -msgstr "Provjeravamo vaš preglednik. Ovo traje nekoliko sekundi." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -7571,11 +7552,6 @@ msgstr "Odaberite Datoteka, zatim Dodaj u Dock." msgid "Choose friends to message." msgstr "Odaberite prijatelje za slanje poruke." -#. Setup wizard body for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:989 -msgid "Choose hCaptcha or Cloudflare Turnstile for signup challenges." -msgstr "Odaberite hCaptcha ili Cloudflare Turnstile za izazove prilikom registracije." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:455 msgid "Choose how chat moves after you send a message" @@ -7982,17 +7958,17 @@ msgid "Clear selection" msgstr "Poništi odabir" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:88 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:87 msgid "Clear trust all setting" msgstr "Poništi postavku \"vjeruj svima\"" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:63 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:62 msgid "Clear trusted domains" msgstr "Očisti pouzdane domene" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:96 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:95 msgid "Clear trusted domains ({trustedDomainsCount})" msgstr "Očisti pouzdane domene ({trustedDomainsCount})" @@ -8002,7 +7978,7 @@ msgid "Clearer text" msgstr "Jasniji tekst" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:108 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:107 msgid "Clearing trusted domains..." msgstr "Brisanje pouzdanih domena..." @@ -8100,7 +8076,7 @@ msgid "Client" msgstr "Klijent" #. Label for Bluesky OAuth client name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1057 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1031 msgid "Client name" msgstr "Naziv klijenta" @@ -8117,7 +8093,7 @@ msgid "Client secret regenerated. Update any code that uses the old secret." msgstr "Klijentska tajna je ponovno generirana. Ažurirajte sav kod koji koristi staru tajnu." #. Label for Bluesky OAuth client URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1061 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 msgid "Client URL" msgstr "URL klijenta" @@ -8269,11 +8245,6 @@ msgstr "Zatvorene izravne poruke" msgid "Cloud upload" msgstr "Prijenos u oblak" -#. Cloudflare Turnstile provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1014 -msgid "Cloudflare Turnstile" -msgstr "Cloudflare Turnstile" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:58 msgid "Coal" @@ -8669,7 +8640,7 @@ msgstr "Naziv zajednice" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:126 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:125 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:113 msgid "Community nickname" msgstr "Nadimak u zajednici" @@ -8722,7 +8693,7 @@ msgid "Community profile" msgstr "Profil zajednice" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:73 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:72 msgid "Community profile updated" msgstr "Profil zajednice ažuriran" @@ -8880,7 +8851,7 @@ msgid "Configure keyboard shortcuts" msgstr "Konfigurirajte prečace na tipkovnici" #. Option for configuring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:961 +#: src/features/app/components/setup/SetupWizardSteps.tsx:954 msgid "Configure now" msgstr "Konfiguriraj sada" @@ -12341,7 +12312,7 @@ msgstr "Prekini vezu s kanalom {channel}" msgid "Disconnect from voice" msgstr "Prekini vezu s glasovnim pozivom" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:261 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:243 msgid "Disconnect socket" msgstr "Prekini vezu sa socketom" @@ -12479,7 +12450,7 @@ msgstr "Način prikaza" #. Short label in the inputs tab. Keep it concise. #. Short label in the my profile tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:22 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:138 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:137 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:61 msgid "Display name" msgstr "Ime za prikaz" @@ -12625,7 +12596,7 @@ msgstr "Želiš li se pridružiti zajednici {communityName}?" #. Label in the accessibility tab. #. Label in the my profile tab. #: src/features/user/components/modals/tabs/AccessibilityTab.tsx:54 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:146 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:145 msgid "Doc, I'm from the future. I came here in a time machine that you invented. Now, I need your help to get back to the year 1985." msgstr "Doktore, ja sam iz budućnosti. Došao sam ovamo vremenskim strojem koji ste vi izumili. Sada mi treba vaša pomoć da se vratim u 1985. godinu." @@ -13262,7 +13233,7 @@ msgid "Edit your messages above or below" msgstr "Uredi svoje poruke iznad ili ispod" #. Button or menu action label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:93 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:92 msgid "Edit your profile appearance and see a live preview" msgstr "Uredite izgled profila i pogledajte pregled uživo" @@ -13330,7 +13301,7 @@ msgid "Email changed" msgstr "E-pošta promijenjena" #. Setup wizard title for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:993 +#: src/features/app/components/setup/SetupWizardSteps.tsx:978 msgid "Email delivery" msgstr "Isporuka e-pošte" @@ -13635,7 +13606,7 @@ msgid "Enable beta feature" msgstr "Omogući beta značajku" #. Label for enabling Bluesky OAuth in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1053 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1027 msgid "Enable Bluesky OAuth" msgstr "Omogući Bluesky OAuth" @@ -13668,7 +13639,7 @@ msgid "Enable developer mode" msgstr "Omogući način rada za razvojne programere" #. Label for enabling SMTP email delivery in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1021 +#: src/features/app/components/setup/SetupWizardSteps.tsx:995 msgid "Enable email delivery" msgstr "Omogući isporuku e-pošte" @@ -14705,7 +14676,7 @@ msgid "Failed to ban member. Try again." msgstr "Zabrana pristupa članu nije uspjela. Pokušajte ponovno." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:59 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:58 msgid "Failed to clear trusted domains." msgstr "Nije uspjelo brisanje pouzdanih domena." @@ -14762,7 +14733,7 @@ msgid "Failed to enable camera." msgstr "Omogućavanje kamere nije uspjelo." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:42 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:41 msgid "Failed to forget authorized IPs. Try again." msgstr "Nije uspjelo zaboravljanje autoriziranih IP adresa. Pokušajte ponovno." @@ -14907,7 +14878,7 @@ msgid "Failed to resend verification code. Try again later." msgstr "Ponovno slanje koda za provjeru nije uspjelo. Pokušajte ponovno kasnije." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:75 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:74 msgid "Failed to reset premium state." msgstr "Nije uspjelo poništavanje premium statusa." @@ -15581,7 +15552,7 @@ msgstr "Prisilno prikaži kostur učitavanja" msgid "Force mature media" msgstr "Prisilno prikaži medije za odrasle" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:276 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:258 msgid "Force move to AFK channel" msgstr "Prisilno premjesti u AFK kanal" @@ -15640,7 +15611,7 @@ msgid "Forced off" msgstr "Prisilno isključeno" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:46 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:45 msgid "Forget authorized IPs" msgstr "Zaboravi autorizirane IP adrese" @@ -15650,7 +15621,7 @@ msgid "Forget subscriptions" msgstr "Zaboravi pretplate" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:104 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:103 msgid "Forgetting authorized IPs..." msgstr "Zaboravljanje autoriziranih IP adresa..." @@ -15907,12 +15878,12 @@ msgid "from <0>{0}" msgstr "iz <0>{0}" #. Label for SMTP from email input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1025 +#: src/features/app/components/setup/SetupWizardSteps.tsx:999 msgid "From email" msgstr "E-pošta pošiljatelja" #. Label for SMTP from name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1029 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1003 msgid "From name" msgstr "Ime pošiljatelja" @@ -16204,7 +16175,7 @@ msgid "GIF preview" msgstr "Pregled GIF-a" #. Setup wizard title for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:969 +#: src/features/app/components/setup/SetupWizardSteps.tsx:962 msgid "GIF search" msgstr "Pretraživanje GIF-ova" @@ -16853,21 +16824,12 @@ msgstr "Imaš poklon-kod? Iskoristi ga za otključavanje {PREMIUM_PRODUCT_NAME}. msgid "Having fun?" msgstr "Zabavljate se?" -#: src/features/auth/components/modals/CaptchaModal.tsx:175 -msgid "Having issues? Try hCaptcha instead" -msgstr "Imate poteškoća? Umjesto toga pokušajte s hCaptchom" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:63 msgctxt "us-state" msgid "Hawaii" msgstr "Havaji" -#. hCaptcha provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1013 -msgid "hCaptcha" -msgstr "hCaptcha" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:238 msgid "HD" @@ -19768,7 +19730,7 @@ msgid "Logo" msgstr "Logotip" #. Label for Bluesky OAuth logo URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1065 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1039 msgid "Logo URL" msgstr "URL logotipa" @@ -22941,7 +22903,7 @@ msgid "No tokens match \"{searchQuery}\"." msgstr "Nema tokena koji odgovaraju \"{searchQuery}\"." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:92 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:91 msgid "No trusted domains" msgstr "Nema pouzdanih domena" @@ -23696,10 +23658,6 @@ msgstr "Otvori birač preglednika" msgid "Open call view" msgstr "Otvori prikaz poziva" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:288 -msgid "Open captcha modal" -msgstr "Otvori captcha modal" - #. Accessible label for the channel header title button in a community channel. #: src/features/channel/components/channel_header/shared.ts:14 msgid "Open channel details for {channelName}" @@ -23712,7 +23670,7 @@ msgstr "Otvori pojedinosti kanala {channelName}" msgid "Open chat" msgstr "Otvori čavrljanje" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:314 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:290 msgid "Open claim account modal" msgstr "Otvori modal za preuzimanje računa" @@ -23944,11 +23902,11 @@ msgstr "Otvori naljepnicu u pregledniku" msgid "Open streaming privacy settings" msgstr "Otvori postavke privatnosti strujanja" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:327 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:303 msgid "Open sudo verification modal" msgstr "Otvori modal za sudo provjeru" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:342 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:318 msgid "Open system DM" msgstr "Otvori izravnu poruku sustava" @@ -24430,7 +24388,7 @@ msgstr "Pristupni ključevi zahtijevaju potpisani macOS paket s valjanim identif #. Generic form-field label for a password. #. Label for SMTP password input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1036 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1010 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:146 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:183 @@ -25212,7 +25170,7 @@ msgid "Popup" msgstr "Skočni prozor" #. Label for SMTP port input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1034 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1008 msgid "Port" msgstr "Port" @@ -25338,7 +25296,7 @@ msgid "Premium since date" msgstr "Premium od datuma" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:71 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:70 msgid "Premium state reset on the backend." msgstr "Stanje premium računa resetirano na pozadini." @@ -25608,7 +25566,7 @@ msgid "Privacy settings" msgstr "Postavke privatnosti" #. Label for Bluesky OAuth privacy URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1073 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1047 msgid "Privacy URL" msgstr "URL pravila privatnosti" @@ -25633,7 +25591,7 @@ msgid "Private details" msgstr "Privatni podaci" #. Label for Bluesky OAuth private key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1081 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1055 msgid "Private key" msgstr "Privatni ključ" @@ -25699,18 +25657,18 @@ msgstr "Boja profila" #. Settings section label for editing profile appearance and identity. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:105 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:104 #: src/features/user/components/settings_utils/section_registry/GeneralSettingsSections.ts:6 msgid "Profile customization" msgstr "Prilagodba profila" #. Label in the my profile tab. Preserve {selectedGuildName}; it is inserted by code. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:101 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:100 msgid "Profile customization for {selectedGuildName}" msgstr "Prilagodba profila za {selectedGuildName}" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:97 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:96 msgid "Profile customization form" msgstr "Obrazac za prilagodbu profila" @@ -25775,7 +25733,7 @@ msgid "Profile type" msgstr "Vrsta profila" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:77 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:76 msgid "Profile updated" msgstr "Profil ažuriran" @@ -25812,7 +25770,7 @@ msgstr "Upit pri povezivanju novih audio uređaja" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:142 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:141 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:177 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:160 msgid "Pronouns" @@ -25842,11 +25800,6 @@ msgstr "Unesite ID korisnika ili korisničko ime osobe koju prijavljujete." msgid "Provide your full legal name for the declaration." msgstr "Navedite svoje puno zakonsko ime za izjavu." -#. Label for an integration provider choice. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 -msgid "Provider" -msgstr "Davatelj" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27626,7 +27579,7 @@ msgid "Reset password" msgstr "Poništi lozinku" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:79 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:78 msgid "Reset premium state" msgstr "Poništi premium status" @@ -27635,7 +27588,7 @@ msgstr "Poništi premium status" msgid "Reset slider to default value" msgstr "Vrati klizač na zadanu vrijednost" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:247 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:229 msgid "Reset socket" msgstr "Ponovno postavi socket" @@ -27684,7 +27637,7 @@ msgid "Reset zoom" msgstr "Poništi zumiranje" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:112 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:111 msgid "Resetting premium state..." msgstr "Poništavanje premium statusa..." @@ -28315,7 +28268,7 @@ msgid "Run the instance as one community instead of many. This can only be enabl msgstr "Pokreni instancu kao jednu zajednicu umjesto više njih. Ovo se može omogućiti samo sada, tijekom postavljanja." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:100 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:99 msgid "Runtime utilities" msgstr "Uslužni programi za izvođenje" @@ -29103,11 +29056,6 @@ msgstr "Kliknut sekundarni gumb." msgid "Secret" msgstr "Tajno" -#. Label for a CAPTCHA secret key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1020 -msgid "Secret key" -msgstr "Tajni ključ" - #. Settings search entry label. Names the settings search entry in the settings UI. #. Short label in the secrets section. Keep it concise. Keep the tone plain and specific. #: src/features/user/components/modals/tabs/applications_tab/application_detail/SecretsSection.tsx:11 @@ -29925,7 +29873,7 @@ msgid "Set up authenticator app" msgstr "Postavite aplikaciju za autentifikaciju" #. Option for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:953 +#: src/features/app/components/setup/SetupWizardSteps.tsx:946 msgid "Set up later" msgstr "Postavi kasnije" @@ -30427,7 +30375,7 @@ msgstr "Prikaži popis izravnih poruka" msgid "Show just the typing indicator without avatars" msgstr "Prikaži samo indikator tipkanja bez avatara" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:308 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:284 msgid "Show keyboard mode intro" msgstr "Prikaži uvod u način rada tipkovnice" @@ -30538,7 +30486,7 @@ msgstr "Prikaži Neko" msgid "Show new device alerts" msgstr "Prikaži upozorenja za novi uređaj" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:282 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:264 msgid "Show new device modal" msgstr "Prikaži skočni prozor za novi uređaj" @@ -30820,7 +30768,7 @@ msgid "Signed-in devices" msgstr "Prijavljeni uređaji" #. Label for Bluesky OAuth signing key ID input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1077 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1051 msgid "Signing key ID" msgstr "ID ključa za potpisivanje" @@ -30910,11 +30858,6 @@ msgstr "Jedan redak" msgid "Single user (all statuses)" msgstr "Jedan korisnik (svi statusi)" -#. Label for a CAPTCHA site key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 -msgid "Site key" -msgstr "Ključ web-mjesta" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:98 @@ -30964,7 +30907,7 @@ msgid "Skip the system leave notice — nobody gets pinged." msgstr "Preskoči sistemsku poruku o napuštanju grupe. Nitko neće dobiti obavijest." #. Description for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:957 +#: src/features/app/components/setup/SetupWizardSteps.tsx:950 msgid "Skip this now and configure it from the admin panel." msgstr "Preskoči ovo sada i konfiguriraj iz administratorske ploče." @@ -31212,17 +31155,17 @@ msgid "SMS verification is unavailable right now. Try again later or contact sup msgstr "SMS provjera trenutačno nije dostupna. Pokušajte ponovno kasnije ili se obratite podršci." #. Success message after validating SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1045 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 msgid "SMTP connection verified." msgstr "SMTP veza provjerena." #. Label for SMTP host input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1033 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1007 msgid "SMTP host" msgstr "SMTP poslužitelj" #. Failure message after validating SMTP credentials when the server returns no error detail. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1049 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1023 msgid "SMTP validation failed." msgstr "SMTP provjera nije uspjela." @@ -31402,7 +31345,7 @@ msgstr "Nešto je pošlo po zlu. Pokušajte ponovno kasnije." #. Inline error in the web deep-link prompt when opening the desktop app fails. #. Toast error shown when the mature content check request fails unexpectedly. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:18 -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:580 +#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 #: src/features/auth/flow/DesktopDeepLinkPrompt.tsx:31 msgid "Something went wrong. Try again." msgstr "Nešto je pošlo po zlu. Pokušajte ponovno." @@ -32099,6 +32042,11 @@ msgstr "Indeksiranje je još u tijeku – provjerite ponovno za trenutak" msgid "Still Neko" msgstr "Nepomični Neko" +#. Small toast shown only when an automatic background check before sign-in, sign-up or a similar request takes more than a couple of seconds. No user action needed. Keep it short and calm. +#: src/features/auth/altcha/CaptchaInterceptor.ts:13 +msgid "Still working on it…" +msgstr "Još radimo na tome…" + #. Stop-recording button label in the desktop voice message composer. #: src/features/voice/components/VoiceMessageComposerModal.tsx:65 msgid "Stop" @@ -33013,7 +32961,7 @@ msgid "Terms of service" msgstr "Uvjeti pružanja usluge" #. Label for Bluesky OAuth terms URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1069 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1043 msgid "Terms URL" msgstr "URL uvjeta" @@ -33023,7 +32971,7 @@ msgid "Terrorism or violent extremism" msgstr "Terorizam ili nasilni ekstremizam" #. Button that validates SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1041 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1015 msgid "Test SMTP" msgstr "Testiraj SMTP" @@ -33800,7 +33748,7 @@ msgid "This clears quick CSS, imported themes, uploaded assets, and local file r msgstr "Ovo briše brzi CSS, uvezene teme, prenesene resurse i reference lokalnih datoteka na ovom uređaju." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:83 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:82 msgid "This clears your backend premium state entirely, including premium type, billing metadata, and override flags." msgstr "Ovo u potpunosti briše vaše premium stanje na pozadini, uključujući vrstu premium pretplate, metapodatke naplate i zastavice za nadjačavanje." @@ -34200,7 +34148,7 @@ msgid "This message no longer exists." msgstr "Ova poruka više ne postoji." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:130 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:129 msgid "This nickname will only be visible in this community" msgstr "Ovaj nadimak bit će vidljiv samo u ovoj zajednici" @@ -34277,12 +34225,12 @@ msgid "This removes all custom CSS overrides. Theme files in your library are no msgstr "Ovo uklanja sva prilagođena CSS nadjačavanja. Datoteke tema u vašoj biblioteci ostaju nepromijenjene." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:50 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:49 msgid "This removes all previously authorized IP addresses on your account. The next login from any IP will require email verification." msgstr "Ovo uklanja sve prethodno autorizirane IP adrese s vašeg računa. Sljedeća prijava s bilo koje IP adrese zahtijevat će potvrdu e-pošte." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:67 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:66 msgid "This removes all trusted domains. You will see the external link warning for all domains again." msgstr "Ovo uklanja sve pouzdane domene. Ponovno ćete vidjeti upozorenje o vanjskoj poveznici za sve domene." @@ -34949,7 +34897,7 @@ msgstr "Promjene ikone u paleti sustava primjenjuju se tek nakon ponovnog pokret msgid "Trending GIFs" msgstr "GIF-ovi u trendu" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:383 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:359 msgid "Trigger React crash" msgstr "Pokreni pad Reacta" @@ -35008,7 +34956,7 @@ msgid "Trusted domains" msgstr "Pouzdane domene" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:55 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:54 msgid "Trusted domains cleared." msgstr "Pouzdane domene izbrisane." @@ -35054,7 +35002,6 @@ msgid "Try a different variable name or clear the search." msgstr "Pokušajte s drugim nazivom varijable ili obrišite pretraživanje." #. Generic action label for retrying a failed or interrupted operation. -#: src/features/auth/components/AltchaVerification.tsx:53 #: src/features/auth/flow/AuthRouteLoadError.tsx:22 #: src/features/i18n/utils/CommonMessageDescriptors.ts:75 msgid "Try again" @@ -35132,10 +35079,6 @@ msgstr "Pokušajte sa sigurnosnim ključem / pristupnim ključem" msgid "Try sending your message again." msgstr "Pokušajte ponovno poslati poruku." -#: src/features/auth/components/modals/CaptchaModal.tsx:177 -msgid "Try Turnstile instead" -msgstr "Pokušajte s Turnstileom" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:135 msgid "TTS" @@ -36890,7 +36833,7 @@ msgid "Use this when troubleshooting the client or collecting logs. It may add v msgstr "Koristite ovo za rješavanje problema s klijentom ili prikupljanje zapisnika. To može dodati opširne poruke u konzolu preglednika za trenutačnog klijenta." #. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1037 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1011 msgid "Use TLS" msgstr "Koristi TLS" @@ -37056,7 +36999,7 @@ msgstr "Glasnoća korisnika" #. Generic form-field label for a username. #. Label for SMTP username input. #. Settings search entry label. Also used as a search synonym in the settings search bar. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 #: src/features/i18n/utils/CommonMessageDescriptors.ts:572 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:218 #: src/features/user/components/modals/tabs/my_profile_tab/MyProfileTabUsernameSection.tsx:56 @@ -37337,11 +37280,6 @@ msgstr "Potvrdite telefonski broj" msgid "Verify phone number form" msgstr "Obrazac za potvrdu telefonskog broja" -#. Short label in the authentication captcha modal. Keep the tone plain and specific. -#: src/features/auth/components/modals/CaptchaModal.tsx:17 -msgid "Verify you're human" -msgstr "Potvrdite da ste čovjek" - #. Title of the error modal shown when an unverified account tries to start a DM. #. Title shown when an unverified account cannot start a DM or group DM. #: src/features/app/components/alerts/DmActionErrorModal.tsx:40 @@ -37369,22 +37307,22 @@ msgid "Verify your email before adding an authenticator app." msgstr "Potvrdite svoju e-poštu prije dodavanja aplikacije za provjeru autentičnosti." #. Description text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:117 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:116 msgid "Verify your email before changing your community nickname, avatar, banner, bio, pronouns, or accent color." msgstr "Potvrdite svoju e-poštu prije promjene nadimka u zajednici, avatara, naslovne slike, biografije, zamjenica ili boje naglaska." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:121 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:120 msgid "Verify your email before changing your username, display name, avatar, banner, bio, pronouns, time zone, or {premiumProductName} badge privacy." msgstr "Potvrdite svoju e-poštu prije promjene korisničkog imena, imena za prikaz, avatara, naslovne slike, biografije, zamjenica, vremenske zone ili privatnosti značke {premiumProductName}." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:85 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:84 msgid "Verify your email before editing this community profile. You can still preview it here." msgstr "Potvrdite svoju e-poštu prije uređivanja profila zajednice. Ovdje ga i dalje možete pregledati." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:89 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:88 msgid "Verify your email before editing your profile. You can still preview it here." msgstr "Potvrdite svoju e-poštu prije uređivanja profila. Ovdje ga i dalje možete pregledati." @@ -37416,12 +37354,12 @@ msgid "Verify your email to continue using {productName}." msgstr "Potvrdite svoju e-poštu kako biste nastavili koristiti {productName}." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:109 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:108 msgid "Verify your email to edit this community profile" msgstr "Potvrdite svoju e-poštu da biste uredili ovaj profil zajednice" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:113 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:112 msgid "Verify your email to edit your profile" msgstr "Potvrdite svoju e-poštu da biste uredili profil" @@ -38398,10 +38336,6 @@ msgstr "Snizili smo cijenu za {premiumProductName} u Brazilu. Sada je {monthlyPr msgid "We need one verification step before you continue. This helps protect accounts and keep spam off {productName}." msgstr "Potreban je jedan korak provjere prije nego što nastavite. To pomaže u zaštiti računa i sprječavanju neželjene pošte na {productName}." -#: src/features/auth/components/modals/CaptchaModal.tsx:128 -msgid "We need to make sure you're not a bot. Complete the verification below." -msgstr "Moramo se uvjeriti da niste bot. Dovršite provjeru u nastavku." - #. Required-action modal intro text when both email and phone verification are required. #: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:216 msgid "We need two verification steps before you continue. We will show one step at a time." @@ -39256,7 +39190,7 @@ msgid "You can't befriend yourself" msgstr "Ne možete se sprijateljiti sami sa sobom" #. Label in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:134 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:133 msgid "You can't change your nickname here" msgstr "Ovdje ne možete promijeniti nadimak" @@ -39506,7 +39440,7 @@ msgid "You have unsaved changes." msgstr "Imate nespremljene promjene." #. Warning text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:81 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:80 msgid "You have unsaved changes. Save or reset before leaving." msgstr "Imate nespremljene promjene. Spremite ili poništite prije odlaska." @@ -40031,10 +39965,6 @@ msgstr "Vaša radnja nije mogla biti dovršena jer ju je naš sigurnosni sustav msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Vaša prijava čeka pregled. I dalje možete ažurirati pojedinosti unosa ili povući prijavu." -#: src/features/auth/components/AltchaVerification.tsx:50 -msgid "Your browser couldn't finish the check." -msgstr "Vaš preglednik nije mogao dovršiti provjeru." - #. Body of the browser-audio-required modal explaining why the user must click before audio can play. #: src/features/voice/components/modals/AudioPlaybackPermissionModal.tsx:12 msgid "Your browser requires user interaction before audio can be played. Click the button below to enable voice chat." @@ -40386,7 +40316,7 @@ msgid "YouTube enrichment" msgstr "Obogaćivanje putem YouTubea" #. Setup wizard title for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:977 +#: src/features/app/components/setup/SetupWizardSteps.tsx:970 msgid "YouTube previews" msgstr "Pretpregledi s YouTubea" diff --git a/fluxer_app/src/features/i18n/locales/hu/messages.po b/fluxer_app/src/features/i18n/locales/hu/messages.po index 7eb2f9fe2..48c1fcef3 100644 --- a/fluxer_app/src/features/i18n/locales/hu/messages.po +++ b/fluxer_app/src/features/i18n/locales/hu/messages.po @@ -2395,11 +2395,6 @@ msgstr "60 másodperc" msgid "7 days" msgstr "7 nap" -#. Required-action error when the API requires a captcha for phone verification. -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 -msgid "A browser check is required before phone verification. Try again from the sign-in page or contact support." -msgstr "A telefonszám ellenőrzése előtt böngészőellenőrzés szükséges. Próbáld újra a bejelentkezési oldalról, vagy fordulj az ügyfélszolgálathoz." - #. Hint shown beside in:. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:77 msgid "a channel" @@ -2928,7 +2923,7 @@ msgid "Add a friend to get started." msgstr "Kezdéshez vegyél fel egy ismerőst." #. Setup wizard body for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:973 +#: src/features/app/components/setup/SetupWizardSteps.tsx:966 msgid "Add a Klipy API key to enable GIF search at runtime." msgstr "Adj hozzá egy Klipy API-kulcsot a GIF-keresés futásidejű engedélyezéséhez." @@ -2965,7 +2960,7 @@ msgid "Add a working email" msgstr "Működő e-mail-cím hozzáadása" #. Setup wizard body for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:981 +#: src/features/app/components/setup/SetupWizardSteps.tsx:974 msgid "Add a YouTube Data API key to enrich YouTube links." msgstr "Adj hozzá egy YouTube Data API-kulcsot a YouTube-hivatkozások gazdagításához." @@ -3011,7 +3006,7 @@ msgid "Add another reaction" msgstr "Másik reakció hozzáadása" #. Setup wizard body for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1005 +#: src/features/app/components/setup/SetupWizardSteps.tsx:990 msgid "Add Bluesky OAuth client metadata and a signing key." msgstr "Adj hozzá Bluesky OAuth-kliensmetaadatokat és egy aláíró kulcsot." @@ -3161,7 +3156,7 @@ msgid "Add shortcut" msgstr "Billentyűparancs hozzáadása" #. Setup wizard body for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:997 +#: src/features/app/components/setup/SetupWizardSteps.tsx:982 msgid "Add SMTP credentials so the instance can send verification and notification email." msgstr "Adj hozzá SMTP-hitelesítőadatokat, hogy a példány ellenőrző és értesítő e-maileket küldhessen." @@ -3188,7 +3183,7 @@ msgid "Add stream" msgstr "Stream hozzáadása" #. Description for configuring an optional setup wizard integration now. -#: src/features/app/components/setup/SetupWizardSteps.tsx:965 +#: src/features/app/components/setup/SetupWizardSteps.tsx:958 msgid "Add the credentials during setup." msgstr "Add meg a hitelesítő adatokat a beállítás során." @@ -3954,7 +3949,7 @@ msgid "An invalid status was provided. You can now close this tab and return to msgstr "Érvénytelen állapot érkezett. Most már bezárhatod ezt a lapot, és visszatérhetsz az alkalmazásba." #. Short label in the authentication auth form. Keep the tone plain and specific. -#: src/features/auth/hooks/useAuthForm.ts:13 +#: src/features/auth/hooks/useAuthForm.ts:12 msgid "An unexpected error occurred" msgstr "Váratlan hiba történt" @@ -4262,7 +4257,7 @@ msgid "Anyone can request an account, but an administrator must approve it." msgstr "Bárki kérhet fiókot, de egy rendszergazdának jóvá kell hagynia." #. Label for an integration API key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1018 +#: src/features/app/components/setup/SetupWizardSteps.tsx:994 msgid "API key" msgstr "API-kulcs" @@ -4958,7 +4953,7 @@ msgid "Authorized apps" msgstr "Engedélyezett alkalmazások" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:38 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:37 msgid "Authorized IPs cleared. New logins will require email verification." msgstr "Az engedélyezett IP-címek törölve. Az új bejelentkezésekhez e-mail-ellenőrzés szükséges." @@ -5730,7 +5725,7 @@ msgid "Bluesky connections" msgstr "Bluesky-kapcsolatok" #. Setup wizard title for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1001 +#: src/features/app/components/setup/SetupWizardSteps.tsx:986 msgid "Bluesky OAuth" msgstr "Bluesky OAuth" @@ -5897,11 +5892,6 @@ msgstr "A bot jogosultságainak értéke nem lehet negatív." msgid "Bot profile" msgstr "Botprofil" -#. Setup wizard title for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:985 -msgid "Bot protection" -msgstr "Botvédelem" - #. Short label in the authentication OAUTH scopes step. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/OAuthScopesStep.tsx:20 msgid "Bot scope requested" @@ -6554,11 +6544,6 @@ msgstr "Nem szerkeszthető" msgid "Cannot delete account" msgstr "A fiók nem törölhető" -#. Toast error shown when captcha verification fails inside the auth captcha interceptor. -#: src/features/auth/components/CaptchaInterceptor.tsx:15 -msgid "Captcha verification failed. Try again." -msgstr "A CAPTCHA-ellenőrzés sikertelen. Próbáld újra." - #. Section header in the Linux audio source picker. Lists capture-target options (entire system / specific apps). #: src/features/voice/components/AudioSourcePickerLinux.tsx:50 msgid "Capture" @@ -7398,10 +7383,6 @@ msgstr "Hozzáférés ellenőrzése…" msgid "Checking screen recording permission..." msgstr "A képernyőfelvétel engedélyének ellenőrzése..." -#: src/features/auth/components/AltchaVerification.tsx:62 -msgid "Checking your browser. This takes a few seconds." -msgstr "Böngésző ellenőrzése. Ez néhány másodpercet vesz igénybe." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -7571,11 +7552,6 @@ msgstr "Válaszd a Fájl menüt, majd a Hozzáadás a Dockhoz parancsot." msgid "Choose friends to message." msgstr "Válassz ismerősöket az üzenetküldéshez." -#. Setup wizard body for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:989 -msgid "Choose hCaptcha or Cloudflare Turnstile for signup challenges." -msgstr "Válassz hCaptcha-t vagy Cloudflare Turnstile-t a regisztrációs kihívásokhoz." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:455 msgid "Choose how chat moves after you send a message" @@ -7982,17 +7958,17 @@ msgid "Clear selection" msgstr "Kijelölés törlése" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:88 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:87 msgid "Clear trust all setting" msgstr "Minden hivatkozás automatikus elfogadásának kikapcsolása" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:63 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:62 msgid "Clear trusted domains" msgstr "Megbízható domainek törlése" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:96 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:95 msgid "Clear trusted domains ({trustedDomainsCount})" msgstr "Megbízható domainek törlése ({trustedDomainsCount})" @@ -8002,7 +7978,7 @@ msgid "Clearer text" msgstr "Élesebb szöveg" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:108 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:107 msgid "Clearing trusted domains..." msgstr "Megbízható domainek törlése..." @@ -8100,7 +8076,7 @@ msgid "Client" msgstr "Kliens" #. Label for Bluesky OAuth client name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1057 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1031 msgid "Client name" msgstr "Kliens neve" @@ -8117,7 +8093,7 @@ msgid "Client secret regenerated. Update any code that uses the old secret." msgstr "A kliens titkos kulcsa újra lett generálva. Frissítsd az összes kódot, amely a régi kulcsot használja." #. Label for Bluesky OAuth client URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1061 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 msgid "Client URL" msgstr "Kliens URL-je" @@ -8269,11 +8245,6 @@ msgstr "Bezárt közvetlen beszélgetések" msgid "Cloud upload" msgstr "Feltöltés felhőbe" -#. Cloudflare Turnstile provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1014 -msgid "Cloudflare Turnstile" -msgstr "Cloudflare Turnstile" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:58 msgid "Coal" @@ -8669,7 +8640,7 @@ msgstr "Közösség neve" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:126 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:125 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:113 msgid "Community nickname" msgstr "Közösségi becenév" @@ -8722,7 +8693,7 @@ msgid "Community profile" msgstr "Közösségi profil" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:73 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:72 msgid "Community profile updated" msgstr "Közösségi profil frissítve" @@ -8880,7 +8851,7 @@ msgid "Configure keyboard shortcuts" msgstr "Billentyűparancsok beállítása" #. Option for configuring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:961 +#: src/features/app/components/setup/SetupWizardSteps.tsx:954 msgid "Configure now" msgstr "Beállítás most" @@ -12341,7 +12312,7 @@ msgstr "Leválasztás a csatornáról: {channel}" msgid "Disconnect from voice" msgstr "Leválasztás a hangcsatornáról" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:261 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:243 msgid "Disconnect socket" msgstr "Socketkapcsolat bontása" @@ -12479,7 +12450,7 @@ msgstr "Megjelenítési mód" #. Short label in the inputs tab. Keep it concise. #. Short label in the my profile tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:22 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:138 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:137 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:61 msgid "Display name" msgstr "Megjelenítendő név" @@ -12625,7 +12596,7 @@ msgstr "Szeretnél csatlakozni a(z) {communityName} közösséghez?" #. Label in the accessibility tab. #. Label in the my profile tab. #: src/features/user/components/modals/tabs/AccessibilityTab.tsx:54 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:146 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:145 msgid "Doc, I'm from the future. I came here in a time machine that you invented. Now, I need your help to get back to the year 1985." msgstr "Doki, a jövőből jöttem. Azzal az időgéppel érkeztem, amit te találtál fel. Most a segítségedre van szükségem, hogy visszajussak 1985-be." @@ -13262,7 +13233,7 @@ msgid "Edit your messages above or below" msgstr "Saját üzenetek szerkesztése fent vagy lent" #. Button or menu action label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:93 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:92 msgid "Edit your profile appearance and see a live preview" msgstr "Profilod megjelenésének szerkesztése és élő előnézet megtekintése" @@ -13330,7 +13301,7 @@ msgid "Email changed" msgstr "E-mail-cím megváltoztatva" #. Setup wizard title for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:993 +#: src/features/app/components/setup/SetupWizardSteps.tsx:978 msgid "Email delivery" msgstr "E-mailek kézbesítése" @@ -13635,7 +13606,7 @@ msgid "Enable beta feature" msgstr "Bétafunkció engedélyezése" #. Label for enabling Bluesky OAuth in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1053 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1027 msgid "Enable Bluesky OAuth" msgstr "Bluesky OAuth engedélyezése" @@ -13668,7 +13639,7 @@ msgid "Enable developer mode" msgstr "Fejlesztői mód engedélyezése" #. Label for enabling SMTP email delivery in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1021 +#: src/features/app/components/setup/SetupWizardSteps.tsx:995 msgid "Enable email delivery" msgstr "E-mailek kézbesítésének engedélyezése" @@ -14705,7 +14676,7 @@ msgid "Failed to ban member. Try again." msgstr "Nem sikerült kitiltani a tagot. Próbáld újra." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:59 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:58 msgid "Failed to clear trusted domains." msgstr "Nem sikerült törölni a megbízható domaineket." @@ -14762,7 +14733,7 @@ msgid "Failed to enable camera." msgstr "Nem sikerült bekapcsolni a kamerát." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:42 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:41 msgid "Failed to forget authorized IPs. Try again." msgstr "Nem sikerült törölni az engedélyezett IP-címeket. Próbáld újra." @@ -14907,7 +14878,7 @@ msgid "Failed to resend verification code. Try again later." msgstr "Nem sikerült újraküldeni az ellenőrző kódot. Próbáld újra később." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:75 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:74 msgid "Failed to reset premium state." msgstr "A prémium állapot visszaállítása sikertelen." @@ -15581,7 +15552,7 @@ msgstr "Betöltési váz kényszerített megjelenítése" msgid "Force mature media" msgstr "Média kezelése felnőtt tartalomként" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:276 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:258 msgid "Force move to AFK channel" msgstr "Kényszerített áthelyezés az AFK-csatornába" @@ -15640,7 +15611,7 @@ msgid "Forced off" msgstr "Kényszerítetten kikapcsolva" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:46 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:45 msgid "Forget authorized IPs" msgstr "Engedélyezett IP-címek törlése" @@ -15650,7 +15621,7 @@ msgid "Forget subscriptions" msgstr "Feliratkozások elfelejtése" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:104 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:103 msgid "Forgetting authorized IPs..." msgstr "Engedélyezett IP-címek törlése..." @@ -15907,12 +15878,12 @@ msgid "from <0>{0}" msgstr "innen: <0>{0}" #. Label for SMTP from email input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1025 +#: src/features/app/components/setup/SetupWizardSteps.tsx:999 msgid "From email" msgstr "Feladó e-mail-címe" #. Label for SMTP from name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1029 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1003 msgid "From name" msgstr "Feladó neve" @@ -16204,7 +16175,7 @@ msgid "GIF preview" msgstr "GIF-előnézet" #. Setup wizard title for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:969 +#: src/features/app/components/setup/SetupWizardSteps.tsx:962 msgid "GIF search" msgstr "GIF-keresés" @@ -16853,21 +16824,12 @@ msgstr "Van ajándékkódod? Váltsd be, hogy feloldd a(z) {PREMIUM_PRODUCT_NAME msgid "Having fun?" msgstr "Jól szórakozol?" -#: src/features/auth/components/modals/CaptchaModal.tsx:175 -msgid "Having issues? Try hCaptcha instead" -msgstr "Problémába ütköztél? Próbáld inkább a hCaptchát" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:63 msgctxt "us-state" msgid "Hawaii" msgstr "Hawaii" -#. hCaptcha provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1013 -msgid "hCaptcha" -msgstr "hCaptcha" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:238 msgid "HD" @@ -19768,7 +19730,7 @@ msgid "Logo" msgstr "Logó" #. Label for Bluesky OAuth logo URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1065 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1039 msgid "Logo URL" msgstr "Logó URL" @@ -22941,7 +22903,7 @@ msgid "No tokens match \"{searchQuery}\"." msgstr "Nincs találat erre: „{searchQuery}”." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:92 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:91 msgid "No trusted domains" msgstr "Nincsenek megbízható domainek" @@ -23696,10 +23658,6 @@ msgstr "Böngészőválasztó megnyitása" msgid "Open call view" msgstr "Hívásnézet megnyitása" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:288 -msgid "Open captcha modal" -msgstr "Captcha-ablak megnyitása" - #. Accessible label for the channel header title button in a community channel. #: src/features/channel/components/channel_header/shared.ts:14 msgid "Open channel details for {channelName}" @@ -23712,7 +23670,7 @@ msgstr "Csatornarészletek megnyitása – {channelName}" msgid "Open chat" msgstr "Csevegés megnyitása" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:314 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:290 msgid "Open claim account modal" msgstr "Fiókregisztráció befejezése – ablak megnyitása" @@ -23944,11 +23902,11 @@ msgstr "Matrica megnyitása böngészőben" msgid "Open streaming privacy settings" msgstr "Streamelési adatvédelmi beállítások megnyitása" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:327 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:303 msgid "Open sudo verification modal" msgstr "Sudo-ellenőrző ablak megnyitása" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:342 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:318 msgid "Open system DM" msgstr "Rendszerrel folytatott közvetlen beszélgetés megnyitása" @@ -24430,7 +24388,7 @@ msgstr "A jelszókulcsokhoz érvényes alkalmazásazonosítóval rendelkező, al #. Generic form-field label for a password. #. Label for SMTP password input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1036 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1010 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:146 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:183 @@ -25212,7 +25170,7 @@ msgid "Popup" msgstr "Felugró ablak" #. Label for SMTP port input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1034 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1008 msgid "Port" msgstr "Port" @@ -25338,7 +25296,7 @@ msgid "Premium since date" msgstr "Prémium tagság kezdete" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:71 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:70 msgid "Premium state reset on the backend." msgstr "Prémium állapot visszaállítva a háttérrendszeren." @@ -25608,7 +25566,7 @@ msgid "Privacy settings" msgstr "Adatvédelmi beállítások" #. Label for Bluesky OAuth privacy URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1073 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1047 msgid "Privacy URL" msgstr "Adatvédelmi URL" @@ -25633,7 +25591,7 @@ msgid "Private details" msgstr "Személyes adatok" #. Label for Bluesky OAuth private key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1081 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1055 msgid "Private key" msgstr "Privát kulcs" @@ -25699,18 +25657,18 @@ msgstr "Profilszín" #. Settings section label for editing profile appearance and identity. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:105 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:104 #: src/features/user/components/settings_utils/section_registry/GeneralSettingsSections.ts:6 msgid "Profile customization" msgstr "Profil testreszabása" #. Label in the my profile tab. Preserve {selectedGuildName}; it is inserted by code. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:101 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:100 msgid "Profile customization for {selectedGuildName}" msgstr "Profil testreszabása ehhez: {selectedGuildName}" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:97 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:96 msgid "Profile customization form" msgstr "Profil testreszabási űrlap" @@ -25775,7 +25733,7 @@ msgid "Profile type" msgstr "Profiltípus" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:77 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:76 msgid "Profile updated" msgstr "Profil frissítve" @@ -25812,7 +25770,7 @@ msgstr "Rákérdezés új hangeszközök csatlakoztatásakor" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:142 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:141 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:177 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:160 msgid "Pronouns" @@ -25842,11 +25800,6 @@ msgstr "Add meg a bejelenteni kívánt személy felhasználói azonosítóját v msgid "Provide your full legal name for the declaration." msgstr "Add meg a teljes hivatalos nevedet a nyilatkozathoz." -#. Label for an integration provider choice. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 -msgid "Provider" -msgstr "Szolgáltató" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27626,7 +27579,7 @@ msgid "Reset password" msgstr "Jelszó visszaállítása" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:79 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:78 msgid "Reset premium state" msgstr "Prémium állapot visszaállítása" @@ -27635,7 +27588,7 @@ msgstr "Prémium állapot visszaállítása" msgid "Reset slider to default value" msgstr "Csúszka visszaállítása alapértelmezett értékre" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:247 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:229 msgid "Reset socket" msgstr "Socket alaphelyzetbe állítása" @@ -27684,7 +27637,7 @@ msgid "Reset zoom" msgstr "Nagyítás visszaállítása" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:112 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:111 msgid "Resetting premium state..." msgstr "Prémium állapot visszaállítása…" @@ -28315,7 +28268,7 @@ msgid "Run the instance as one community instead of many. This can only be enabl msgstr "Futtasd a példányt egyetlen közösséggel több helyett. Ezt csak most, a kezdeti beállítás során engedélyezheted." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:100 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:99 msgid "Runtime utilities" msgstr "Futtatókörnyezeti segédprogramok" @@ -29103,11 +29056,6 @@ msgstr "A másodlagos gombra kattintottál." msgid "Secret" msgstr "Titkos kulcs" -#. Label for a CAPTCHA secret key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1020 -msgid "Secret key" -msgstr "Titkos kulcs" - #. Settings search entry label. Names the settings search entry in the settings UI. #. Short label in the secrets section. Keep it concise. Keep the tone plain and specific. #: src/features/user/components/modals/tabs/applications_tab/application_detail/SecretsSection.tsx:11 @@ -29925,7 +29873,7 @@ msgid "Set up authenticator app" msgstr "Hitelesítő alkalmazás beállítása" #. Option for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:953 +#: src/features/app/components/setup/SetupWizardSteps.tsx:946 msgid "Set up later" msgstr "Később beállítom" @@ -30427,7 +30375,7 @@ msgstr "DM-lista megjelenítése az oldalsávban" msgid "Show just the typing indicator without avatars" msgstr "Csak a gépelésjelző megjelenítése, profilképek nélkül" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:308 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:284 msgid "Show keyboard mode intro" msgstr "Billentyűzetes mód bemutatójának megjelenítése" @@ -30538,7 +30486,7 @@ msgstr "Neko megjelenítése" msgid "Show new device alerts" msgstr "Új eszközre vonatkozó riasztások megjelenítése" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:282 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:264 msgid "Show new device modal" msgstr "Új eszköz felugró ablak megjelenítése" @@ -30820,7 +30768,7 @@ msgid "Signed-in devices" msgstr "Bejelentkezett eszközök" #. Label for Bluesky OAuth signing key ID input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1077 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1051 msgid "Signing key ID" msgstr "Aláíró kulcs azonosítója" @@ -30910,11 +30858,6 @@ msgstr "Egysoros" msgid "Single user (all statuses)" msgstr "Egy felhasználó (összes állapot)" -#. Label for a CAPTCHA site key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 -msgid "Site key" -msgstr "Webhelykulcs" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:98 @@ -30964,7 +30907,7 @@ msgid "Skip the system leave notice — nobody gets pinged." msgstr "Kilépési rendszerüzenet kihagyása – senki sem kap értesítést." #. Description for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:957 +#: src/features/app/components/setup/SetupWizardSteps.tsx:950 msgid "Skip this now and configure it from the admin panel." msgstr "Hagyd ki most, és állítsd be később az adminisztrációs panelen." @@ -31212,17 +31155,17 @@ msgid "SMS verification is unavailable right now. Try again later or contact sup msgstr "Az SMS-ellenőrzés jelenleg nem érhető el. Próbáld újra később, vagy fordulj az ügyfélszolgálathoz." #. Success message after validating SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1045 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 msgid "SMTP connection verified." msgstr "Az SMTP-kapcsolat ellenőrizve." #. Label for SMTP host input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1033 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1007 msgid "SMTP host" msgstr "SMTP-kiszolgáló" #. Failure message after validating SMTP credentials when the server returns no error detail. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1049 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1023 msgid "SMTP validation failed." msgstr "Az SMTP-ellenőrzés sikertelen." @@ -31402,7 +31345,7 @@ msgstr "Hiba történt. Próbáld újra később." #. Inline error in the web deep-link prompt when opening the desktop app fails. #. Toast error shown when the mature content check request fails unexpectedly. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:18 -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:580 +#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 #: src/features/auth/flow/DesktopDeepLinkPrompt.tsx:31 msgid "Something went wrong. Try again." msgstr "Hiba történt. Próbáld újra." @@ -32099,6 +32042,11 @@ msgstr "Még indexelés alatt – nézz vissza egy pillanat múlva" msgid "Still Neko" msgstr "Mozdulatlan Neko" +#. Small toast shown only when an automatic background check before sign-in, sign-up or a similar request takes more than a couple of seconds. No user action needed. Keep it short and calm. +#: src/features/auth/altcha/CaptchaInterceptor.ts:13 +msgid "Still working on it…" +msgstr "Még dolgozunk rajta…" + #. Stop-recording button label in the desktop voice message composer. #: src/features/voice/components/VoiceMessageComposerModal.tsx:65 msgid "Stop" @@ -33013,7 +32961,7 @@ msgid "Terms of service" msgstr "Szolgáltatási feltételek" #. Label for Bluesky OAuth terms URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1069 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1043 msgid "Terms URL" msgstr "Szolgáltatási feltételek URL-je" @@ -33023,7 +32971,7 @@ msgid "Terrorism or violent extremism" msgstr "Terrorizmus vagy erőszakos szélsőségesség" #. Button that validates SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1041 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1015 msgid "Test SMTP" msgstr "SMTP tesztelése" @@ -33800,7 +33748,7 @@ msgid "This clears quick CSS, imported themes, uploaded assets, and local file r msgstr "Ez törli a gyors CSS-t, az importált témákat, a feltöltött erőforrásokat és a helyi fájlhivatkozásokat ezen az eszközön." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:83 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:82 msgid "This clears your backend premium state entirely, including premium type, billing metadata, and override flags." msgstr "Ez teljesen törli a háttérrendszerben tárolt prémiumállapotodat, beleértve a prémiumtípust, a számlázási metaadatokat és a felülbírálási jelzőket." @@ -34200,7 +34148,7 @@ msgid "This message no longer exists." msgstr "Ez az üzenet már nem létezik." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:130 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:129 msgid "This nickname will only be visible in this community" msgstr "Ez a becenév csak ebben a közösségben lesz látható" @@ -34277,12 +34225,12 @@ msgid "This removes all custom CSS overrides. Theme files in your library are no msgstr "Ez eltávolítja az összes egyéni CSS-felülbírálást. A könyvtáradban lévő témafájlokat nem érinti." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:50 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:49 msgid "This removes all previously authorized IP addresses on your account. The next login from any IP will require email verification." msgstr "Ez eltávolítja az összes korábban engedélyezett IP-címet a fiókodból. A következő bejelentkezéshez bármilyen IP-címről e-mail-ellenőrzés szükséges." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:67 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:66 msgid "This removes all trusted domains. You will see the external link warning for all domains again." msgstr "Ez eltávolít minden megbízható domaint. Ismét látni fogod a külső hivatkozásra figyelmeztető üzenetet minden domainnél." @@ -34949,7 +34897,7 @@ msgstr "Linuxon az értesítési terület ikonjának módosítása csak újraind msgid "Trending GIFs" msgstr "Felkapott GIF-ek" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:383 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:359 msgid "Trigger React crash" msgstr "React-összeomlás kiváltása" @@ -35008,7 +34956,7 @@ msgid "Trusted domains" msgstr "Megbízható domainek" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:55 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:54 msgid "Trusted domains cleared." msgstr "Megbízható domainek törölve." @@ -35054,7 +35002,6 @@ msgid "Try a different variable name or clear the search." msgstr "Próbálj másik változónevet, vagy töröld a keresést." #. Generic action label for retrying a failed or interrupted operation. -#: src/features/auth/components/AltchaVerification.tsx:53 #: src/features/auth/flow/AuthRouteLoadError.tsx:22 #: src/features/i18n/utils/CommonMessageDescriptors.ts:75 msgid "Try again" @@ -35132,10 +35079,6 @@ msgstr "Biztonsági kulcs vagy jelszókulcs használata" msgid "Try sending your message again." msgstr "Próbáld meg újra elküldeni az üzenetet." -#: src/features/auth/components/modals/CaptchaModal.tsx:177 -msgid "Try Turnstile instead" -msgstr "Próbáld meg inkább a Turnstile-t" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:135 msgid "TTS" @@ -36890,7 +36833,7 @@ msgid "Use this when troubleshooting the client or collecting logs. It may add v msgstr "Használd a kliens hibakereséséhez vagy naplók gyűjtéséhez. Részletesebb üzeneteket írhat az aktuális kliens böngészőkonzoljába." #. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1037 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1011 msgid "Use TLS" msgstr "TLS használata" @@ -37056,7 +36999,7 @@ msgstr "Felhasználó hangereje" #. Generic form-field label for a username. #. Label for SMTP username input. #. Settings search entry label. Also used as a search synonym in the settings search bar. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 #: src/features/i18n/utils/CommonMessageDescriptors.ts:572 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:218 #: src/features/user/components/modals/tabs/my_profile_tab/MyProfileTabUsernameSection.tsx:56 @@ -37337,11 +37280,6 @@ msgstr "Telefonszám ellenőrzése" msgid "Verify phone number form" msgstr "Telefonszám-ellenőrző űrlap" -#. Short label in the authentication captcha modal. Keep the tone plain and specific. -#: src/features/auth/components/modals/CaptchaModal.tsx:17 -msgid "Verify you're human" -msgstr "Igazold, hogy ember vagy" - #. Title of the error modal shown when an unverified account tries to start a DM. #. Title shown when an unverified account cannot start a DM or group DM. #: src/features/app/components/alerts/DmActionErrorModal.tsx:40 @@ -37369,22 +37307,22 @@ msgid "Verify your email before adding an authenticator app." msgstr "Hitelesítő alkalmazás hozzáadása előtt erősítsd meg az e-mail-címedet." #. Description text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:117 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:116 msgid "Verify your email before changing your community nickname, avatar, banner, bio, pronouns, or accent color." msgstr "Erősítsd meg az e-mail-címedet, mielőtt módosítod a közösségi becenevedet, profilképedet, borítóképedet, bemutatkozásodat, névmásaidat vagy kiemelőszínedet." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:121 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:120 msgid "Verify your email before changing your username, display name, avatar, banner, bio, pronouns, time zone, or {premiumProductName} badge privacy." msgstr "Erősítsd meg az e-mail-címedet, mielőtt módosítod a felhasználónevedet, megjelenítendő nevedet, profilképedet, borítóképedet, bemutatkozásodat, névmásaidat, időzónádat vagy a(z) {premiumProductName} jelvényed adatvédelmi beállításait." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:85 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:84 msgid "Verify your email before editing this community profile. You can still preview it here." msgstr "Erősítsd meg az e-mail-címedet a közösségi profil szerkesztése előtt. Az előnézetét itt továbbra is megtekintheted." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:89 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:88 msgid "Verify your email before editing your profile. You can still preview it here." msgstr "Erősítsd meg az e-mail-címedet a profilod szerkesztése előtt. Az előnézetét itt továbbra is megtekintheted." @@ -37416,12 +37354,12 @@ msgid "Verify your email to continue using {productName}." msgstr "A(z) {productName} további használatához erősítsd meg az e-mail-címedet." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:109 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:108 msgid "Verify your email to edit this community profile" msgstr "A közösségi profil szerkesztéséhez erősítsd meg az e-mail-címedet" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:113 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:112 msgid "Verify your email to edit your profile" msgstr "A profilod szerkesztéséhez erősítsd meg az e-mail-címedet" @@ -38398,10 +38336,6 @@ msgstr "Brazíliában csökkentettük a(z) {premiumProductName} árát. Mostant msgid "We need one verification step before you continue. This helps protect accounts and keep spam off {productName}." msgstr "A folytatáshoz egy ellenőrzési lépés szükséges. Ez segít megvédeni a fiókokat és távol tartani a spamet a(z) {productName} felületétől." -#: src/features/auth/components/modals/CaptchaModal.tsx:128 -msgid "We need to make sure you're not a bot. Complete the verification below." -msgstr "Biztosítanunk kell, hogy nem vagy robot. Fejezd be az alábbi ellenőrzést." - #. Required-action modal intro text when both email and phone verification are required. #: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:216 msgid "We need two verification steps before you continue. We will show one step at a time." @@ -39256,7 +39190,7 @@ msgid "You can't befriend yourself" msgstr "Nem jelölheted be magad ismerősnek" #. Label in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:134 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:133 msgid "You can't change your nickname here" msgstr "Itt nem módosíthatod a becenevedet" @@ -39506,7 +39440,7 @@ msgid "You have unsaved changes." msgstr "Nem mentett módosításaid vannak." #. Warning text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:81 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:80 msgid "You have unsaved changes. Save or reset before leaving." msgstr "Nem mentett módosításaid vannak. Mentsd el vagy állítsd vissza, mielőtt elnavigálsz." @@ -40031,10 +39965,6 @@ msgstr "A műveletet nem sikerült végrehajtani, mert a biztonsági rendszerein msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "A jelentkezésed felülvizsgálatra vár. Addig is frissítheted a bejegyzésed adatait, vagy visszavonhatod a jelentkezést." -#: src/features/auth/components/AltchaVerification.tsx:50 -msgid "Your browser couldn't finish the check." -msgstr "A böngésződ nem tudta befejezni az ellenőrzést." - #. Body of the browser-audio-required modal explaining why the user must click before audio can play. #: src/features/voice/components/modals/AudioPlaybackPermissionModal.tsx:12 msgid "Your browser requires user interaction before audio can be played. Click the button below to enable voice chat." @@ -40386,7 +40316,7 @@ msgid "YouTube enrichment" msgstr "YouTube-tartalom-gazdagítás" #. Setup wizard title for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:977 +#: src/features/app/components/setup/SetupWizardSteps.tsx:970 msgid "YouTube previews" msgstr "YouTube-előnézetek" diff --git a/fluxer_app/src/features/i18n/locales/id/messages.po b/fluxer_app/src/features/i18n/locales/id/messages.po index fd045bf9c..f7c089394 100644 --- a/fluxer_app/src/features/i18n/locales/id/messages.po +++ b/fluxer_app/src/features/i18n/locales/id/messages.po @@ -2395,11 +2395,6 @@ msgstr "60 detik" msgid "7 days" msgstr "7 hari" -#. Required-action error when the API requires a captcha for phone verification. -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 -msgid "A browser check is required before phone verification. Try again from the sign-in page or contact support." -msgstr "Pemeriksaan browser diperlukan sebelum verifikasi telepon. Coba lagi dari halaman masuk atau hubungi dukungan." - #. Hint shown beside in:. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:77 msgid "a channel" @@ -2928,7 +2923,7 @@ msgid "Add a friend to get started." msgstr "Tambahkan teman untuk memulai." #. Setup wizard body for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:973 +#: src/features/app/components/setup/SetupWizardSteps.tsx:966 msgid "Add a Klipy API key to enable GIF search at runtime." msgstr "Tambahkan kunci API Klipy untuk mengaktifkan pencarian GIF saat runtime." @@ -2965,7 +2960,7 @@ msgid "Add a working email" msgstr "Tambahkan email yang aktif" #. Setup wizard body for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:981 +#: src/features/app/components/setup/SetupWizardSteps.tsx:974 msgid "Add a YouTube Data API key to enrich YouTube links." msgstr "Tambahkan kunci API Data YouTube untuk memperkaya tautan YouTube." @@ -3011,7 +3006,7 @@ msgid "Add another reaction" msgstr "Tambahkan reaksi lain" #. Setup wizard body for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1005 +#: src/features/app/components/setup/SetupWizardSteps.tsx:990 msgid "Add Bluesky OAuth client metadata and a signing key." msgstr "Tambahkan metadata klien OAuth Bluesky dan kunci penandatanganan." @@ -3161,7 +3156,7 @@ msgid "Add shortcut" msgstr "Tambahkan pintasan" #. Setup wizard body for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:997 +#: src/features/app/components/setup/SetupWizardSteps.tsx:982 msgid "Add SMTP credentials so the instance can send verification and notification email." msgstr "Tambahkan kredensial SMTP agar instance dapat mengirim email verifikasi dan notifikasi." @@ -3188,7 +3183,7 @@ msgid "Add stream" msgstr "Tambahkan streaming" #. Description for configuring an optional setup wizard integration now. -#: src/features/app/components/setup/SetupWizardSteps.tsx:965 +#: src/features/app/components/setup/SetupWizardSteps.tsx:958 msgid "Add the credentials during setup." msgstr "Tambahkan kredensial selama penyiapan." @@ -3954,7 +3949,7 @@ msgid "An invalid status was provided. You can now close this tab and return to msgstr "Status yang diberikan tidak valid. Sekarang kamu bisa menutup tab ini dan kembali ke aplikasi." #. Short label in the authentication auth form. Keep the tone plain and specific. -#: src/features/auth/hooks/useAuthForm.ts:13 +#: src/features/auth/hooks/useAuthForm.ts:12 msgid "An unexpected error occurred" msgstr "Terjadi kesalahan tak terduga" @@ -4262,7 +4257,7 @@ msgid "Anyone can request an account, but an administrator must approve it." msgstr "Siapa pun dapat meminta akun, tetapi administrator harus menyetujuinya." #. Label for an integration API key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1018 +#: src/features/app/components/setup/SetupWizardSteps.tsx:994 msgid "API key" msgstr "Kunci API" @@ -4958,7 +4953,7 @@ msgid "Authorized apps" msgstr "Aplikasi yang diotorisasi" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:38 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:37 msgid "Authorized IPs cleared. New logins will require email verification." msgstr "IP yang diotorisasi telah dihapus. Login baru akan memerlukan verifikasi email." @@ -5730,7 +5725,7 @@ msgid "Bluesky connections" msgstr "Koneksi Bluesky" #. Setup wizard title for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1001 +#: src/features/app/components/setup/SetupWizardSteps.tsx:986 msgid "Bluesky OAuth" msgstr "OAuth Bluesky" @@ -5897,11 +5892,6 @@ msgstr "Izin bot tidak boleh negatif." msgid "Bot profile" msgstr "Profil bot" -#. Setup wizard title for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:985 -msgid "Bot protection" -msgstr "Perlindungan bot" - #. Short label in the authentication OAUTH scopes step. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/OAuthScopesStep.tsx:20 msgid "Bot scope requested" @@ -6554,11 +6544,6 @@ msgstr "Tidak bisa diedit" msgid "Cannot delete account" msgstr "Tidak bisa menghapus akun" -#. Toast error shown when captcha verification fails inside the auth captcha interceptor. -#: src/features/auth/components/CaptchaInterceptor.tsx:15 -msgid "Captcha verification failed. Try again." -msgstr "Verifikasi Captcha gagal. Coba lagi." - #. Section header in the Linux audio source picker. Lists capture-target options (entire system / specific apps). #: src/features/voice/components/AudioSourcePickerLinux.tsx:50 msgid "Capture" @@ -7398,10 +7383,6 @@ msgstr "Memeriksa akses..." msgid "Checking screen recording permission..." msgstr "Memeriksa izin perekaman layar..." -#: src/features/auth/components/AltchaVerification.tsx:62 -msgid "Checking your browser. This takes a few seconds." -msgstr "Memeriksa browser Anda. Ini akan memakan waktu beberapa detik." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -7571,11 +7552,6 @@ msgstr "Pilih Arsip, lalu Tambah ke Dock." msgid "Choose friends to message." msgstr "Pilih teman untuk dikirimi pesan." -#. Setup wizard body for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:989 -msgid "Choose hCaptcha or Cloudflare Turnstile for signup challenges." -msgstr "Pilih hCaptcha atau Cloudflare Turnstile untuk tantangan pendaftaran." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:455 msgid "Choose how chat moves after you send a message" @@ -7982,17 +7958,17 @@ msgid "Clear selection" msgstr "Hapus pilihan" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:88 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:87 msgid "Clear trust all setting" msgstr "Hapus pengaturan \"percaya semua\"" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:63 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:62 msgid "Clear trusted domains" msgstr "Hapus domain tepercaya" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:96 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:95 msgid "Clear trusted domains ({trustedDomainsCount})" msgstr "Hapus domain tepercaya ({trustedDomainsCount})" @@ -8002,7 +7978,7 @@ msgid "Clearer text" msgstr "Teks lebih jelas" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:108 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:107 msgid "Clearing trusted domains..." msgstr "Menghapus domain tepercaya..." @@ -8100,7 +8076,7 @@ msgid "Client" msgstr "Klien" #. Label for Bluesky OAuth client name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1057 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1031 msgid "Client name" msgstr "Nama klien" @@ -8117,7 +8093,7 @@ msgid "Client secret regenerated. Update any code that uses the old secret." msgstr "Rahasia klien dibuat ulang. Perbarui kode apa pun yang menggunakan rahasia lama." #. Label for Bluesky OAuth client URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1061 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 msgid "Client URL" msgstr "URL klien" @@ -8269,11 +8245,6 @@ msgstr "DM yang ditutup" msgid "Cloud upload" msgstr "Unggah ke cloud" -#. Cloudflare Turnstile provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1014 -msgid "Cloudflare Turnstile" -msgstr "Cloudflare Turnstile" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:58 msgid "Coal" @@ -8669,7 +8640,7 @@ msgstr "Nama komunitas" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:126 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:125 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:113 msgid "Community nickname" msgstr "Nama panggilan komunitas" @@ -8722,7 +8693,7 @@ msgid "Community profile" msgstr "Profil komunitas" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:73 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:72 msgid "Community profile updated" msgstr "Profil komunitas diperbarui" @@ -8880,7 +8851,7 @@ msgid "Configure keyboard shortcuts" msgstr "Konfigurasi pintasan keyboard" #. Option for configuring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:961 +#: src/features/app/components/setup/SetupWizardSteps.tsx:954 msgid "Configure now" msgstr "Konfigurasi sekarang" @@ -12341,7 +12312,7 @@ msgstr "Putuskan sambungan dari {channel}" msgid "Disconnect from voice" msgstr "Putuskan sambungan suara" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:261 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:243 msgid "Disconnect socket" msgstr "Putuskan sambungan soket" @@ -12479,7 +12450,7 @@ msgstr "Mode tampilan" #. Short label in the inputs tab. Keep it concise. #. Short label in the my profile tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:22 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:138 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:137 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:61 msgid "Display name" msgstr "Nama tampilan" @@ -12625,7 +12596,7 @@ msgstr "Apakah Anda ingin bergabung dengan {communityName}?" #. Label in the accessibility tab. #. Label in the my profile tab. #: src/features/user/components/modals/tabs/AccessibilityTab.tsx:54 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:146 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:145 msgid "Doc, I'm from the future. I came here in a time machine that you invented. Now, I need your help to get back to the year 1985." msgstr "Dok, saya dari masa depan. Saya datang ke sini dengan mesin waktu yang kamu ciptakan. Sekarang, saya butuh bantuanmu untuk kembali ke tahun 1985." @@ -13262,7 +13233,7 @@ msgid "Edit your messages above or below" msgstr "Edit pesan Anda di atas atau di bawah" #. Button or menu action label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:93 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:92 msgid "Edit your profile appearance and see a live preview" msgstr "Edit tampilan profilmu dan lihat pratinjau langsung" @@ -13330,7 +13301,7 @@ msgid "Email changed" msgstr "Email berhasil diubah" #. Setup wizard title for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:993 +#: src/features/app/components/setup/SetupWizardSteps.tsx:978 msgid "Email delivery" msgstr "Pengiriman email" @@ -13635,7 +13606,7 @@ msgid "Enable beta feature" msgstr "Aktifkan fitur beta" #. Label for enabling Bluesky OAuth in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1053 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1027 msgid "Enable Bluesky OAuth" msgstr "Aktifkan OAuth Bluesky" @@ -13668,7 +13639,7 @@ msgid "Enable developer mode" msgstr "Aktifkan mode pengembang" #. Label for enabling SMTP email delivery in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1021 +#: src/features/app/components/setup/SetupWizardSteps.tsx:995 msgid "Enable email delivery" msgstr "Aktifkan pengiriman email" @@ -14705,7 +14676,7 @@ msgid "Failed to ban member. Try again." msgstr "Gagal memblokir anggota. Coba lagi." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:59 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:58 msgid "Failed to clear trusted domains." msgstr "Gagal menghapus domain tepercaya." @@ -14762,7 +14733,7 @@ msgid "Failed to enable camera." msgstr "Gagal mengaktifkan kamera." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:42 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:41 msgid "Failed to forget authorized IPs. Try again." msgstr "Gagal melupakan IP yang diotorisasi. Coba lagi." @@ -14907,7 +14878,7 @@ msgid "Failed to resend verification code. Try again later." msgstr "Gagal mengirim ulang kode verifikasi. Coba lagi nanti." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:75 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:74 msgid "Failed to reset premium state." msgstr "Gagal mengatur ulang status premium." @@ -15581,7 +15552,7 @@ msgstr "Paksa kerangka pemuatan" msgid "Force mature media" msgstr "Paksa media dewasa" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:276 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:258 msgid "Force move to AFK channel" msgstr "Paksa pindah ke saluran AFK" @@ -15640,7 +15611,7 @@ msgid "Forced off" msgstr "Dipaksa nonaktif" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:46 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:45 msgid "Forget authorized IPs" msgstr "Lupakan IP yang diotorisasi" @@ -15650,7 +15621,7 @@ msgid "Forget subscriptions" msgstr "Lupakan langganan" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:104 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:103 msgid "Forgetting authorized IPs..." msgstr "Melupakan IP yang diotorisasi..." @@ -15907,12 +15878,12 @@ msgid "from <0>{0}" msgstr "dari <0>{0}" #. Label for SMTP from email input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1025 +#: src/features/app/components/setup/SetupWizardSteps.tsx:999 msgid "From email" msgstr "Email pengirim" #. Label for SMTP from name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1029 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1003 msgid "From name" msgstr "Nama pengirim" @@ -16204,7 +16175,7 @@ msgid "GIF preview" msgstr "Pratinjau GIF" #. Setup wizard title for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:969 +#: src/features/app/components/setup/SetupWizardSteps.tsx:962 msgid "GIF search" msgstr "Pencarian GIF" @@ -16853,21 +16824,12 @@ msgstr "Punya kode hadiah? Tukarkan untuk membuka {PREMIUM_PRODUCT_NAME}." msgid "Having fun?" msgstr "Lagi seru-seruan?" -#: src/features/auth/components/modals/CaptchaModal.tsx:175 -msgid "Having issues? Try hCaptcha instead" -msgstr "Ada masalah? Coba pakai hCaptcha saja" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:63 msgctxt "us-state" msgid "Hawaii" msgstr "Hawaii" -#. hCaptcha provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1013 -msgid "hCaptcha" -msgstr "hCaptcha" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:238 msgid "HD" @@ -19768,7 +19730,7 @@ msgid "Logo" msgstr "Logo" #. Label for Bluesky OAuth logo URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1065 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1039 msgid "Logo URL" msgstr "URL logo" @@ -22941,7 +22903,7 @@ msgid "No tokens match \"{searchQuery}\"." msgstr "Tidak ada token yang cocok dengan \"{searchQuery}\"." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:92 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:91 msgid "No trusted domains" msgstr "Tidak ada domain tepercaya" @@ -23696,10 +23658,6 @@ msgstr "Buka pemilih browser" msgid "Open call view" msgstr "Buka tampilan panggilan" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:288 -msgid "Open captcha modal" -msgstr "Buka modal captcha" - #. Accessible label for the channel header title button in a community channel. #: src/features/channel/components/channel_header/shared.ts:14 msgid "Open channel details for {channelName}" @@ -23712,7 +23670,7 @@ msgstr "Buka detail saluran untuk {channelName}" msgid "Open chat" msgstr "Buka obrolan" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:314 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:290 msgid "Open claim account modal" msgstr "Buka modal klaim akun" @@ -23944,11 +23902,11 @@ msgstr "Buka stiker di browser" msgid "Open streaming privacy settings" msgstr "Buka pengaturan privasi streaming" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:327 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:303 msgid "Open sudo verification modal" msgstr "Buka modal verifikasi sudo" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:342 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:318 msgid "Open system DM" msgstr "Buka DM sistem" @@ -24430,7 +24388,7 @@ msgstr "Passkey memerlukan bundel macOS yang ditandatangani dengan ID aplikasi y #. Generic form-field label for a password. #. Label for SMTP password input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1036 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1010 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:146 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:183 @@ -25212,7 +25170,7 @@ msgid "Popup" msgstr "Pop-up" #. Label for SMTP port input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1034 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1008 msgid "Port" msgstr "Port" @@ -25338,7 +25296,7 @@ msgid "Premium since date" msgstr "Premium sejak tanggal" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:71 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:70 msgid "Premium state reset on the backend." msgstr "Status premium di-reset di backend." @@ -25608,7 +25566,7 @@ msgid "Privacy settings" msgstr "Pengaturan privasi" #. Label for Bluesky OAuth privacy URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1073 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1047 msgid "Privacy URL" msgstr "URL privasi" @@ -25633,7 +25591,7 @@ msgid "Private details" msgstr "Detail pribadi" #. Label for Bluesky OAuth private key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1081 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1055 msgid "Private key" msgstr "Kunci pribadi" @@ -25699,18 +25657,18 @@ msgstr "Warna profil" #. Settings section label for editing profile appearance and identity. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:105 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:104 #: src/features/user/components/settings_utils/section_registry/GeneralSettingsSections.ts:6 msgid "Profile customization" msgstr "Kustomisasi profil" #. Label in the my profile tab. Preserve {selectedGuildName}; it is inserted by code. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:101 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:100 msgid "Profile customization for {selectedGuildName}" msgstr "Kustomisasi profil untuk {selectedGuildName}" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:97 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:96 msgid "Profile customization form" msgstr "Formulir kustomisasi profil" @@ -25775,7 +25733,7 @@ msgid "Profile type" msgstr "Jenis profil" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:77 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:76 msgid "Profile updated" msgstr "Profil diperbarui" @@ -25812,7 +25770,7 @@ msgstr "Tanya saat ada perangkat audio baru" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:142 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:141 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:177 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:160 msgid "Pronouns" @@ -25842,11 +25800,6 @@ msgstr "Berikan ID pengguna atau nama pengguna orang yang kamu laporkan." msgid "Provide your full legal name for the declaration." msgstr "Berikan nama lengkap sesuai identitas resmimu untuk deklarasi ini." -#. Label for an integration provider choice. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 -msgid "Provider" -msgstr "Penyedia" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27626,7 +27579,7 @@ msgid "Reset password" msgstr "Setel ulang kata sandi" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:79 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:78 msgid "Reset premium state" msgstr "Setel ulang status premium" @@ -27635,7 +27588,7 @@ msgstr "Setel ulang status premium" msgid "Reset slider to default value" msgstr "Setel ulang penggeser ke nilai default" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:247 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:229 msgid "Reset socket" msgstr "Setel ulang soket" @@ -27684,7 +27637,7 @@ msgid "Reset zoom" msgstr "Setel ulang zoom" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:112 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:111 msgid "Resetting premium state..." msgstr "Menyetel ulang status premium..." @@ -28315,7 +28268,7 @@ msgid "Run the instance as one community instead of many. This can only be enabl msgstr "Jalankan instance sebagai satu komunitas, bukan banyak. Ini hanya dapat diaktifkan sekarang, selama penyiapan." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:100 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:99 msgid "Runtime utilities" msgstr "Utilitas runtime" @@ -29103,11 +29056,6 @@ msgstr "Tombol sekunder diklik." msgid "Secret" msgstr "Rahasia" -#. Label for a CAPTCHA secret key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1020 -msgid "Secret key" -msgstr "Kunci rahasia" - #. Settings search entry label. Names the settings search entry in the settings UI. #. Short label in the secrets section. Keep it concise. Keep the tone plain and specific. #: src/features/user/components/modals/tabs/applications_tab/application_detail/SecretsSection.tsx:11 @@ -29925,7 +29873,7 @@ msgid "Set up authenticator app" msgstr "Siapkan aplikasi autentikator" #. Option for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:953 +#: src/features/app/components/setup/SetupWizardSteps.tsx:946 msgid "Set up later" msgstr "Siapkan nanti" @@ -30427,7 +30375,7 @@ msgstr "Tampilkan daftar DM sebaris" msgid "Show just the typing indicator without avatars" msgstr "Tampilkan hanya indikator mengetik tanpa avatar" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:308 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:284 msgid "Show keyboard mode intro" msgstr "Tampilkan intro mode keyboard" @@ -30538,7 +30486,7 @@ msgstr "Tampilkan Neko" msgid "Show new device alerts" msgstr "Tampilkan peringatan perangkat baru" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:282 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:264 msgid "Show new device modal" msgstr "Tampilkan modal perangkat baru" @@ -30820,7 +30768,7 @@ msgid "Signed-in devices" msgstr "Perangkat yang sudah masuk" #. Label for Bluesky OAuth signing key ID input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1077 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1051 msgid "Signing key ID" msgstr "ID kunci penandatanganan" @@ -30910,11 +30858,6 @@ msgstr "Satu baris" msgid "Single user (all statuses)" msgstr "Satu pengguna (semua status)" -#. Label for a CAPTCHA site key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 -msgid "Site key" -msgstr "Kunci situs" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:98 @@ -30964,7 +30907,7 @@ msgid "Skip the system leave notice — nobody gets pinged." msgstr "Lewati pesan sistem saat keluar, tidak ada yang akan diberi tahu." #. Description for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:957 +#: src/features/app/components/setup/SetupWizardSteps.tsx:950 msgid "Skip this now and configure it from the admin panel." msgstr "Lewati ini sekarang dan konfigurasikan dari panel admin." @@ -31212,17 +31155,17 @@ msgid "SMS verification is unavailable right now. Try again later or contact sup msgstr "Verifikasi SMS tidak tersedia saat ini. Coba lagi nanti atau hubungi dukungan." #. Success message after validating SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1045 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 msgid "SMTP connection verified." msgstr "Koneksi SMTP terverifikasi." #. Label for SMTP host input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1033 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1007 msgid "SMTP host" msgstr "Host SMTP" #. Failure message after validating SMTP credentials when the server returns no error detail. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1049 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1023 msgid "SMTP validation failed." msgstr "Validasi SMTP gagal." @@ -31402,7 +31345,7 @@ msgstr "Terjadi kesalahan. Coba lagi nanti." #. Inline error in the web deep-link prompt when opening the desktop app fails. #. Toast error shown when the mature content check request fails unexpectedly. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:18 -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:580 +#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 #: src/features/auth/flow/DesktopDeepLinkPrompt.tsx:31 msgid "Something went wrong. Try again." msgstr "Terjadi kesalahan. Coba lagi." @@ -32099,6 +32042,11 @@ msgstr "Masih mengindeks, coba lagi sebentar lagi" msgid "Still Neko" msgstr "Neko diam" +#. Small toast shown only when an automatic background check before sign-in, sign-up or a similar request takes more than a couple of seconds. No user action needed. Keep it short and calm. +#: src/features/auth/altcha/CaptchaInterceptor.ts:13 +msgid "Still working on it…" +msgstr "Masih dikerjakan…" + #. Stop-recording button label in the desktop voice message composer. #: src/features/voice/components/VoiceMessageComposerModal.tsx:65 msgid "Stop" @@ -33013,7 +32961,7 @@ msgid "Terms of service" msgstr "Ketentuan layanan" #. Label for Bluesky OAuth terms URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1069 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1043 msgid "Terms URL" msgstr "URL ketentuan" @@ -33023,7 +32971,7 @@ msgid "Terrorism or violent extremism" msgstr "Terorisme atau ekstremisme kekerasan" #. Button that validates SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1041 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1015 msgid "Test SMTP" msgstr "Uji SMTP" @@ -33800,7 +33748,7 @@ msgid "This clears quick CSS, imported themes, uploaded assets, and local file r msgstr "Ini akan menghapus CSS cepat, tema yang diimpor, aset yang diunggah, dan referensi file lokal di perangkat ini." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:83 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:82 msgid "This clears your backend premium state entirely, including premium type, billing metadata, and override flags." msgstr "Ini akan menghapus seluruh status premium backend kamu, termasuk jenis premium, metadata penagihan, dan tanda penggantian." @@ -34200,7 +34148,7 @@ msgid "This message no longer exists." msgstr "Pesan ini sudah tidak ada." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:130 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:129 msgid "This nickname will only be visible in this community" msgstr "Nama panggilan ini hanya akan terlihat di komunitas ini" @@ -34277,12 +34225,12 @@ msgid "This removes all custom CSS overrides. Theme files in your library are no msgstr "Ini akan menghapus semua penggantian CSS kustom. File tema di pustakamu tidak akan terpengaruh." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:50 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:49 msgid "This removes all previously authorized IP addresses on your account. The next login from any IP will require email verification." msgstr "Ini akan menghapus semua alamat IP yang sebelumnya diotorisasi di akunmu. Login berikutnya dari IP mana pun akan memerlukan verifikasi email." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:67 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:66 msgid "This removes all trusted domains. You will see the external link warning for all domains again." msgstr "Ini akan menghapus semua domain tepercaya. Kamu akan melihat peringatan tautan eksternal untuk semua domain lagi." @@ -34949,7 +34897,7 @@ msgstr "Perubahan ikon baki hanya berlaku setelah memulai ulang di Linux karena msgid "Trending GIFs" msgstr "GIF populer" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:383 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:359 msgid "Trigger React crash" msgstr "Picu crash React" @@ -35008,7 +34956,7 @@ msgid "Trusted domains" msgstr "Domain tepercaya" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:55 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:54 msgid "Trusted domains cleared." msgstr "Domain tepercaya sudah dihapus." @@ -35054,7 +35002,6 @@ msgid "Try a different variable name or clear the search." msgstr "Coba nama variabel lain atau hapus pencarian." #. Generic action label for retrying a failed or interrupted operation. -#: src/features/auth/components/AltchaVerification.tsx:53 #: src/features/auth/flow/AuthRouteLoadError.tsx:22 #: src/features/i18n/utils/CommonMessageDescriptors.ts:75 msgid "Try again" @@ -35132,10 +35079,6 @@ msgstr "Coba kunci keamanan/passkey saja" msgid "Try sending your message again." msgstr "Coba kirim pesanmu lagi." -#: src/features/auth/components/modals/CaptchaModal.tsx:177 -msgid "Try Turnstile instead" -msgstr "Coba Turnstile saja" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:135 msgid "TTS" @@ -36890,7 +36833,7 @@ msgid "Use this when troubleshooting the client or collecting logs. It may add v msgstr "Gunakan ini saat memecahkan masalah klien atau mengumpulkan log. Ini mungkin menambahkan pesan rinci ke konsol browser untuk klien saat ini." #. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1037 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1011 msgid "Use TLS" msgstr "Gunakan TLS" @@ -37056,7 +36999,7 @@ msgstr "Volume pengguna" #. Generic form-field label for a username. #. Label for SMTP username input. #. Settings search entry label. Also used as a search synonym in the settings search bar. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 #: src/features/i18n/utils/CommonMessageDescriptors.ts:572 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:218 #: src/features/user/components/modals/tabs/my_profile_tab/MyProfileTabUsernameSection.tsx:56 @@ -37337,11 +37280,6 @@ msgstr "Verifikasi nomor telepon" msgid "Verify phone number form" msgstr "Formulir verifikasi nomor telepon" -#. Short label in the authentication captcha modal. Keep the tone plain and specific. -#: src/features/auth/components/modals/CaptchaModal.tsx:17 -msgid "Verify you're human" -msgstr "Verifikasi bahwa kamu manusia" - #. Title of the error modal shown when an unverified account tries to start a DM. #. Title shown when an unverified account cannot start a DM or group DM. #: src/features/app/components/alerts/DmActionErrorModal.tsx:40 @@ -37369,22 +37307,22 @@ msgid "Verify your email before adding an authenticator app." msgstr "Verifikasi emailmu sebelum menambahkan aplikasi autentikator." #. Description text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:117 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:116 msgid "Verify your email before changing your community nickname, avatar, banner, bio, pronouns, or accent color." msgstr "Verifikasi emailmu sebelum mengubah nama panggilan komunitas, avatar, banner, bio, kata ganti, atau warna aksenmu." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:121 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:120 msgid "Verify your email before changing your username, display name, avatar, banner, bio, pronouns, time zone, or {premiumProductName} badge privacy." msgstr "Verifikasi emailmu sebelum mengubah nama pengguna, nama tampilan, avatar, banner, bio, kata ganti, zona waktu, atau privasi lencana {premiumProductName} milikmu." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:85 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:84 msgid "Verify your email before editing this community profile. You can still preview it here." msgstr "Verifikasi emailmu sebelum mengedit profil komunitas ini. Kamu masih bisa melihat pratinjaunya di sini." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:89 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:88 msgid "Verify your email before editing your profile. You can still preview it here." msgstr "Verifikasi emailmu sebelum mengedit profil. Kamu masih bisa melihat pratinjaunya di sini." @@ -37416,12 +37354,12 @@ msgid "Verify your email to continue using {productName}." msgstr "Verifikasi emailmu untuk terus menggunakan {productName}." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:109 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:108 msgid "Verify your email to edit this community profile" msgstr "Verifikasi emailmu untuk mengedit profil komunitas ini" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:113 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:112 msgid "Verify your email to edit your profile" msgstr "Verifikasi emailmu untuk mengedit profil" @@ -38398,10 +38336,6 @@ msgstr "Kami menurunkan harga {premiumProductName} di Brasil. Harganya kini {mon msgid "We need one verification step before you continue. This helps protect accounts and keep spam off {productName}." msgstr "Kami memerlukan satu langkah verifikasi sebelum kamu melanjutkan. Ini membantu melindungi akun dan menjaga {productName} bebas dari spam." -#: src/features/auth/components/modals/CaptchaModal.tsx:128 -msgid "We need to make sure you're not a bot. Complete the verification below." -msgstr "Kami perlu memastikan kamu bukan bot. Selesaikan verifikasi di bawah." - #. Required-action modal intro text when both email and phone verification are required. #: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:216 msgid "We need two verification steps before you continue. We will show one step at a time." @@ -39256,7 +39190,7 @@ msgid "You can't befriend yourself" msgstr "Kamu tidak bisa berteman dengan diri sendiri" #. Label in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:134 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:133 msgid "You can't change your nickname here" msgstr "Kamu tidak dapat mengubah nama panggilan di sini" @@ -39506,7 +39440,7 @@ msgid "You have unsaved changes." msgstr "Ada perubahan yang belum disimpan." #. Warning text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:81 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:80 msgid "You have unsaved changes. Save or reset before leaving." msgstr "Ada perubahan yang belum disimpan. Simpan atau setel ulang sebelum keluar." @@ -40031,10 +39965,6 @@ msgstr "Tindakanmu tidak dapat diselesaikan karena ditandai oleh sistem keamanan msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Pengajuanmu sedang ditinjau. Kamu masih bisa memperbarui detail pendaftaranmu atau menarik pengajuannya." -#: src/features/auth/components/AltchaVerification.tsx:50 -msgid "Your browser couldn't finish the check." -msgstr "Peramban Anda tidak dapat menyelesaikan pemeriksaan." - #. Body of the browser-audio-required modal explaining why the user must click before audio can play. #: src/features/voice/components/modals/AudioPlaybackPermissionModal.tsx:12 msgid "Your browser requires user interaction before audio can be played. Click the button below to enable voice chat." @@ -40386,7 +40316,7 @@ msgid "YouTube enrichment" msgstr "Pengayaan YouTube" #. Setup wizard title for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:977 +#: src/features/app/components/setup/SetupWizardSteps.tsx:970 msgid "YouTube previews" msgstr "Pratinjau YouTube" diff --git a/fluxer_app/src/features/i18n/locales/it/messages.po b/fluxer_app/src/features/i18n/locales/it/messages.po index c631c3489..80e655989 100644 --- a/fluxer_app/src/features/i18n/locales/it/messages.po +++ b/fluxer_app/src/features/i18n/locales/it/messages.po @@ -2395,11 +2395,6 @@ msgstr "60 secondi" msgid "7 days" msgstr "7 giorni" -#. Required-action error when the API requires a captcha for phone verification. -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 -msgid "A browser check is required before phone verification. Try again from the sign-in page or contact support." -msgstr "È richiesto un controllo del browser prima della verifica telefonica. Riprova dalla pagina di accesso o contatta il supporto." - #. Hint shown beside in:. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:77 msgid "a channel" @@ -2928,7 +2923,7 @@ msgid "Add a friend to get started." msgstr "Aggiungi un amico per iniziare." #. Setup wizard body for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:973 +#: src/features/app/components/setup/SetupWizardSteps.tsx:966 msgid "Add a Klipy API key to enable GIF search at runtime." msgstr "Aggiungi una chiave API Klipy per abilitare la ricerca di GIF durante l’esecuzione." @@ -2965,7 +2960,7 @@ msgid "Add a working email" msgstr "Aggiungi un'email funzionante" #. Setup wizard body for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:981 +#: src/features/app/components/setup/SetupWizardSteps.tsx:974 msgid "Add a YouTube Data API key to enrich YouTube links." msgstr "Aggiungi una chiave API di YouTube Data per arricchire i link di YouTube." @@ -3011,7 +3006,7 @@ msgid "Add another reaction" msgstr "Aggiungi un'altra reazione" #. Setup wizard body for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1005 +#: src/features/app/components/setup/SetupWizardSteps.tsx:990 msgid "Add Bluesky OAuth client metadata and a signing key." msgstr "Aggiungi i metadati del client OAuth di Bluesky e una chiave di firma." @@ -3161,7 +3156,7 @@ msgid "Add shortcut" msgstr "Aggiungi scorciatoia" #. Setup wizard body for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:997 +#: src/features/app/components/setup/SetupWizardSteps.tsx:982 msgid "Add SMTP credentials so the instance can send verification and notification email." msgstr "Aggiungi le credenziali SMTP in modo che l'istanza possa inviare email di verifica e notifica." @@ -3188,7 +3183,7 @@ msgid "Add stream" msgstr "Aggiungi stream" #. Description for configuring an optional setup wizard integration now. -#: src/features/app/components/setup/SetupWizardSteps.tsx:965 +#: src/features/app/components/setup/SetupWizardSteps.tsx:958 msgid "Add the credentials during setup." msgstr "Aggiungi le credenziali durante la configurazione." @@ -3954,7 +3949,7 @@ msgid "An invalid status was provided. You can now close this tab and return to msgstr "È stato fornito uno stato non valido. Ora puoi chiudere questa scheda e tornare all'app." #. Short label in the authentication auth form. Keep the tone plain and specific. -#: src/features/auth/hooks/useAuthForm.ts:13 +#: src/features/auth/hooks/useAuthForm.ts:12 msgid "An unexpected error occurred" msgstr "Si è verificato un errore imprevisto" @@ -4262,7 +4257,7 @@ msgid "Anyone can request an account, but an administrator must approve it." msgstr "Chiunque può richiedere un account, ma un amministratore deve approvarlo." #. Label for an integration API key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1018 +#: src/features/app/components/setup/SetupWizardSteps.tsx:994 msgid "API key" msgstr "Chiave API" @@ -4958,7 +4953,7 @@ msgid "Authorized apps" msgstr "App autorizzate" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:38 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:37 msgid "Authorized IPs cleared. New logins will require email verification." msgstr "IP autorizzati cancellati. I nuovi accessi richiederanno la verifica via email." @@ -5730,7 +5725,7 @@ msgid "Bluesky connections" msgstr "Connessioni Bluesky" #. Setup wizard title for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1001 +#: src/features/app/components/setup/SetupWizardSteps.tsx:986 msgid "Bluesky OAuth" msgstr "OAuth di Bluesky" @@ -5897,11 +5892,6 @@ msgstr "I permessi del bot non possono essere negativi." msgid "Bot profile" msgstr "Profilo bot" -#. Setup wizard title for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:985 -msgid "Bot protection" -msgstr "Protezione bot" - #. Short label in the authentication OAUTH scopes step. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/OAuthScopesStep.tsx:20 msgid "Bot scope requested" @@ -6554,11 +6544,6 @@ msgstr "Non modificabile" msgid "Cannot delete account" msgstr "Impossibile eliminare l'account" -#. Toast error shown when captcha verification fails inside the auth captcha interceptor. -#: src/features/auth/components/CaptchaInterceptor.tsx:15 -msgid "Captcha verification failed. Try again." -msgstr "Verifica Captcha non riuscita. Riprova." - #. Section header in the Linux audio source picker. Lists capture-target options (entire system / specific apps). #: src/features/voice/components/AudioSourcePickerLinux.tsx:50 msgid "Capture" @@ -7398,10 +7383,6 @@ msgstr "Controllo accesso..." msgid "Checking screen recording permission..." msgstr "Controllo dell'autorizzazione per la registrazione dello schermo..." -#: src/features/auth/components/AltchaVerification.tsx:62 -msgid "Checking your browser. This takes a few seconds." -msgstr "Verifica del browser. Richiede alcuni secondi." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -7571,11 +7552,6 @@ msgstr "Scegli File, quindi Aggiungi al Dock." msgid "Choose friends to message." msgstr "Scegli gli amici a cui inviare un messaggio." -#. Setup wizard body for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:989 -msgid "Choose hCaptcha or Cloudflare Turnstile for signup challenges." -msgstr "Scegli hCaptcha o Cloudflare Turnstile per i controlli durante la registrazione." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:455 msgid "Choose how chat moves after you send a message" @@ -7982,17 +7958,17 @@ msgid "Clear selection" msgstr "Deseleziona" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:88 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:87 msgid "Clear trust all setting" msgstr "Cancella impostazione \"Fidati di tutti\"" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:63 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:62 msgid "Clear trusted domains" msgstr "Cancella domini attendibili" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:96 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:95 msgid "Clear trusted domains ({trustedDomainsCount})" msgstr "Cancella domini attendibili ({trustedDomainsCount})" @@ -8002,7 +7978,7 @@ msgid "Clearer text" msgstr "Testo più chiaro" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:108 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:107 msgid "Clearing trusted domains..." msgstr "Cancellazione domini attendibili..." @@ -8100,7 +8076,7 @@ msgid "Client" msgstr "Client" #. Label for Bluesky OAuth client name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1057 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1031 msgid "Client name" msgstr "Nome client" @@ -8117,7 +8093,7 @@ msgid "Client secret regenerated. Update any code that uses the old secret." msgstr "Segreto del client rigenerato. Aggiorna qualsiasi codice che utilizza il vecchio segreto." #. Label for Bluesky OAuth client URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1061 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 msgid "Client URL" msgstr "URL client" @@ -8269,11 +8245,6 @@ msgstr "DM chiusi" msgid "Cloud upload" msgstr "Caricamento su cloud" -#. Cloudflare Turnstile provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1014 -msgid "Cloudflare Turnstile" -msgstr "Cloudflare Turnstile" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:58 msgid "Coal" @@ -8669,7 +8640,7 @@ msgstr "Nome della community" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:126 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:125 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:113 msgid "Community nickname" msgstr "Soprannome nella community" @@ -8722,7 +8693,7 @@ msgid "Community profile" msgstr "Profilo della community" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:73 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:72 msgid "Community profile updated" msgstr "Profilo della community aggiornato" @@ -8880,7 +8851,7 @@ msgid "Configure keyboard shortcuts" msgstr "Configura le scorciatoie da tastiera" #. Option for configuring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:961 +#: src/features/app/components/setup/SetupWizardSteps.tsx:954 msgid "Configure now" msgstr "Configura ora" @@ -12341,7 +12312,7 @@ msgstr "Disconnetti da {channel}" msgid "Disconnect from voice" msgstr "Disconnetti dalla chat vocale" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:261 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:243 msgid "Disconnect socket" msgstr "Disconnetti socket" @@ -12479,7 +12450,7 @@ msgstr "Modalità di visualizzazione" #. Short label in the inputs tab. Keep it concise. #. Short label in the my profile tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:22 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:138 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:137 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:61 msgid "Display name" msgstr "Nome visualizzato" @@ -12625,7 +12596,7 @@ msgstr "Vuoi unirti a {communityName}?" #. Label in the accessibility tab. #. Label in the my profile tab. #: src/features/user/components/modals/tabs/AccessibilityTab.tsx:54 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:146 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:145 msgid "Doc, I'm from the future. I came here in a time machine that you invented. Now, I need your help to get back to the year 1985." msgstr "Doc, vengo dal futuro. Sono qui grazie a una macchina del tempo che hai inventato tu. Ora ho bisogno del tuo aiuto per tornare nel 1985." @@ -13262,7 +13233,7 @@ msgid "Edit your messages above or below" msgstr "Modifica i tuoi messaggi sopra o sotto" #. Button or menu action label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:93 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:92 msgid "Edit your profile appearance and see a live preview" msgstr "Modifica l'aspetto del tuo profilo e guarda l'anteprima dal vivo" @@ -13330,7 +13301,7 @@ msgid "Email changed" msgstr "Email modificata" #. Setup wizard title for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:993 +#: src/features/app/components/setup/SetupWizardSteps.tsx:978 msgid "Email delivery" msgstr "Consegna email" @@ -13635,7 +13606,7 @@ msgid "Enable beta feature" msgstr "Abilita funzione beta" #. Label for enabling Bluesky OAuth in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1053 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1027 msgid "Enable Bluesky OAuth" msgstr "Abilita OAuth Bluesky" @@ -13668,7 +13639,7 @@ msgid "Enable developer mode" msgstr "Abilita la modalità sviluppatore" #. Label for enabling SMTP email delivery in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1021 +#: src/features/app/components/setup/SetupWizardSteps.tsx:995 msgid "Enable email delivery" msgstr "Abilita consegna email" @@ -14705,7 +14676,7 @@ msgid "Failed to ban member. Try again." msgstr "Impossibile bannare il membro. Riprova." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:59 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:58 msgid "Failed to clear trusted domains." msgstr "Impossibile cancellare i domini attendibili." @@ -14762,7 +14733,7 @@ msgid "Failed to enable camera." msgstr "Impossibile attivare la fotocamera." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:42 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:41 msgid "Failed to forget authorized IPs. Try again." msgstr "Impossibile cancellare gli IP autorizzati. Riprova." @@ -14907,7 +14878,7 @@ msgid "Failed to resend verification code. Try again later." msgstr "Nuovo invio del codice di verifica non riuscito. Riprova più tardi." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:75 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:74 msgid "Failed to reset premium state." msgstr "Impossibile reimpostare lo stato Premium." @@ -15581,7 +15552,7 @@ msgstr "Forza il segnaposto di caricamento" msgid "Force mature media" msgstr "Forza la classificazione dei media come contenuti per adulti" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:276 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:258 msgid "Force move to AFK channel" msgstr "Forza spostamento al canale AFK" @@ -15640,7 +15611,7 @@ msgid "Forced off" msgstr "Disattivato forzatamente" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:46 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:45 msgid "Forget authorized IPs" msgstr "Cancella IP autorizzati" @@ -15650,7 +15621,7 @@ msgid "Forget subscriptions" msgstr "Cancella le sottoscrizioni push" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:104 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:103 msgid "Forgetting authorized IPs..." msgstr "Cancellazione degli IP autorizzati in corso..." @@ -15907,12 +15878,12 @@ msgid "from <0>{0}" msgstr "da <0>{0}" #. Label for SMTP from email input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1025 +#: src/features/app/components/setup/SetupWizardSteps.tsx:999 msgid "From email" msgstr "Email mittente" #. Label for SMTP from name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1029 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1003 msgid "From name" msgstr "Nome mittente" @@ -16204,7 +16175,7 @@ msgid "GIF preview" msgstr "Anteprima GIF" #. Setup wizard title for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:969 +#: src/features/app/components/setup/SetupWizardSteps.tsx:962 msgid "GIF search" msgstr "Ricerca GIF" @@ -16853,21 +16824,12 @@ msgstr "Hai un codice regalo? Riscatta per sbloccare {PREMIUM_PRODUCT_NAME}." msgid "Having fun?" msgstr "Ti stai divertendo?" -#: src/features/auth/components/modals/CaptchaModal.tsx:175 -msgid "Having issues? Try hCaptcha instead" -msgstr "Problemi? Prova hCaptcha" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:63 msgctxt "us-state" msgid "Hawaii" msgstr "Hawaii" -#. hCaptcha provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1013 -msgid "hCaptcha" -msgstr "hCaptcha" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:238 msgid "HD" @@ -19768,7 +19730,7 @@ msgid "Logo" msgstr "Logo" #. Label for Bluesky OAuth logo URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1065 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1039 msgid "Logo URL" msgstr "URL del logo" @@ -22941,7 +22903,7 @@ msgid "No tokens match \"{searchQuery}\"." msgstr "Nessun token corrisponde a \"{searchQuery}\"." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:92 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:91 msgid "No trusted domains" msgstr "Nessun dominio attendibile" @@ -23696,10 +23658,6 @@ msgstr "Apri selettore browser" msgid "Open call view" msgstr "Apri la visualizzazione chiamata" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:288 -msgid "Open captcha modal" -msgstr "Apri la finestra del captcha" - #. Accessible label for the channel header title button in a community channel. #: src/features/channel/components/channel_header/shared.ts:14 msgid "Open channel details for {channelName}" @@ -23712,7 +23670,7 @@ msgstr "Apri i dettagli del canale {channelName}" msgid "Open chat" msgstr "Apri chat" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:314 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:290 msgid "Open claim account modal" msgstr "Apri la finestra per completare la registrazione dell’account" @@ -23944,11 +23902,11 @@ msgstr "Apri sticker nel browser" msgid "Open streaming privacy settings" msgstr "Apri le impostazioni privacy dello streaming" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:327 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:303 msgid "Open sudo verification modal" msgstr "Apri la finestra di verifica sudo" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:342 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:318 msgid "Open system DM" msgstr "Apri DM di sistema" @@ -24430,7 +24388,7 @@ msgstr "Le passkey richiedono un bundle macOS firmato con un identificatore di a #. Generic form-field label for a password. #. Label for SMTP password input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1036 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1010 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:146 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:183 @@ -25212,7 +25170,7 @@ msgid "Popup" msgstr "Pop-up" #. Label for SMTP port input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1034 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1008 msgid "Port" msgstr "Porta" @@ -25338,7 +25296,7 @@ msgid "Premium since date" msgstr "Premium dal" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:71 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:70 msgid "Premium state reset on the backend." msgstr "Stato Premium reimpostato sul backend." @@ -25608,7 +25566,7 @@ msgid "Privacy settings" msgstr "Impostazioni privacy" #. Label for Bluesky OAuth privacy URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1073 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1047 msgid "Privacy URL" msgstr "URL privacy" @@ -25633,7 +25591,7 @@ msgid "Private details" msgstr "Dettagli privati" #. Label for Bluesky OAuth private key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1081 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1055 msgid "Private key" msgstr "Chiave privata" @@ -25699,18 +25657,18 @@ msgstr "Colore profilo" #. Settings section label for editing profile appearance and identity. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:105 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:104 #: src/features/user/components/settings_utils/section_registry/GeneralSettingsSections.ts:6 msgid "Profile customization" msgstr "Personalizzazione profilo" #. Label in the my profile tab. Preserve {selectedGuildName}; it is inserted by code. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:101 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:100 msgid "Profile customization for {selectedGuildName}" msgstr "Personalizzazione del profilo per {selectedGuildName}" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:97 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:96 msgid "Profile customization form" msgstr "Modulo di personalizzazione del profilo" @@ -25775,7 +25733,7 @@ msgid "Profile type" msgstr "Tipo di profilo" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:77 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:76 msgid "Profile updated" msgstr "Profilo aggiornato" @@ -25812,7 +25770,7 @@ msgstr "Chiedi conferma per i nuovi dispositivi audio" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:142 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:141 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:177 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:160 msgid "Pronouns" @@ -25842,11 +25800,6 @@ msgstr "Inserisci l'ID utente o il nome utente della persona che stai segnalando msgid "Provide your full legal name for the declaration." msgstr "Inserisci il tuo nome e cognome legali per la dichiarazione." -#. Label for an integration provider choice. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 -msgid "Provider" -msgstr "Provider" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27626,7 +27579,7 @@ msgid "Reset password" msgstr "Reimposta password" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:79 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:78 msgid "Reset premium state" msgstr "Reimposta stato premium" @@ -27635,7 +27588,7 @@ msgstr "Reimposta stato premium" msgid "Reset slider to default value" msgstr "Reimposta il cursore al valore predefinito" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:247 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:229 msgid "Reset socket" msgstr "Reimposta socket" @@ -27684,7 +27637,7 @@ msgid "Reset zoom" msgstr "Reimposta zoom" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:112 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:111 msgid "Resetting premium state..." msgstr "Reimpostazione dello stato premium..." @@ -28315,7 +28268,7 @@ msgid "Run the instance as one community instead of many. This can only be enabl msgstr "Esegui l'istanza come un'unica community invece che come molte. Questa opzione può essere abilitata solo ora, durante la configurazione." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:100 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:99 msgid "Runtime utilities" msgstr "Utility di runtime" @@ -29103,11 +29056,6 @@ msgstr "Pulsante secondario cliccato." msgid "Secret" msgstr "Segreto" -#. Label for a CAPTCHA secret key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1020 -msgid "Secret key" -msgstr "Chiave segreta" - #. Settings search entry label. Names the settings search entry in the settings UI. #. Short label in the secrets section. Keep it concise. Keep the tone plain and specific. #: src/features/user/components/modals/tabs/applications_tab/application_detail/SecretsSection.tsx:11 @@ -29925,7 +29873,7 @@ msgid "Set up authenticator app" msgstr "Configura app di autenticazione" #. Option for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:953 +#: src/features/app/components/setup/SetupWizardSteps.tsx:946 msgid "Set up later" msgstr "Configura più tardi" @@ -30427,7 +30375,7 @@ msgstr "Mostra elenco DM in linea" msgid "Show just the typing indicator without avatars" msgstr "Mostra solo l'indicatore di digitazione, senza avatar" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:308 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:284 msgid "Show keyboard mode intro" msgstr "Mostra introduzione modalità tastiera" @@ -30538,7 +30486,7 @@ msgstr "Mostra Neko" msgid "Show new device alerts" msgstr "Mostra avvisi nuovo dispositivo" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:282 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:264 msgid "Show new device modal" msgstr "Mostra il modale nuovo dispositivo" @@ -30820,7 +30768,7 @@ msgid "Signed-in devices" msgstr "Dispositivi connessi" #. Label for Bluesky OAuth signing key ID input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1077 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1051 msgid "Signing key ID" msgstr "ID chiave di firma" @@ -30910,11 +30858,6 @@ msgstr "Riga singola" msgid "Single user (all statuses)" msgstr "Utente singolo (tutti gli stati)" -#. Label for a CAPTCHA site key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 -msgid "Site key" -msgstr "Chiave del sito" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:98 @@ -30964,7 +30907,7 @@ msgid "Skip the system leave notice — nobody gets pinged." msgstr "Ometti il messaggio di sistema sull’uscita: nessuno riceverà un avviso." #. Description for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:957 +#: src/features/app/components/setup/SetupWizardSteps.tsx:950 msgid "Skip this now and configure it from the admin panel." msgstr "Salta ora e configuralo dal pannello di amministrazione." @@ -31212,17 +31155,17 @@ msgid "SMS verification is unavailable right now. Try again later or contact sup msgstr "La verifica SMS non è disponibile al momento. Riprova più tardi o contatta l'assistenza." #. Success message after validating SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1045 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 msgid "SMTP connection verified." msgstr "Connessione SMTP verificata." #. Label for SMTP host input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1033 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1007 msgid "SMTP host" msgstr "Host SMTP" #. Failure message after validating SMTP credentials when the server returns no error detail. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1049 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1023 msgid "SMTP validation failed." msgstr "Convalida SMTP non riuscita." @@ -31402,7 +31345,7 @@ msgstr "Si è verificato un errore. Riprova più tardi." #. Inline error in the web deep-link prompt when opening the desktop app fails. #. Toast error shown when the mature content check request fails unexpectedly. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:18 -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:580 +#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 #: src/features/auth/flow/DesktopDeepLinkPrompt.tsx:31 msgid "Something went wrong. Try again." msgstr "Si è verificato un errore. Riprova." @@ -32099,6 +32042,11 @@ msgstr "Indicizzazione in corso. Riprova tra un momento" msgid "Still Neko" msgstr "Neko immobile" +#. Small toast shown only when an automatic background check before sign-in, sign-up or a similar request takes more than a couple of seconds. No user action needed. Keep it short and calm. +#: src/features/auth/altcha/CaptchaInterceptor.ts:13 +msgid "Still working on it…" +msgstr "Ancora in lavorazione…" + #. Stop-recording button label in the desktop voice message composer. #: src/features/voice/components/VoiceMessageComposerModal.tsx:65 msgid "Stop" @@ -33013,7 +32961,7 @@ msgid "Terms of service" msgstr "Termini di servizio" #. Label for Bluesky OAuth terms URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1069 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1043 msgid "Terms URL" msgstr "URL termini" @@ -33023,7 +32971,7 @@ msgid "Terrorism or violent extremism" msgstr "Terrorismo o estremismo violento" #. Button that validates SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1041 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1015 msgid "Test SMTP" msgstr "Test SMTP" @@ -33800,7 +33748,7 @@ msgid "This clears quick CSS, imported themes, uploaded assets, and local file r msgstr "Questa operazione cancella CSS rapidi, temi importati, risorse caricate e riferimenti a file locali su questo dispositivo." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:83 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:82 msgid "This clears your backend premium state entirely, including premium type, billing metadata, and override flags." msgstr "Questo azzera completamente il tuo stato premium nel backend, inclusi tipo di premium, metadati di fatturazione e flag di override." @@ -34200,7 +34148,7 @@ msgid "This message no longer exists." msgstr "Questo messaggio non esiste più." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:130 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:129 msgid "This nickname will only be visible in this community" msgstr "Questo soprannome sarà visibile solo in questa community" @@ -34277,12 +34225,12 @@ msgid "This removes all custom CSS overrides. Theme files in your library are no msgstr "Verranno rimosse tutte le personalizzazioni CSS. I file del tema nella tua libreria non saranno interessati." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:50 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:49 msgid "This removes all previously authorized IP addresses on your account. The next login from any IP will require email verification." msgstr "Questa operazione rimuove tutti gli indirizzi IP precedentemente autorizzati sul tuo account. Il prossimo accesso da qualsiasi IP richiederà la verifica via email." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:67 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:66 msgid "This removes all trusted domains. You will see the external link warning for all domains again." msgstr "Questo rimuove tutti i domini attendibili. Visualizzerai di nuovo l'avviso per i link esterni per tutti i domini." @@ -34949,7 +34897,7 @@ msgstr "Su Linux, le modifiche all’icona dell’area di notifica vengono appli msgid "Trending GIFs" msgstr "GIF di tendenza" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:383 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:359 msgid "Trigger React crash" msgstr "Attiva crash di React" @@ -35008,7 +34956,7 @@ msgid "Trusted domains" msgstr "Domini attendibili" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:55 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:54 msgid "Trusted domains cleared." msgstr "Domini attendibili cancellati." @@ -35054,7 +35002,6 @@ msgid "Try a different variable name or clear the search." msgstr "Prova un nome variabile diverso o cancella la ricerca." #. Generic action label for retrying a failed or interrupted operation. -#: src/features/auth/components/AltchaVerification.tsx:53 #: src/features/auth/flow/AuthRouteLoadError.tsx:22 #: src/features/i18n/utils/CommonMessageDescriptors.ts:75 msgid "Try again" @@ -35132,10 +35079,6 @@ msgstr "Usa invece una chiave di sicurezza/passkey" msgid "Try sending your message again." msgstr "Prova a inviare di nuovo il messaggio." -#: src/features/auth/components/modals/CaptchaModal.tsx:177 -msgid "Try Turnstile instead" -msgstr "Prova Turnstile" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:135 msgid "TTS" @@ -36890,7 +36833,7 @@ msgid "Use this when troubleshooting the client or collecting logs. It may add v msgstr "Usalo per risolvere problemi del client o raccogliere log. Potrebbe aggiungere messaggi dettagliati alla console del browser per il client attuale." #. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1037 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1011 msgid "Use TLS" msgstr "Usa TLS" @@ -37056,7 +36999,7 @@ msgstr "Volume utente" #. Generic form-field label for a username. #. Label for SMTP username input. #. Settings search entry label. Also used as a search synonym in the settings search bar. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 #: src/features/i18n/utils/CommonMessageDescriptors.ts:572 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:218 #: src/features/user/components/modals/tabs/my_profile_tab/MyProfileTabUsernameSection.tsx:56 @@ -37337,11 +37280,6 @@ msgstr "Verifica numero di telefono" msgid "Verify phone number form" msgstr "Modulo di verifica del numero di telefono" -#. Short label in the authentication captcha modal. Keep the tone plain and specific. -#: src/features/auth/components/modals/CaptchaModal.tsx:17 -msgid "Verify you're human" -msgstr "Verifica di essere una persona" - #. Title of the error modal shown when an unverified account tries to start a DM. #. Title shown when an unverified account cannot start a DM or group DM. #: src/features/app/components/alerts/DmActionErrorModal.tsx:40 @@ -37369,22 +37307,22 @@ msgid "Verify your email before adding an authenticator app." msgstr "Verifica la tua email prima di aggiungere un'app di autenticazione." #. Description text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:117 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:116 msgid "Verify your email before changing your community nickname, avatar, banner, bio, pronouns, or accent color." msgstr "Verifica la tua email prima di cambiare soprannome, avatar, banner, biografia, pronomi o colore accento del tuo profilo nella community." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:121 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:120 msgid "Verify your email before changing your username, display name, avatar, banner, bio, pronouns, time zone, or {premiumProductName} badge privacy." msgstr "Verifica la tua email prima di cambiare nome utente, nome visualizzato, avatar, banner, biografia, pronomi, fuso orario o la privacy del badge {premiumProductName}." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:85 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:84 msgid "Verify your email before editing this community profile. You can still preview it here." msgstr "Verifica la tua email prima di modificare il profilo di questa community. Puoi comunque vederne un'anteprima qui." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:89 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:88 msgid "Verify your email before editing your profile. You can still preview it here." msgstr "Verifica la tua email prima di modificare il profilo. Puoi comunque vederne un'anteprima qui." @@ -37416,12 +37354,12 @@ msgid "Verify your email to continue using {productName}." msgstr "Verifica la tua email per continuare a usare {productName}." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:109 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:108 msgid "Verify your email to edit this community profile" msgstr "Verifica la tua email per modificare il profilo di questa community" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:113 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:112 msgid "Verify your email to edit your profile" msgstr "Verifica la tua email per modificare il profilo" @@ -38398,10 +38336,6 @@ msgstr "Abbiamo abbassato il prezzo di {premiumProductName} in Brasile. Ora cost msgid "We need one verification step before you continue. This helps protect accounts and keep spam off {productName}." msgstr "Abbiamo bisogno di un passaggio di verifica prima che tu possa continuare. Questo aiuta a proteggere gli account e a tenere lo spam lontano da {productName}." -#: src/features/auth/components/modals/CaptchaModal.tsx:128 -msgid "We need to make sure you're not a bot. Complete the verification below." -msgstr "Dobbiamo assicurarci che tu non sia un bot. Completa la verifica qui sotto." - #. Required-action modal intro text when both email and phone verification are required. #: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:216 msgid "We need two verification steps before you continue. We will show one step at a time." @@ -39256,7 +39190,7 @@ msgid "You can't befriend yourself" msgstr "Non puoi essere amico di te stesso" #. Label in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:134 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:133 msgid "You can't change your nickname here" msgstr "Non puoi cambiare il tuo soprannome qui" @@ -39506,7 +39440,7 @@ msgid "You have unsaved changes." msgstr "Hai modifiche non salvate." #. Warning text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:81 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:80 msgid "You have unsaved changes. Save or reset before leaving." msgstr "Hai delle modifiche non salvate. Salva o annulla prima di uscire." @@ -40031,10 +39965,6 @@ msgstr "La tua azione non può essere completata perché è stata segnalata dai msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "La tua candidatura è in attesa di valutazione. Puoi comunque aggiornare i dettagli della scheda o ritirare la candidatura." -#: src/features/auth/components/AltchaVerification.tsx:50 -msgid "Your browser couldn't finish the check." -msgstr "Il tuo browser non è riuscito a completare il controllo." - #. Body of the browser-audio-required modal explaining why the user must click before audio can play. #: src/features/voice/components/modals/AudioPlaybackPermissionModal.tsx:12 msgid "Your browser requires user interaction before audio can be played. Click the button below to enable voice chat." @@ -40386,7 +40316,7 @@ msgid "YouTube enrichment" msgstr "Arricchimento YouTube" #. Setup wizard title for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:977 +#: src/features/app/components/setup/SetupWizardSteps.tsx:970 msgid "YouTube previews" msgstr "Anteprime YouTube" diff --git a/fluxer_app/src/features/i18n/locales/ja/messages.po b/fluxer_app/src/features/i18n/locales/ja/messages.po index bfb03c14d..56568d79d 100644 --- a/fluxer_app/src/features/i18n/locales/ja/messages.po +++ b/fluxer_app/src/features/i18n/locales/ja/messages.po @@ -2395,11 +2395,6 @@ msgstr "60秒" msgid "7 days" msgstr "7日間" -#. Required-action error when the API requires a captcha for phone verification. -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 -msgid "A browser check is required before phone verification. Try again from the sign-in page or contact support." -msgstr "電話番号認証の前にブラウザチェックが必要です。サインインページからやり直すか、サポートにお問い合わせください。" - #. Hint shown beside in:. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:77 msgid "a channel" @@ -2928,7 +2923,7 @@ msgid "Add a friend to get started." msgstr "友達を追加して始めましょう。" #. Setup wizard body for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:973 +#: src/features/app/components/setup/SetupWizardSteps.tsx:966 msgid "Add a Klipy API key to enable GIF search at runtime." msgstr "Klipy APIキーを追加すると、実行時にGIF検索を有効にできます。" @@ -2965,7 +2960,7 @@ msgid "Add a working email" msgstr "有効なメールアドレスを追加" #. Setup wizard body for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:981 +#: src/features/app/components/setup/SetupWizardSteps.tsx:974 msgid "Add a YouTube Data API key to enrich YouTube links." msgstr "YouTube Data APIキーを追加すると、YouTubeリンクの表示を充実させられます。" @@ -3011,7 +3006,7 @@ msgid "Add another reaction" msgstr "別のリアクションを追加" #. Setup wizard body for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1005 +#: src/features/app/components/setup/SetupWizardSteps.tsx:990 msgid "Add Bluesky OAuth client metadata and a signing key." msgstr "Bluesky OAuthクライアントメタデータと署名キーを追加します。" @@ -3161,7 +3156,7 @@ msgid "Add shortcut" msgstr "ショートカットを追加" #. Setup wizard body for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:997 +#: src/features/app/components/setup/SetupWizardSteps.tsx:982 msgid "Add SMTP credentials so the instance can send verification and notification email." msgstr "SMTP認証情報を追加すると、インスタンスが確認メールや通知メールを送信できるようになります。" @@ -3188,7 +3183,7 @@ msgid "Add stream" msgstr "配信を追加" #. Description for configuring an optional setup wizard integration now. -#: src/features/app/components/setup/SetupWizardSteps.tsx:965 +#: src/features/app/components/setup/SetupWizardSteps.tsx:958 msgid "Add the credentials during setup." msgstr "セットアップ中に認証情報を追加します。" @@ -3954,7 +3949,7 @@ msgid "An invalid status was provided. You can now close this tab and return to msgstr "無効なステータスが指定されました。このタブを閉じてアプリに戻ることができます。" #. Short label in the authentication auth form. Keep the tone plain and specific. -#: src/features/auth/hooks/useAuthForm.ts:13 +#: src/features/auth/hooks/useAuthForm.ts:12 msgid "An unexpected error occurred" msgstr "予期せぬエラーが発生しました" @@ -4262,7 +4257,7 @@ msgid "Anyone can request an account, but an administrator must approve it." msgstr "誰でもアカウントをリクエストできますが、管理者の承認が必要です。" #. Label for an integration API key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1018 +#: src/features/app/components/setup/SetupWizardSteps.tsx:994 msgid "API key" msgstr "APIキー" @@ -4958,7 +4953,7 @@ msgid "Authorized apps" msgstr "承認済みアプリ" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:38 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:37 msgid "Authorized IPs cleared. New logins will require email verification." msgstr "認証済みIPアドレスをクリアしました。新しいログインにはメール認証が必要です。" @@ -5730,7 +5725,7 @@ msgid "Bluesky connections" msgstr "Bluesky接続" #. Setup wizard title for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1001 +#: src/features/app/components/setup/SetupWizardSteps.tsx:986 msgid "Bluesky OAuth" msgstr "Bluesky OAuth" @@ -5897,11 +5892,6 @@ msgstr "ボットの権限に負の値は指定できません。" msgid "Bot profile" msgstr "ボットプロフィール" -#. Setup wizard title for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:985 -msgid "Bot protection" -msgstr "ボット対策" - #. Short label in the authentication OAUTH scopes step. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/OAuthScopesStep.tsx:20 msgid "Bot scope requested" @@ -6554,11 +6544,6 @@ msgstr "編集できません" msgid "Cannot delete account" msgstr "アカウントを削除できません" -#. Toast error shown when captcha verification fails inside the auth captcha interceptor. -#: src/features/auth/components/CaptchaInterceptor.tsx:15 -msgid "Captcha verification failed. Try again." -msgstr "CAPTCHA認証に失敗しました。もう一度お試しください。" - #. Section header in the Linux audio source picker. Lists capture-target options (entire system / specific apps). #: src/features/voice/components/AudioSourcePickerLinux.tsx:50 msgid "Capture" @@ -7398,10 +7383,6 @@ msgstr "アクセス権を確認中…" msgid "Checking screen recording permission..." msgstr "画面録画の許可を確認しています…" -#: src/features/auth/components/AltchaVerification.tsx:62 -msgid "Checking your browser. This takes a few seconds." -msgstr "ブラウザを確認しています。数秒かかります。" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -7571,11 +7552,6 @@ msgstr "「ファイル」メニューから「Dockに追加」を選択して msgid "Choose friends to message." msgstr "メッセージを送る友達を選択してください。" -#. Setup wizard body for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:989 -msgid "Choose hCaptcha or Cloudflare Turnstile for signup challenges." -msgstr "サインアップチャレンジにhCaptchaまたはCloudflare Turnstileを選択してください。" - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:455 msgid "Choose how chat moves after you send a message" @@ -7982,17 +7958,17 @@ msgid "Clear selection" msgstr "選択を解除" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:88 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:87 msgid "Clear trust all setting" msgstr "信頼設定をすべてクリア" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:63 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:62 msgid "Clear trusted domains" msgstr "信頼済みドメインをクリア" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:96 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:95 msgid "Clear trusted domains ({trustedDomainsCount})" msgstr "信頼済みドメインをクリア ({trustedDomainsCount})" @@ -8002,7 +7978,7 @@ msgid "Clearer text" msgstr "より鮮明なテキスト" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:108 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:107 msgid "Clearing trusted domains..." msgstr "信頼済みドメインをクリアしています…" @@ -8100,7 +8076,7 @@ msgid "Client" msgstr "クライアント" #. Label for Bluesky OAuth client name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1057 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1031 msgid "Client name" msgstr "クライアント名" @@ -8117,7 +8093,7 @@ msgid "Client secret regenerated. Update any code that uses the old secret." msgstr "クライアントシークレットを再生成しました。古いシークレットを使用しているコードを更新してください。" #. Label for Bluesky OAuth client URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1061 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 msgid "Client URL" msgstr "クライアントURL" @@ -8269,11 +8245,6 @@ msgstr "閉じたDM" msgid "Cloud upload" msgstr "クラウドにアップロード" -#. Cloudflare Turnstile provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1014 -msgid "Cloudflare Turnstile" -msgstr "Cloudflare Turnstile" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:58 msgid "Coal" @@ -8669,7 +8640,7 @@ msgstr "コミュニティ名" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:126 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:125 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:113 msgid "Community nickname" msgstr "コミュニティニックネーム" @@ -8722,7 +8693,7 @@ msgid "Community profile" msgstr "コミュニティプロフィール" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:73 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:72 msgid "Community profile updated" msgstr "コミュニティプロフィールを更新しました" @@ -8880,7 +8851,7 @@ msgid "Configure keyboard shortcuts" msgstr "キーボードショートカットを設定" #. Option for configuring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:961 +#: src/features/app/components/setup/SetupWizardSteps.tsx:954 msgid "Configure now" msgstr "今すぐ設定" @@ -12341,7 +12312,7 @@ msgstr "{channel}から切断" msgid "Disconnect from voice" msgstr "音声通話を切断" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:261 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:243 msgid "Disconnect socket" msgstr "ソケットを切断" @@ -12479,7 +12450,7 @@ msgstr "表示モード" #. Short label in the inputs tab. Keep it concise. #. Short label in the my profile tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:22 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:138 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:137 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:61 msgid "Display name" msgstr "表示名" @@ -12625,7 +12596,7 @@ msgstr "{communityName} に参加しますか?" #. Label in the accessibility tab. #. Label in the my profile tab. #: src/features/user/components/modals/tabs/AccessibilityTab.tsx:54 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:146 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:145 msgid "Doc, I'm from the future. I came here in a time machine that you invented. Now, I need your help to get back to the year 1985." msgstr "博士、私は未来から来ました。あなたが発明したタイムマシンに乗って。1985年に戻るには、あなたの助けが必要です。" @@ -13262,7 +13233,7 @@ msgid "Edit your messages above or below" msgstr "上または下の自分のメッセージを編集" #. Button or menu action label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:93 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:92 msgid "Edit your profile appearance and see a live preview" msgstr "プロフィールを編集して、ライブプレビューを確認" @@ -13330,7 +13301,7 @@ msgid "Email changed" msgstr "メールアドレスを変更しました" #. Setup wizard title for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:993 +#: src/features/app/components/setup/SetupWizardSteps.tsx:978 msgid "Email delivery" msgstr "メール配信" @@ -13635,7 +13606,7 @@ msgid "Enable beta feature" msgstr "ベータ機能を有効にする" #. Label for enabling Bluesky OAuth in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1053 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1027 msgid "Enable Bluesky OAuth" msgstr "Bluesky OAuthを有効にする" @@ -13668,7 +13639,7 @@ msgid "Enable developer mode" msgstr "開発者モードを有効にする" #. Label for enabling SMTP email delivery in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1021 +#: src/features/app/components/setup/SetupWizardSteps.tsx:995 msgid "Enable email delivery" msgstr "メール配信を有効にする" @@ -14705,7 +14676,7 @@ msgid "Failed to ban member. Try again." msgstr "メンバーをBANできませんでした。もう一度お試しください。" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:59 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:58 msgid "Failed to clear trusted domains." msgstr "信頼済みドメインのクリアに失敗しました。" @@ -14762,7 +14733,7 @@ msgid "Failed to enable camera." msgstr "カメラを有効にできませんでした。" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:42 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:41 msgid "Failed to forget authorized IPs. Try again." msgstr "認証済みIPアドレスの削除に失敗しました。もう一度お試しください。" @@ -14907,7 +14878,7 @@ msgid "Failed to resend verification code. Try again later." msgstr "認証コードの再送信に失敗しました。後でもう一度お試しください。" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:75 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:74 msgid "Failed to reset premium state." msgstr "プレミアム状態のリセットに失敗しました。" @@ -15581,7 +15552,7 @@ msgstr "ローディングスケルトンを強制表示" msgid "Force mature media" msgstr "成人向けメディアを強制表示" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:276 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:258 msgid "Force move to AFK channel" msgstr "AFKチャンネルへ強制移動" @@ -15640,7 +15611,7 @@ msgid "Forced off" msgstr "強制オフ" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:46 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:45 msgid "Forget authorized IPs" msgstr "認証済みIPを削除" @@ -15650,7 +15621,7 @@ msgid "Forget subscriptions" msgstr "プッシュ通知の登録を削除" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:104 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:103 msgid "Forgetting authorized IPs..." msgstr "認証済みIPを削除中…" @@ -15907,12 +15878,12 @@ msgid "from <0>{0}" msgstr "<0>{0}から" #. Label for SMTP from email input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1025 +#: src/features/app/components/setup/SetupWizardSteps.tsx:999 msgid "From email" msgstr "差出人メールアドレス" #. Label for SMTP from name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1029 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1003 msgid "From name" msgstr "差出人名" @@ -16204,7 +16175,7 @@ msgid "GIF preview" msgstr "GIFプレビュー" #. Setup wizard title for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:969 +#: src/features/app/components/setup/SetupWizardSteps.tsx:962 msgid "GIF search" msgstr "GIF検索" @@ -16853,21 +16824,12 @@ msgstr "ギフトコードをお持ちですか?{PREMIUM_PRODUCT_NAME}をア msgid "Having fun?" msgstr "楽しんでる?" -#: src/features/auth/components/modals/CaptchaModal.tsx:175 -msgid "Having issues? Try hCaptcha instead" -msgstr "問題が発生しましたか?hCaptchaをお試しください" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:63 msgctxt "us-state" msgid "Hawaii" msgstr "ハワイ州" -#. hCaptcha provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1013 -msgid "hCaptcha" -msgstr "hCaptcha" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:238 msgid "HD" @@ -19768,7 +19730,7 @@ msgid "Logo" msgstr "ロゴ" #. Label for Bluesky OAuth logo URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1065 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1039 msgid "Logo URL" msgstr "ロゴのURL" @@ -22941,7 +22903,7 @@ msgid "No tokens match \"{searchQuery}\"." msgstr "「{searchQuery}」に一致するトークンはありません。" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:92 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:91 msgid "No trusted domains" msgstr "信頼済みドメインがありません" @@ -23696,10 +23658,6 @@ msgstr "ブラウザ選択を開く" msgid "Open call view" msgstr "通話画面を開く" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:288 -msgid "Open captcha modal" -msgstr "CAPTCHAモーダルを開く" - #. Accessible label for the channel header title button in a community channel. #: src/features/channel/components/channel_header/shared.ts:14 msgid "Open channel details for {channelName}" @@ -23712,7 +23670,7 @@ msgstr "{channelName}のチャンネル詳細を開く" msgid "Open chat" msgstr "チャットを開く" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:314 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:290 msgid "Open claim account modal" msgstr "アカウント登録モーダルを開く" @@ -23944,11 +23902,11 @@ msgstr "ブラウザでスタンプを開く" msgid "Open streaming privacy settings" msgstr "配信プライバシー設定を開く" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:327 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:303 msgid "Open sudo verification modal" msgstr "sudo認証モーダルを開く" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:342 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:318 msgid "Open system DM" msgstr "システムDMを開く" @@ -24430,7 +24388,7 @@ msgstr "パスキーには、有効なアプリケーション識別子を持つ #. Generic form-field label for a password. #. Label for SMTP password input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1036 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1010 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:146 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:183 @@ -25212,7 +25170,7 @@ msgid "Popup" msgstr "ポップアップ" #. Label for SMTP port input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1034 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1008 msgid "Port" msgstr "ポート" @@ -25338,7 +25296,7 @@ msgid "Premium since date" msgstr "プレミアム登録日" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:71 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:70 msgid "Premium state reset on the backend." msgstr "バックエンドでプレミアムステータスをリセットしました。" @@ -25608,7 +25566,7 @@ msgid "Privacy settings" msgstr "プライバシー設定" #. Label for Bluesky OAuth privacy URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1073 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1047 msgid "Privacy URL" msgstr "プライバシーポリシーのURL" @@ -25633,7 +25591,7 @@ msgid "Private details" msgstr "個人情報" #. Label for Bluesky OAuth private key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1081 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1055 msgid "Private key" msgstr "秘密鍵" @@ -25699,18 +25657,18 @@ msgstr "プロフィールカラー" #. Settings section label for editing profile appearance and identity. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:105 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:104 #: src/features/user/components/settings_utils/section_registry/GeneralSettingsSections.ts:6 msgid "Profile customization" msgstr "プロフィールをカスタマイズ" #. Label in the my profile tab. Preserve {selectedGuildName}; it is inserted by code. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:101 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:100 msgid "Profile customization for {selectedGuildName}" msgstr "{selectedGuildName}のプロフィールをカスタマイズ" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:97 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:96 msgid "Profile customization form" msgstr "プロフィール編集フォーム" @@ -25775,7 +25733,7 @@ msgid "Profile type" msgstr "プロフィールタイプ" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:77 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:76 msgid "Profile updated" msgstr "プロフィールを更新しました" @@ -25812,7 +25770,7 @@ msgstr "新しいオーディオデバイスの接続時に通知する" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:142 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:141 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:177 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:160 msgid "Pronouns" @@ -25842,11 +25800,6 @@ msgstr "報告する相手のユーザーIDまたはユーザー名を入力し msgid "Provide your full legal name for the declaration." msgstr "申告のために本名を入力してください。" -#. Label for an integration provider choice. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 -msgid "Provider" -msgstr "プロバイダー" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27626,7 +27579,7 @@ msgid "Reset password" msgstr "パスワードをリセット" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:79 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:78 msgid "Reset premium state" msgstr "プレミアム状態をリセット" @@ -27635,7 +27588,7 @@ msgstr "プレミアム状態をリセット" msgid "Reset slider to default value" msgstr "スライダーを初期値にリセット" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:247 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:229 msgid "Reset socket" msgstr "ソケットをリセット" @@ -27684,7 +27637,7 @@ msgid "Reset zoom" msgstr "ズームをリセット" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:112 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:111 msgid "Resetting premium state..." msgstr "プレミアム状態をリセット中…" @@ -28315,7 +28268,7 @@ msgid "Run the instance as one community instead of many. This can only be enabl msgstr "複数のコミュニティではなく、1つのコミュニティとしてインスタンスを実行します。この設定はセットアップ中のみ有効にできます。" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:100 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:99 msgid "Runtime utilities" msgstr "ランタイムユーティリティ" @@ -29103,11 +29056,6 @@ msgstr "サブボタンがクリックされました。" msgid "Secret" msgstr "シークレット" -#. Label for a CAPTCHA secret key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1020 -msgid "Secret key" -msgstr "シークレットキー" - #. Settings search entry label. Names the settings search entry in the settings UI. #. Short label in the secrets section. Keep it concise. Keep the tone plain and specific. #: src/features/user/components/modals/tabs/applications_tab/application_detail/SecretsSection.tsx:11 @@ -29925,7 +29873,7 @@ msgid "Set up authenticator app" msgstr "認証アプリを設定" #. Option for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:953 +#: src/features/app/components/setup/SetupWizardSteps.tsx:946 msgid "Set up later" msgstr "後で設定" @@ -30427,7 +30375,7 @@ msgstr "DMリストをインライン表示" msgid "Show just the typing indicator without avatars" msgstr "アバターなしで入力インジケーターのみを表示" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:308 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:284 msgid "Show keyboard mode intro" msgstr "キーボードモードの紹介を表示" @@ -30538,7 +30486,7 @@ msgstr "ネコを表示" msgid "Show new device alerts" msgstr "新しいデバイスの通知を表示" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:282 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:264 msgid "Show new device modal" msgstr "新しいデバイスのモーダルを表示" @@ -30820,7 +30768,7 @@ msgid "Signed-in devices" msgstr "サインイン中のデバイス" #. Label for Bluesky OAuth signing key ID input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1077 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1051 msgid "Signing key ID" msgstr "署名キーID" @@ -30910,11 +30858,6 @@ msgstr "1行" msgid "Single user (all statuses)" msgstr "個別ユーザー(すべてのステータス)" -#. Label for a CAPTCHA site key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 -msgid "Site key" -msgstr "サイトキー" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:98 @@ -30964,7 +30907,7 @@ msgid "Skip the system leave notice — nobody gets pinged." msgstr "システムからの脱退通知をスキップします。誰にも通知されません。" #. Description for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:957 +#: src/features/app/components/setup/SetupWizardSteps.tsx:950 msgid "Skip this now and configure it from the admin panel." msgstr "今はスキップして、管理パネルから設定します。" @@ -31212,17 +31155,17 @@ msgid "SMS verification is unavailable right now. Try again later or contact sup msgstr "現在、SMS認証をご利用いただけません。しばらくしてからもう一度お試しいただくか、サポートにお問い合わせください。" #. Success message after validating SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1045 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 msgid "SMTP connection verified." msgstr "SMTP接続を確認しました。" #. Label for SMTP host input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1033 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1007 msgid "SMTP host" msgstr "SMTPホスト" #. Failure message after validating SMTP credentials when the server returns no error detail. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1049 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1023 msgid "SMTP validation failed." msgstr "SMTPの検証に失敗しました。" @@ -31402,7 +31345,7 @@ msgstr "問題が発生しました。後でもう一度お試しください。 #. Inline error in the web deep-link prompt when opening the desktop app fails. #. Toast error shown when the mature content check request fails unexpectedly. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:18 -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:580 +#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 #: src/features/auth/flow/DesktopDeepLinkPrompt.tsx:31 msgid "Something went wrong. Try again." msgstr "問題が発生しました。もう一度お試しください。" @@ -32099,6 +32042,11 @@ msgstr "まだインデックスを作成中です。しばらくしてからも msgid "Still Neko" msgstr "ネコを静止" +#. Small toast shown only when an automatic background check before sign-in, sign-up or a similar request takes more than a couple of seconds. No user action needed. Keep it short and calm. +#: src/features/auth/altcha/CaptchaInterceptor.ts:13 +msgid "Still working on it…" +msgstr "確認中です…" + #. Stop-recording button label in the desktop voice message composer. #: src/features/voice/components/VoiceMessageComposerModal.tsx:65 msgid "Stop" @@ -33013,7 +32961,7 @@ msgid "Terms of service" msgstr "利用規約" #. Label for Bluesky OAuth terms URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1069 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1043 msgid "Terms URL" msgstr "利用規約URL" @@ -33023,7 +32971,7 @@ msgid "Terrorism or violent extremism" msgstr "テロまたは暴力的過激主義" #. Button that validates SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1041 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1015 msgid "Test SMTP" msgstr "SMTPをテスト" @@ -33800,7 +33748,7 @@ msgid "This clears quick CSS, imported themes, uploaded assets, and local file r msgstr "これにより、このデバイス上のクイックCSS、インポートされたテーマ、アップロードされたアセット、およびローカルファイルの参照がクリアされます。" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:83 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:82 msgid "This clears your backend premium state entirely, including premium type, billing metadata, and override flags." msgstr "プレミアムタイプ、請求メタデータ、オーバーライドフラグなど、バックエンドのプレミアムステータスがすべてクリアされます。" @@ -34200,7 +34148,7 @@ msgid "This message no longer exists." msgstr "このメッセージはもう存在しません。" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:130 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:129 msgid "This nickname will only be visible in this community" msgstr "このニックネームはこのコミュニティ内でのみ表示されます" @@ -34277,12 +34225,12 @@ msgid "This removes all custom CSS overrides. Theme files in your library are no msgstr "すべてのカスタムCSSオーバーライドが削除されます。ライブラリ内のテーマファイルは影響を受けません。" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:50 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:49 msgid "This removes all previously authorized IP addresses on your account. The next login from any IP will require email verification." msgstr "アカウントに以前認証されたすべてのIPアドレスが削除されます。次回ログイン時は、どのIPからでもメール認証が必要になります。" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:67 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:66 msgid "This removes all trusted domains. You will see the external link warning for all domains again." msgstr "すべての信頼済みドメインが削除されます。すべてのドメインで、再度外部リンクの警告が表示されるようになります。" @@ -34949,7 +34897,7 @@ msgstr "Linuxでは、システムトレイプロトコルが実行時にアプ msgid "Trending GIFs" msgstr "トレンドGIF" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:383 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:359 msgid "Trigger React crash" msgstr "Reactクラッシュをトリガー" @@ -35008,7 +34956,7 @@ msgid "Trusted domains" msgstr "信頼済みドメイン" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:55 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:54 msgid "Trusted domains cleared." msgstr "信頼済みドメインをクリアしました。" @@ -35054,7 +35002,6 @@ msgid "Try a different variable name or clear the search." msgstr "別の変数名をお試しいただくか、検索をクリアしてください。" #. Generic action label for retrying a failed or interrupted operation. -#: src/features/auth/components/AltchaVerification.tsx:53 #: src/features/auth/flow/AuthRouteLoadError.tsx:22 #: src/features/i18n/utils/CommonMessageDescriptors.ts:75 msgid "Try again" @@ -35132,10 +35079,6 @@ msgstr "セキュリティキー/パスキーを試す" msgid "Try sending your message again." msgstr "もう一度メッセージを送信してください。" -#: src/features/auth/components/modals/CaptchaModal.tsx:177 -msgid "Try Turnstile instead" -msgstr "代わりにTurnstileをお試しください" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:135 msgid "TTS" @@ -36890,7 +36833,7 @@ msgid "Use this when troubleshooting the client or collecting logs. It may add v msgstr "クライアントのトラブルシューティングやログ収集時に使用します。現在のクライアントのブラウザコンソールに詳細なメッセージが追加される場合があります。" #. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1037 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1011 msgid "Use TLS" msgstr "TLSを使用" @@ -37056,7 +36999,7 @@ msgstr "ユーザーの音量" #. Generic form-field label for a username. #. Label for SMTP username input. #. Settings search entry label. Also used as a search synonym in the settings search bar. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 #: src/features/i18n/utils/CommonMessageDescriptors.ts:572 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:218 #: src/features/user/components/modals/tabs/my_profile_tab/MyProfileTabUsernameSection.tsx:56 @@ -37337,11 +37280,6 @@ msgstr "電話番号を認証" msgid "Verify phone number form" msgstr "電話番号認証フォーム" -#. Short label in the authentication captcha modal. Keep the tone plain and specific. -#: src/features/auth/components/modals/CaptchaModal.tsx:17 -msgid "Verify you're human" -msgstr "人間であることを確認してください" - #. Title of the error modal shown when an unverified account tries to start a DM. #. Title shown when an unverified account cannot start a DM or group DM. #: src/features/app/components/alerts/DmActionErrorModal.tsx:40 @@ -37369,22 +37307,22 @@ msgid "Verify your email before adding an authenticator app." msgstr "認証アプリを追加する前にメールアドレスを確認してください。" #. Description text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:117 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:116 msgid "Verify your email before changing your community nickname, avatar, banner, bio, pronouns, or accent color." msgstr "コミュニティのニックネーム、アバター、バナー、自己紹介、代名詞、アクセントカラーを変更する前に、メールアドレスを確認してください。" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:121 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:120 msgid "Verify your email before changing your username, display name, avatar, banner, bio, pronouns, time zone, or {premiumProductName} badge privacy." msgstr "ユーザー名、表示名、アバター、バナー、自己紹介、代名詞、タイムゾーン、または{premiumProductName}バッジのプライバシーを変更する前に、メールアドレスを確認してください。" #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:85 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:84 msgid "Verify your email before editing this community profile. You can still preview it here." msgstr "コミュニティプロフィールを編集する前に、メールアドレスを確認してください。ここでは引き続きプレビューできます。" #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:89 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:88 msgid "Verify your email before editing your profile. You can still preview it here." msgstr "プロフィールを編集する前にメールアドレスを確認してください。ここでは引き続きプレビューできます。" @@ -37416,12 +37354,12 @@ msgid "Verify your email to continue using {productName}." msgstr "{productName}を使い続けるには、メールアドレスを確認してください。" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:109 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:108 msgid "Verify your email to edit this community profile" msgstr "コミュニティプロフィールを編集するにはメールアドレスを確認してください" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:113 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:112 msgid "Verify your email to edit your profile" msgstr "プロフィールを編集するにはメールアドレスを確認してください" @@ -38398,10 +38336,6 @@ msgstr "ブラジルでの{premiumProductName}の価格を値下げしました msgid "We need one verification step before you continue. This helps protect accounts and keep spam off {productName}." msgstr "続行する前に、確認ステップが1つ必要です。これはアカウントを保護し、{productName}からスパムを排除するのに役立ちます。" -#: src/features/auth/components/modals/CaptchaModal.tsx:128 -msgid "We need to make sure you're not a bot. Complete the verification below." -msgstr "お客様がボットでないことを確認する必要があります。以下の認証を完了してください。" - #. Required-action modal intro text when both email and phone verification are required. #: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:216 msgid "We need two verification steps before you continue. We will show one step at a time." @@ -39256,7 +39190,7 @@ msgid "You can't befriend yourself" msgstr "自分を友達に追加することはできません" #. Label in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:134 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:133 msgid "You can't change your nickname here" msgstr "ここではニックネームを変更できません" @@ -39506,7 +39440,7 @@ msgid "You have unsaved changes." msgstr "保存されていない変更があります。" #. Warning text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:81 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:80 msgid "You have unsaved changes. Save or reset before leaving." msgstr "保存されていない変更があります。移動する前に保存またはリセットしてください。" @@ -40031,10 +39965,6 @@ msgstr "安全システムによって不適切な操作と判断されたため msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "現在、申請内容を審査中です。引き続き掲載内容を更新したり、申請を取り下げたりすることができます。" -#: src/features/auth/components/AltchaVerification.tsx:50 -msgid "Your browser couldn't finish the check." -msgstr "ブラウザでチェックを完了できませんでした。" - #. Body of the browser-audio-required modal explaining why the user must click before audio can play. #: src/features/voice/components/modals/AudioPlaybackPermissionModal.tsx:12 msgid "Your browser requires user interaction before audio can be played. Click the button below to enable voice chat." @@ -40386,7 +40316,7 @@ msgid "YouTube enrichment" msgstr "YouTube連携" #. Setup wizard title for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:977 +#: src/features/app/components/setup/SetupWizardSteps.tsx:970 msgid "YouTube previews" msgstr "YouTubeプレビュー" diff --git a/fluxer_app/src/features/i18n/locales/ko/messages.po b/fluxer_app/src/features/i18n/locales/ko/messages.po index e552a6721..604c5ad46 100644 --- a/fluxer_app/src/features/i18n/locales/ko/messages.po +++ b/fluxer_app/src/features/i18n/locales/ko/messages.po @@ -2395,11 +2395,6 @@ msgstr "60초" msgid "7 days" msgstr "7일" -#. Required-action error when the API requires a captcha for phone verification. -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 -msgid "A browser check is required before phone verification. Try again from the sign-in page or contact support." -msgstr "전화번호 인증 전에 브라우저 확인이 필요합니다. 로그인 페이지에서 다시 시도하거나 고객지원팀에 문의하세요." - #. Hint shown beside in:. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:77 msgid "a channel" @@ -2928,7 +2923,7 @@ msgid "Add a friend to get started." msgstr "친구를 추가하여 시작해 보세요." #. Setup wizard body for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:973 +#: src/features/app/components/setup/SetupWizardSteps.tsx:966 msgid "Add a Klipy API key to enable GIF search at runtime." msgstr "Klipy API 키를 추가하여 실행 시 GIF 검색을 사용 설정하세요." @@ -2965,7 +2960,7 @@ msgid "Add a working email" msgstr "사용 가능한 이메일 추가" #. Setup wizard body for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:981 +#: src/features/app/components/setup/SetupWizardSteps.tsx:974 msgid "Add a YouTube Data API key to enrich YouTube links." msgstr "YouTube 링크에 더 자세한 정보를 표시하려면 YouTube Data API 키를 추가하세요." @@ -3011,7 +3006,7 @@ msgid "Add another reaction" msgstr "다른 반응 추가" #. Setup wizard body for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1005 +#: src/features/app/components/setup/SetupWizardSteps.tsx:990 msgid "Add Bluesky OAuth client metadata and a signing key." msgstr "Bluesky OAuth 클라이언트 메타데이터와 서명 키를 추가하세요." @@ -3161,7 +3156,7 @@ msgid "Add shortcut" msgstr "단축키 추가" #. Setup wizard body for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:997 +#: src/features/app/components/setup/SetupWizardSteps.tsx:982 msgid "Add SMTP credentials so the instance can send verification and notification email." msgstr "인스턴스에서 확인 및 알림 이메일을 보낼 수 있도록 SMTP 자격 증명을 추가하세요." @@ -3188,7 +3183,7 @@ msgid "Add stream" msgstr "스트림 추가" #. Description for configuring an optional setup wizard integration now. -#: src/features/app/components/setup/SetupWizardSteps.tsx:965 +#: src/features/app/components/setup/SetupWizardSteps.tsx:958 msgid "Add the credentials during setup." msgstr "설정 중에 자격 증명을 추가하세요." @@ -3954,7 +3949,7 @@ msgid "An invalid status was provided. You can now close this tab and return to msgstr "잘못된 상태 값이 전달되었습니다. 이제 이 탭을 닫고 앱으로 돌아가세요." #. Short label in the authentication auth form. Keep the tone plain and specific. -#: src/features/auth/hooks/useAuthForm.ts:13 +#: src/features/auth/hooks/useAuthForm.ts:12 msgid "An unexpected error occurred" msgstr "예기치 않은 오류가 발생했습니다" @@ -4262,7 +4257,7 @@ msgid "Anyone can request an account, but an administrator must approve it." msgstr "누구나 계정을 요청할 수 있지만, 관리자의 승인이 필요합니다." #. Label for an integration API key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1018 +#: src/features/app/components/setup/SetupWizardSteps.tsx:994 msgid "API key" msgstr "API 키" @@ -4958,7 +4953,7 @@ msgid "Authorized apps" msgstr "승인된 앱" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:38 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:37 msgid "Authorized IPs cleared. New logins will require email verification." msgstr "승인된 IP가 삭제되었습니다. 새로 로그인하려면 이메일 인증이 필요합니다." @@ -5730,7 +5725,7 @@ msgid "Bluesky connections" msgstr "Bluesky 연결" #. Setup wizard title for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1001 +#: src/features/app/components/setup/SetupWizardSteps.tsx:986 msgid "Bluesky OAuth" msgstr "Bluesky OAuth" @@ -5897,11 +5892,6 @@ msgstr "봇 권한은 음수일 수 없습니다." msgid "Bot profile" msgstr "봇 프로필" -#. Setup wizard title for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:985 -msgid "Bot protection" -msgstr "봇 방지" - #. Short label in the authentication OAUTH scopes step. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/OAuthScopesStep.tsx:20 msgid "Bot scope requested" @@ -6554,11 +6544,6 @@ msgstr "수정할 수 없음" msgid "Cannot delete account" msgstr "계정을 삭제할 수 없습니다" -#. Toast error shown when captcha verification fails inside the auth captcha interceptor. -#: src/features/auth/components/CaptchaInterceptor.tsx:15 -msgid "Captcha verification failed. Try again." -msgstr "캡차 인증에 실패했습니다. 다시 시도해 주세요." - #. Section header in the Linux audio source picker. Lists capture-target options (entire system / specific apps). #: src/features/voice/components/AudioSourcePickerLinux.tsx:50 msgid "Capture" @@ -7398,10 +7383,6 @@ msgstr "접근 권한 확인 중..." msgid "Checking screen recording permission..." msgstr "화면 녹화 권한 확인 중..." -#: src/features/auth/components/AltchaVerification.tsx:62 -msgid "Checking your browser. This takes a few seconds." -msgstr "브라우저를 확인 중입니다. 몇 초 정도 걸립니다." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -7571,11 +7552,6 @@ msgstr "파일을 선택한 다음 Dock에 추가를 선택하세요." msgid "Choose friends to message." msgstr "메시지를 보낼 친구를 선택하세요." -#. Setup wizard body for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:989 -msgid "Choose hCaptcha or Cloudflare Turnstile for signup challenges." -msgstr "가입 시 hCaptcha 또는 Cloudflare Turnstile을 선택하세요." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:455 msgid "Choose how chat moves after you send a message" @@ -7982,17 +7958,17 @@ msgid "Clear selection" msgstr "선택 해제" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:88 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:87 msgid "Clear trust all setting" msgstr "모든 도메인 신뢰 설정 지우기" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:63 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:62 msgid "Clear trusted domains" msgstr "신뢰하는 도메인 지우기" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:96 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:95 msgid "Clear trusted domains ({trustedDomainsCount})" msgstr "신뢰하는 도메인 지우기 ({trustedDomainsCount})" @@ -8002,7 +7978,7 @@ msgid "Clearer text" msgstr "더 선명한 텍스트" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:108 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:107 msgid "Clearing trusted domains..." msgstr "신뢰하는 도메인 지우는 중..." @@ -8100,7 +8076,7 @@ msgid "Client" msgstr "클라이언트" #. Label for Bluesky OAuth client name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1057 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1031 msgid "Client name" msgstr "클라이언트 이름" @@ -8117,7 +8093,7 @@ msgid "Client secret regenerated. Update any code that uses the old secret." msgstr "클라이언트 보안 비밀이 재생성되었습니다. 이전 보안 비밀을 사용하는 코드를 업데이트하세요." #. Label for Bluesky OAuth client URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1061 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 msgid "Client URL" msgstr "클라이언트 URL" @@ -8269,11 +8245,6 @@ msgstr "닫은 DM" msgid "Cloud upload" msgstr "클라우드 업로드" -#. Cloudflare Turnstile provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1014 -msgid "Cloudflare Turnstile" -msgstr "Cloudflare Turnstile" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:58 msgid "Coal" @@ -8669,7 +8640,7 @@ msgstr "커뮤니티 이름" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:126 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:125 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:113 msgid "Community nickname" msgstr "커뮤니티 닉네임" @@ -8722,7 +8693,7 @@ msgid "Community profile" msgstr "커뮤니티 프로필" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:73 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:72 msgid "Community profile updated" msgstr "커뮤니티 프로필 업데이트 완료" @@ -8880,7 +8851,7 @@ msgid "Configure keyboard shortcuts" msgstr "키보드 단축키 설정" #. Option for configuring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:961 +#: src/features/app/components/setup/SetupWizardSteps.tsx:954 msgid "Configure now" msgstr "지금 설정" @@ -12341,7 +12312,7 @@ msgstr "{channel}에서 연결 끊기" msgid "Disconnect from voice" msgstr "음성 연결 끊기" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:261 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:243 msgid "Disconnect socket" msgstr "소켓 연결 해제" @@ -12479,7 +12450,7 @@ msgstr "화면 모드" #. Short label in the inputs tab. Keep it concise. #. Short label in the my profile tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:22 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:138 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:137 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:61 msgid "Display name" msgstr "표시 이름" @@ -12625,7 +12596,7 @@ msgstr "{communityName}에 참여하시겠어요?" #. Label in the accessibility tab. #. Label in the my profile tab. #: src/features/user/components/modals/tabs/AccessibilityTab.tsx:54 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:146 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:145 msgid "Doc, I'm from the future. I came here in a time machine that you invented. Now, I need your help to get back to the year 1985." msgstr "박사님, 저는 미래에서 왔어요. 박사님이 발명한 타임머신을 타고 여기로 왔습니다. 이제 1985년으로 돌아가려면 박사님의 도움이 필요해요." @@ -13262,7 +13233,7 @@ msgid "Edit your messages above or below" msgstr "위 또는 아래의 내 메시지 수정" #. Button or menu action label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:93 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:92 msgid "Edit your profile appearance and see a live preview" msgstr "프로필 모양을 편집하고 실시간 미리보기를 확인하세요" @@ -13330,7 +13301,7 @@ msgid "Email changed" msgstr "이메일 변경 완료" #. Setup wizard title for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:993 +#: src/features/app/components/setup/SetupWizardSteps.tsx:978 msgid "Email delivery" msgstr "이메일 전송" @@ -13635,7 +13606,7 @@ msgid "Enable beta feature" msgstr "베타 기능 활성화" #. Label for enabling Bluesky OAuth in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1053 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1027 msgid "Enable Bluesky OAuth" msgstr "Bluesky OAuth 사용 설정" @@ -13668,7 +13639,7 @@ msgid "Enable developer mode" msgstr "개발자 모드 활성화" #. Label for enabling SMTP email delivery in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1021 +#: src/features/app/components/setup/SetupWizardSteps.tsx:995 msgid "Enable email delivery" msgstr "이메일 전송 사용 설정" @@ -14705,7 +14676,7 @@ msgid "Failed to ban member. Try again." msgstr "멤버 차단에 실패했습니다. 다시 시도해 주세요." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:59 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:58 msgid "Failed to clear trusted domains." msgstr "신뢰할 수 있는 도메인 지우기 실패." @@ -14762,7 +14733,7 @@ msgid "Failed to enable camera." msgstr "카메라를 켤 수 없습니다." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:42 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:41 msgid "Failed to forget authorized IPs. Try again." msgstr "승인된 IP를 지우지 못했습니다. 다시 시도해 주세요." @@ -14907,7 +14878,7 @@ msgid "Failed to resend verification code. Try again later." msgstr "인증 코드 재전송에 실패했습니다. 나중에 다시 시도해 주세요." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:75 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:74 msgid "Failed to reset premium state." msgstr "프리미엄 상태 초기화에 실패했습니다." @@ -15581,7 +15552,7 @@ msgstr "로딩 스켈레톤 강제 표시" msgid "Force mature media" msgstr "성인용 미디어 강제 적용" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:276 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:258 msgid "Force move to AFK channel" msgstr "자리 비움 채널로 강제 이동" @@ -15640,7 +15611,7 @@ msgid "Forced off" msgstr "강제 꺼짐" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:46 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:45 msgid "Forget authorized IPs" msgstr "승인된 IP 지우기" @@ -15650,7 +15621,7 @@ msgid "Forget subscriptions" msgstr "푸시 구독 삭제" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:104 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:103 msgid "Forgetting authorized IPs..." msgstr "승인된 IP 지우는 중..." @@ -15907,12 +15878,12 @@ msgid "from <0>{0}" msgstr "<0>{0}에서" #. Label for SMTP from email input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1025 +#: src/features/app/components/setup/SetupWizardSteps.tsx:999 msgid "From email" msgstr "보내는 사람 이메일" #. Label for SMTP from name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1029 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1003 msgid "From name" msgstr "보내는 사람 이름" @@ -16204,7 +16175,7 @@ msgid "GIF preview" msgstr "GIF 미리보기" #. Setup wizard title for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:969 +#: src/features/app/components/setup/SetupWizardSteps.tsx:962 msgid "GIF search" msgstr "GIF 검색" @@ -16853,21 +16824,12 @@ msgstr "선물 코드가 있으신가요? {PREMIUM_PRODUCT_NAME}을(를) 잠금 msgid "Having fun?" msgstr "재밌게 보내고 계신가요?" -#: src/features/auth/components/modals/CaptchaModal.tsx:175 -msgid "Having issues? Try hCaptcha instead" -msgstr "문제가 있으신가요? hCaptcha를 대신 사용해 보세요" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:63 msgctxt "us-state" msgid "Hawaii" msgstr "하와이" -#. hCaptcha provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1013 -msgid "hCaptcha" -msgstr "hCaptcha" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:238 msgid "HD" @@ -19768,7 +19730,7 @@ msgid "Logo" msgstr "로고" #. Label for Bluesky OAuth logo URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1065 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1039 msgid "Logo URL" msgstr "로고 URL" @@ -22941,7 +22903,7 @@ msgid "No tokens match \"{searchQuery}\"." msgstr "일치하는 토큰이 없습니다: \"{searchQuery}\"." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:92 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:91 msgid "No trusted domains" msgstr "신뢰할 수 있는 도메인 없음" @@ -23696,10 +23658,6 @@ msgstr "브라우저 선택기 열기" msgid "Open call view" msgstr "통화 화면 열기" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:288 -msgid "Open captcha modal" -msgstr "캡차 모달 열기" - #. Accessible label for the channel header title button in a community channel. #: src/features/channel/components/channel_header/shared.ts:14 msgid "Open channel details for {channelName}" @@ -23712,7 +23670,7 @@ msgstr "{channelName} 채널 정보 열기" msgid "Open chat" msgstr "채팅 열기" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:314 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:290 msgid "Open claim account modal" msgstr "계정 등록 모달 열기" @@ -23944,11 +23902,11 @@ msgstr "브라우저에서 스티커 열기" msgid "Open streaming privacy settings" msgstr "스트리밍 개인 정보 보호 설정 열기" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:327 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:303 msgid "Open sudo verification modal" msgstr "관리자 인증 모달 열기" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:342 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:318 msgid "Open system DM" msgstr "시스템 DM 열기" @@ -24430,7 +24388,7 @@ msgstr "패스키를 사용하려면 유효한 앱 식별자가 있는 서명된 #. Generic form-field label for a password. #. Label for SMTP password input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1036 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1010 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:146 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:183 @@ -25212,7 +25170,7 @@ msgid "Popup" msgstr "팝업" #. Label for SMTP port input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1034 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1008 msgid "Port" msgstr "포트" @@ -25338,7 +25296,7 @@ msgid "Premium since date" msgstr "프리미엄 시작일" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:71 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:70 msgid "Premium state reset on the backend." msgstr "백엔드에서 프리미엄 상태가 재설정되었습니다." @@ -25608,7 +25566,7 @@ msgid "Privacy settings" msgstr "개인 정보 보호 설정" #. Label for Bluesky OAuth privacy URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1073 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1047 msgid "Privacy URL" msgstr "개인정보처리방침 URL" @@ -25633,7 +25591,7 @@ msgid "Private details" msgstr "개인 정보" #. Label for Bluesky OAuth private key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1081 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1055 msgid "Private key" msgstr "개인 키" @@ -25699,18 +25657,18 @@ msgstr "프로필 색상" #. Settings section label for editing profile appearance and identity. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:105 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:104 #: src/features/user/components/settings_utils/section_registry/GeneralSettingsSections.ts:6 msgid "Profile customization" msgstr "프로필 맞춤 설정" #. Label in the my profile tab. Preserve {selectedGuildName}; it is inserted by code. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:101 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:100 msgid "Profile customization for {selectedGuildName}" msgstr "{selectedGuildName} 프로필 맞춤 설정" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:97 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:96 msgid "Profile customization form" msgstr "프로필 맞춤 설정 양식" @@ -25775,7 +25733,7 @@ msgid "Profile type" msgstr "프로필 유형" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:77 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:76 msgid "Profile updated" msgstr "프로필 업데이트 완료" @@ -25812,7 +25770,7 @@ msgstr "새 오디오 장치가 연결되면 알림 표시" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:142 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:141 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:177 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:160 msgid "Pronouns" @@ -25842,11 +25800,6 @@ msgstr "신고하려는 사람의 사용자 ID 또는 사용자 이름을 입력 msgid "Provide your full legal name for the declaration." msgstr "법적 진술을 위해 본인의 법적 성명 전체를 입력해 주세요." -#. Label for an integration provider choice. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 -msgid "Provider" -msgstr "제공업체" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27626,7 +27579,7 @@ msgid "Reset password" msgstr "비밀번호 재설정" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:79 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:78 msgid "Reset premium state" msgstr "프리미엄 상태 초기화" @@ -27635,7 +27588,7 @@ msgstr "프리미엄 상태 초기화" msgid "Reset slider to default value" msgstr "슬라이더를 기본값으로 초기화" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:247 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:229 msgid "Reset socket" msgstr "소켓 재설정" @@ -27684,7 +27637,7 @@ msgid "Reset zoom" msgstr "확대/축소 초기화" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:112 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:111 msgid "Resetting premium state..." msgstr "프리미엄 상태 재설정 중..." @@ -28315,7 +28268,7 @@ msgid "Run the instance as one community instead of many. This can only be enabl msgstr "인스턴스를 여러 커뮤니티가 아닌 하나의 커뮤니티로 운영합니다. 지금 설정 중에만 켤 수 있습니다." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:100 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:99 msgid "Runtime utilities" msgstr "런타임 유틸리티" @@ -29103,11 +29056,6 @@ msgstr "보조 버튼이 클릭되었습니다." msgid "Secret" msgstr "비밀" -#. Label for a CAPTCHA secret key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1020 -msgid "Secret key" -msgstr "비밀 키" - #. Settings search entry label. Names the settings search entry in the settings UI. #. Short label in the secrets section. Keep it concise. Keep the tone plain and specific. #: src/features/user/components/modals/tabs/applications_tab/application_detail/SecretsSection.tsx:11 @@ -29925,7 +29873,7 @@ msgid "Set up authenticator app" msgstr "인증 앱 설정" #. Option for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:953 +#: src/features/app/components/setup/SetupWizardSteps.tsx:946 msgid "Set up later" msgstr "나중에 설정" @@ -30427,7 +30375,7 @@ msgstr "인라인 DM 목록 표시" msgid "Show just the typing indicator without avatars" msgstr "아바타 없이 입력 중 표시만 보기" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:308 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:284 msgid "Show keyboard mode intro" msgstr "키보드 모드 소개 표시" @@ -30538,7 +30486,7 @@ msgstr "네코 표시" msgid "Show new device alerts" msgstr "새 기기 알림 표시" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:282 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:264 msgid "Show new device modal" msgstr "새 기기 모달 표시" @@ -30820,7 +30768,7 @@ msgid "Signed-in devices" msgstr "로그인된 기기" #. Label for Bluesky OAuth signing key ID input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1077 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1051 msgid "Signing key ID" msgstr "서명 키 ID" @@ -30910,11 +30858,6 @@ msgstr "한 줄" msgid "Single user (all statuses)" msgstr "단일 사용자 (모든 상태)" -#. Label for a CAPTCHA site key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 -msgid "Site key" -msgstr "사이트 키" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:98 @@ -30964,7 +30907,7 @@ msgid "Skip the system leave notice — nobody gets pinged." msgstr "시스템 퇴장 알림을 건너뛰어 아무도 알림을 받지 않도록 합니다." #. Description for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:957 +#: src/features/app/components/setup/SetupWizardSteps.tsx:950 msgid "Skip this now and configure it from the admin panel." msgstr "지금 건너뛰고 관리자 패널에서 설정하세요." @@ -31212,17 +31155,17 @@ msgid "SMS verification is unavailable right now. Try again later or contact sup msgstr "지금은 SMS 인증을 이용할 수 없습니다. 나중에 다시 시도하거나 고객지원팀에 문의하세요." #. Success message after validating SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1045 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 msgid "SMTP connection verified." msgstr "SMTP 연결이 확인되었습니다." #. Label for SMTP host input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1033 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1007 msgid "SMTP host" msgstr "SMTP 호스트" #. Failure message after validating SMTP credentials when the server returns no error detail. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1049 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1023 msgid "SMTP validation failed." msgstr "SMTP 검증에 실패했습니다." @@ -31402,7 +31345,7 @@ msgstr "문제가 발생했습니다. 나중에 다시 시도해 주세요." #. Inline error in the web deep-link prompt when opening the desktop app fails. #. Toast error shown when the mature content check request fails unexpectedly. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:18 -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:580 +#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 #: src/features/auth/flow/DesktopDeepLinkPrompt.tsx:31 msgid "Something went wrong. Try again." msgstr "문제가 발생했습니다. 다시 시도해 주세요." @@ -32099,6 +32042,11 @@ msgstr "아직 색인 작업 중입니다. 잠시 후에 다시 확인해 주세 msgid "Still Neko" msgstr "네코 정지" +#. Small toast shown only when an automatic background check before sign-in, sign-up or a similar request takes more than a couple of seconds. No user action needed. Keep it short and calm. +#: src/features/auth/altcha/CaptchaInterceptor.ts:13 +msgid "Still working on it…" +msgstr "계속 작업 중입니다…" + #. Stop-recording button label in the desktop voice message composer. #: src/features/voice/components/VoiceMessageComposerModal.tsx:65 msgid "Stop" @@ -33013,7 +32961,7 @@ msgid "Terms of service" msgstr "이용약관" #. Label for Bluesky OAuth terms URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1069 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1043 msgid "Terms URL" msgstr "이용약관 URL" @@ -33023,7 +32971,7 @@ msgid "Terrorism or violent extremism" msgstr "테러 또는 폭력적 극단주의" #. Button that validates SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1041 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1015 msgid "Test SMTP" msgstr "SMTP 테스트" @@ -33800,7 +33748,7 @@ msgid "This clears quick CSS, imported themes, uploaded assets, and local file r msgstr "이 기기에서 빠른 CSS, 가져온 테마, 업로드한 에셋, 로컬 파일 참조를 지웁니다." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:83 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:82 msgid "This clears your backend premium state entirely, including premium type, billing metadata, and override flags." msgstr "프리미엄 유형, 결제 메타데이터, 재정의 플래그를 포함하여 백엔드 프리미엄 상태를 완전히 지웁니다." @@ -34200,7 +34148,7 @@ msgid "This message no longer exists." msgstr "이 메시지는 더 이상 존재하지 않습니다." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:130 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:129 msgid "This nickname will only be visible in this community" msgstr "이 닉네임은 이 커뮤니티에서만 표시됩니다" @@ -34277,12 +34225,12 @@ msgid "This removes all custom CSS overrides. Theme files in your library are no msgstr "모든 사용자 지정 CSS 재정의를 제거합니다. 라이브러리의 테마 파일은 영향을 받지 않습니다." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:50 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:49 msgid "This removes all previously authorized IP addresses on your account. The next login from any IP will require email verification." msgstr "이 작업은 이전에 승인된 모든 IP 주소를 계정에서 제거합니다. 다음 로그인 시에는 어떤 IP에서든 이메일 인증이 필요합니다." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:67 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:66 msgid "This removes all trusted domains. You will see the external link warning for all domains again." msgstr "모든 신뢰하는 도메인이 제거됩니다. 모든 도메인에 대해 외부 링크 경고가 다시 표시됩니다." @@ -34949,7 +34897,7 @@ msgstr "시스템 트레이 프로토콜은 런타임에 앱이 아이콘을 추 msgid "Trending GIFs" msgstr "인기 GIF" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:383 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:359 msgid "Trigger React crash" msgstr "React 충돌 유발" @@ -35008,7 +34956,7 @@ msgid "Trusted domains" msgstr "신뢰하는 도메인" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:55 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:54 msgid "Trusted domains cleared." msgstr "신뢰하는 도메인이 삭제되었습니다." @@ -35054,7 +35002,6 @@ msgid "Try a different variable name or clear the search." msgstr "다른 변수 이름을 사용하거나 검색을 지워주세요." #. Generic action label for retrying a failed or interrupted operation. -#: src/features/auth/components/AltchaVerification.tsx:53 #: src/features/auth/flow/AuthRouteLoadError.tsx:22 #: src/features/i18n/utils/CommonMessageDescriptors.ts:75 msgid "Try again" @@ -35132,10 +35079,6 @@ msgstr "보안 키/패스키로 시도하기" msgid "Try sending your message again." msgstr "메시지를 다시 보내보세요." -#: src/features/auth/components/modals/CaptchaModal.tsx:177 -msgid "Try Turnstile instead" -msgstr "대신 Turnstile을 시도해 보세요" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:135 msgid "TTS" @@ -36890,7 +36833,7 @@ msgid "Use this when troubleshooting the client or collecting logs. It may add v msgstr "클라이언트 문제 해결 또는 로그 수집 시 사용하세요. 현재 클라이언트에 대한 자세한 메시지가 브라우저 콘솔에 추가될 수 있습니다." #. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1037 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1011 msgid "Use TLS" msgstr "TLS 사용" @@ -37056,7 +36999,7 @@ msgstr "사용자 볼륨" #. Generic form-field label for a username. #. Label for SMTP username input. #. Settings search entry label. Also used as a search synonym in the settings search bar. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 #: src/features/i18n/utils/CommonMessageDescriptors.ts:572 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:218 #: src/features/user/components/modals/tabs/my_profile_tab/MyProfileTabUsernameSection.tsx:56 @@ -37337,11 +37280,6 @@ msgstr "전화번호 인증" msgid "Verify phone number form" msgstr "전화번호 인증 양식" -#. Short label in the authentication captcha modal. Keep the tone plain and specific. -#: src/features/auth/components/modals/CaptchaModal.tsx:17 -msgid "Verify you're human" -msgstr "사람인지 확인" - #. Title of the error modal shown when an unverified account tries to start a DM. #. Title shown when an unverified account cannot start a DM or group DM. #: src/features/app/components/alerts/DmActionErrorModal.tsx:40 @@ -37369,22 +37307,22 @@ msgid "Verify your email before adding an authenticator app." msgstr "인증 앱을 추가하기 전에 이메일을 인증하세요." #. Description text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:117 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:116 msgid "Verify your email before changing your community nickname, avatar, banner, bio, pronouns, or accent color." msgstr "커뮤니티 닉네임, 아바타, 배너, 자기소개, 대명사 또는 강조 색상을 변경하기 전에 이메일을 인증하세요." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:121 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:120 msgid "Verify your email before changing your username, display name, avatar, banner, bio, pronouns, time zone, or {premiumProductName} badge privacy." msgstr "사용자 이름, 표시 이름, 아바타, 배너, 자기소개, 대명사, 시간대 또는 {premiumProductName} 배지 공개 설정을 변경하기 전에 이메일을 인증하세요." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:85 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:84 msgid "Verify your email before editing this community profile. You can still preview it here." msgstr "커뮤니티 프로필을 수정하려면 이메일을 인증해야 합니다. 그래도 여기에서 미리 볼 수 있습니다." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:89 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:88 msgid "Verify your email before editing your profile. You can still preview it here." msgstr "프로필을 수정하려면 이메일을 인증해야 합니다. 그래도 여기에서 미리 볼 수 있습니다." @@ -37416,12 +37354,12 @@ msgid "Verify your email to continue using {productName}." msgstr "{productName}을(를) 계속 사용하려면 이메일을 인증하세요." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:109 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:108 msgid "Verify your email to edit this community profile" msgstr "커뮤니티 프로필을 수정하려면 이메일을 인증하세요" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:113 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:112 msgid "Verify your email to edit your profile" msgstr "프로필을 수정하려면 이메일을 인증하세요" @@ -38398,10 +38336,6 @@ msgstr "브라질에서 {premiumProductName} 가격을 인하했습니다. 이 msgid "We need one verification step before you continue. This helps protect accounts and keep spam off {productName}." msgstr "계속하기 전에 한 단계의 인증이 필요합니다. 이는 계정을 보호하고 {productName}에서 스팸을 방지하는 데 도움이 됩니다." -#: src/features/auth/components/modals/CaptchaModal.tsx:128 -msgid "We need to make sure you're not a bot. Complete the verification below." -msgstr "로봇이 아님을 확인해야 합니다. 아래 인증을 완료해 주세요." - #. Required-action modal intro text when both email and phone verification are required. #: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:216 msgid "We need two verification steps before you continue. We will show one step at a time." @@ -39256,7 +39190,7 @@ msgid "You can't befriend yourself" msgstr "자신을 친구로 추가할 수 없습니다" #. Label in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:134 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:133 msgid "You can't change your nickname here" msgstr "여기서는 닉네임을 변경할 수 없습니다" @@ -39506,7 +39440,7 @@ msgid "You have unsaved changes." msgstr "저장되지 않은 변경사항이 있습니다." #. Warning text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:81 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:80 msgid "You have unsaved changes. Save or reset before leaving." msgstr "저장되지 않은 변경사항이 있습니다. 나가기 전에 저장하거나 재설정하세요." @@ -40031,10 +39965,6 @@ msgstr "요청하신 작업이 안전 시스템에 감지되어 완료되지 않 msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "신청이 검토 대기 중입니다. 등록 정보를 업데이트하거나 신청을 철회할 수 있습니다." -#: src/features/auth/components/AltchaVerification.tsx:50 -msgid "Your browser couldn't finish the check." -msgstr "브라우저에서 확인을 완료할 수 없습니다." - #. Body of the browser-audio-required modal explaining why the user must click before audio can play. #: src/features/voice/components/modals/AudioPlaybackPermissionModal.tsx:12 msgid "Your browser requires user interaction before audio can be played. Click the button below to enable voice chat." @@ -40386,7 +40316,7 @@ msgid "YouTube enrichment" msgstr "YouTube 콘텐츠 연동" #. Setup wizard title for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:977 +#: src/features/app/components/setup/SetupWizardSteps.tsx:970 msgid "YouTube previews" msgstr "YouTube 미리보기" diff --git a/fluxer_app/src/features/i18n/locales/lt/messages.po b/fluxer_app/src/features/i18n/locales/lt/messages.po index a66615dfd..c9508fc91 100644 --- a/fluxer_app/src/features/i18n/locales/lt/messages.po +++ b/fluxer_app/src/features/i18n/locales/lt/messages.po @@ -2395,11 +2395,6 @@ msgstr "60 sekundžių" msgid "7 days" msgstr "7 dienos" -#. Required-action error when the API requires a captcha for phone verification. -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 -msgid "A browser check is required before phone verification. Try again from the sign-in page or contact support." -msgstr "Prieš patvirtinant telefono numerį, reikalingas naršyklės patikrinimas. Bandykite dar kartą prisijungimo puslapyje arba susisiekite su palaikymo komanda." - #. Hint shown beside in:. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:77 msgid "a channel" @@ -2928,7 +2923,7 @@ msgid "Add a friend to get started." msgstr "Pridėkite draugą, kad pradėtumėte." #. Setup wizard body for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:973 +#: src/features/app/components/setup/SetupWizardSteps.tsx:966 msgid "Add a Klipy API key to enable GIF search at runtime." msgstr "Pridėkite Klipy API raktą, kad įjungtumėte GIF paiešką vykdymo metu." @@ -2965,7 +2960,7 @@ msgid "Add a working email" msgstr "Pridėkite veikiantį el. pašto adresą" #. Setup wizard body for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:981 +#: src/features/app/components/setup/SetupWizardSteps.tsx:974 msgid "Add a YouTube Data API key to enrich YouTube links." msgstr "Pridėkite YouTube Data API raktą, kad praturtintumėte YouTube nuorodas." @@ -3011,7 +3006,7 @@ msgid "Add another reaction" msgstr "Pridėti kitą reakciją" #. Setup wizard body for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1005 +#: src/features/app/components/setup/SetupWizardSteps.tsx:990 msgid "Add Bluesky OAuth client metadata and a signing key." msgstr "Pridėkite Bluesky OAuth kliento metaduomenis ir pasirašymo raktą." @@ -3161,7 +3156,7 @@ msgid "Add shortcut" msgstr "Pridėti spartųjį klavišą" #. Setup wizard body for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:997 +#: src/features/app/components/setup/SetupWizardSteps.tsx:982 msgid "Add SMTP credentials so the instance can send verification and notification email." msgstr "Pridėkite SMTP kredencialus, kad instancija galėtų siųsti patvirtinimo ir pranešimų el. laiškus." @@ -3188,7 +3183,7 @@ msgid "Add stream" msgstr "Pridėti srautą" #. Description for configuring an optional setup wizard integration now. -#: src/features/app/components/setup/SetupWizardSteps.tsx:965 +#: src/features/app/components/setup/SetupWizardSteps.tsx:958 msgid "Add the credentials during setup." msgstr "Pridėkite kredencialus sąrankos metu." @@ -3954,7 +3949,7 @@ msgid "An invalid status was provided. You can now close this tab and return to msgstr "Pateikta netinkama būsena. Dabar galite uždaryti šį skirtuką ir grįžti į programėlę." #. Short label in the authentication auth form. Keep the tone plain and specific. -#: src/features/auth/hooks/useAuthForm.ts:13 +#: src/features/auth/hooks/useAuthForm.ts:12 msgid "An unexpected error occurred" msgstr "Įvyko netikėta klaida" @@ -4262,7 +4257,7 @@ msgid "Anyone can request an account, but an administrator must approve it." msgstr "Visi gali paprašyti paskyros, bet administratorius turi ją patvirtinti." #. Label for an integration API key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1018 +#: src/features/app/components/setup/SetupWizardSteps.tsx:994 msgid "API key" msgstr "API raktas" @@ -4958,7 +4953,7 @@ msgid "Authorized apps" msgstr "Įgaliotosios programos" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:38 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:37 msgid "Authorized IPs cleared. New logins will require email verification." msgstr "Įgaliotieji IP išvalyti. Naujiems prisijungimams reikės el. pašto patvirtinimo." @@ -5730,7 +5725,7 @@ msgid "Bluesky connections" msgstr "„Bluesky“ ryšiai" #. Setup wizard title for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1001 +#: src/features/app/components/setup/SetupWizardSteps.tsx:986 msgid "Bluesky OAuth" msgstr "„Bluesky“ OAuth" @@ -5897,11 +5892,6 @@ msgstr "Boto leidimai negali būti neigiami." msgid "Bot profile" msgstr "Boto profilis" -#. Setup wizard title for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:985 -msgid "Bot protection" -msgstr "Apsauga nuo botų" - #. Short label in the authentication OAUTH scopes step. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/OAuthScopesStep.tsx:20 msgid "Bot scope requested" @@ -6554,11 +6544,6 @@ msgstr "Negalima redaguoti" msgid "Cannot delete account" msgstr "Negalima ištrinti paskyros" -#. Toast error shown when captcha verification fails inside the auth captcha interceptor. -#: src/features/auth/components/CaptchaInterceptor.tsx:15 -msgid "Captcha verification failed. Try again." -msgstr "Nepavyko patvirtinti „Captcha“. Bandykite dar kartą." - #. Section header in the Linux audio source picker. Lists capture-target options (entire system / specific apps). #: src/features/voice/components/AudioSourcePickerLinux.tsx:50 msgid "Capture" @@ -7398,10 +7383,6 @@ msgstr "Tikrinama prieiga..." msgid "Checking screen recording permission..." msgstr "Tikrinamas ekrano įrašymo leidimas…" -#: src/features/auth/components/AltchaVerification.tsx:62 -msgid "Checking your browser. This takes a few seconds." -msgstr "Tikrinamas jūsų naršyklė. Tai užtruks kelias sekundes." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -7571,11 +7552,6 @@ msgstr "Pasirinkite Failas, tada Pridėti prie Dock." msgid "Choose friends to message." msgstr "Pasirinkite draugus, kuriems norite parašyti." -#. Setup wizard body for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:989 -msgid "Choose hCaptcha or Cloudflare Turnstile for signup challenges." -msgstr "Pasirinkite hCaptcha arba Cloudflare Turnstile registracijos patikroms." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:455 msgid "Choose how chat moves after you send a message" @@ -7982,17 +7958,17 @@ msgid "Clear selection" msgstr "Išvalyti pasirinkimą" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:88 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:87 msgid "Clear trust all setting" msgstr "Išvalyti nustatymą „pasitikėti visais“" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:63 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:62 msgid "Clear trusted domains" msgstr "Išvalyti patikimus domenus" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:96 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:95 msgid "Clear trusted domains ({trustedDomainsCount})" msgstr "Išvalyti patikimus domenus ({trustedDomainsCount})" @@ -8002,7 +7978,7 @@ msgid "Clearer text" msgstr "Aiškesnis tekstas" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:108 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:107 msgid "Clearing trusted domains..." msgstr "Valomi patikimi domenai..." @@ -8100,7 +8076,7 @@ msgid "Client" msgstr "Klientas" #. Label for Bluesky OAuth client name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1057 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1031 msgid "Client name" msgstr "Kliento pavadinimas" @@ -8117,7 +8093,7 @@ msgid "Client secret regenerated. Update any code that uses the old secret." msgstr "Kliento paslaptis sugeneruota iš naujo. Atnaujinkite visą kodą, kuriame naudojama senoji paslaptis." #. Label for Bluesky OAuth client URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1061 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 msgid "Client URL" msgstr "Kliento URL" @@ -8269,11 +8245,6 @@ msgstr "Uždaryti DM pokalbiai" msgid "Cloud upload" msgstr "Įkelti į debesį" -#. Cloudflare Turnstile provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1014 -msgid "Cloudflare Turnstile" -msgstr "„Cloudflare Turnstile“" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:58 msgid "Coal" @@ -8669,7 +8640,7 @@ msgstr "Bendruomenės pavadinimas" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:126 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:125 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:113 msgid "Community nickname" msgstr "Bendruomenės slapyvardis" @@ -8722,7 +8693,7 @@ msgid "Community profile" msgstr "Bendruomenės profilis" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:73 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:72 msgid "Community profile updated" msgstr "Bendruomenės profilis atnaujintas" @@ -8880,7 +8851,7 @@ msgid "Configure keyboard shortcuts" msgstr "Konfigūruoti sparčiuosius klavišus" #. Option for configuring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:961 +#: src/features/app/components/setup/SetupWizardSteps.tsx:954 msgid "Configure now" msgstr "Konfigūruoti dabar" @@ -12341,7 +12312,7 @@ msgstr "Atsijungti nuo „{channel}“" msgid "Disconnect from voice" msgstr "Atsijungti nuo balso pokalbio" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:261 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:243 msgid "Disconnect socket" msgstr "Atjungti lizdą" @@ -12479,7 +12450,7 @@ msgstr "Rodymo režimas" #. Short label in the inputs tab. Keep it concise. #. Short label in the my profile tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:22 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:138 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:137 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:61 msgid "Display name" msgstr "Rodomasis vardas" @@ -12625,7 +12596,7 @@ msgstr "Ar norite prisijungti prie {communityName}?" #. Label in the accessibility tab. #. Label in the my profile tab. #: src/features/user/components/modals/tabs/AccessibilityTab.tsx:54 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:146 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:145 msgid "Doc, I'm from the future. I came here in a time machine that you invented. Now, I need your help to get back to the year 1985." msgstr "Daktare, aš iš ateities. Atkeliavau čia jūsų išrastu laiko aparatu. Dabar man reikia jūsų pagalbos, kad grįžčiau į 1985 metus." @@ -13262,7 +13233,7 @@ msgid "Edit your messages above or below" msgstr "Redaguoti savo žinutes aukščiau arba žemiau" #. Button or menu action label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:93 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:92 msgid "Edit your profile appearance and see a live preview" msgstr "Redaguokite profilio išvaizdą ir matykite tiesioginę peržiūrą" @@ -13330,7 +13301,7 @@ msgid "Email changed" msgstr "El. paštas pakeistas" #. Setup wizard title for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:993 +#: src/features/app/components/setup/SetupWizardSteps.tsx:978 msgid "Email delivery" msgstr "El. laiškų pristatymas" @@ -13635,7 +13606,7 @@ msgid "Enable beta feature" msgstr "Įjungti beta funkciją" #. Label for enabling Bluesky OAuth in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1053 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1027 msgid "Enable Bluesky OAuth" msgstr "Įjungti „Bluesky“ OAuth" @@ -13668,7 +13639,7 @@ msgid "Enable developer mode" msgstr "Įjungti kūrėjo režimą" #. Label for enabling SMTP email delivery in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1021 +#: src/features/app/components/setup/SetupWizardSteps.tsx:995 msgid "Enable email delivery" msgstr "Įjungti el. laiškų siuntimą" @@ -14705,7 +14676,7 @@ msgid "Failed to ban member. Try again." msgstr "Nepavyko užblokuoti nario. Bandykite dar kartą." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:59 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:58 msgid "Failed to clear trusted domains." msgstr "Nepavyko išvalyti patikimų domenų." @@ -14762,7 +14733,7 @@ msgid "Failed to enable camera." msgstr "Nepavyko įjungti kameros." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:42 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:41 msgid "Failed to forget authorized IPs. Try again." msgstr "Nepavyko pamiršti įgaliotųjų IP adresų. Bandykite dar kartą." @@ -14907,7 +14878,7 @@ msgid "Failed to resend verification code. Try again later." msgstr "Nepavyko iš naujo išsiųsti patvirtinimo kodo. Bandykite dar kartą vėliau." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:75 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:74 msgid "Failed to reset premium state." msgstr "Nepavyko iš naujo nustatyti „Premium“ būsenos." @@ -15581,7 +15552,7 @@ msgstr "Priverstinai rodyti įkėlimo karkasą" msgid "Force mature media" msgstr "Priverstinai rodyti brandžią mediją" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:276 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:258 msgid "Force move to AFK channel" msgstr "Priverstinai perkelti į AFK kanalą" @@ -15640,7 +15611,7 @@ msgid "Forced off" msgstr "Išjungta priverstinai" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:46 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:45 msgid "Forget authorized IPs" msgstr "Pamiršti įgaliotuosius IP adresus" @@ -15650,7 +15621,7 @@ msgid "Forget subscriptions" msgstr "Pamiršti prenumeratas" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:104 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:103 msgid "Forgetting authorized IPs..." msgstr "Pamirštami įgaliotieji IP adresai..." @@ -15907,12 +15878,12 @@ msgid "from <0>{0}" msgstr "iš <0>{0}" #. Label for SMTP from email input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1025 +#: src/features/app/components/setup/SetupWizardSteps.tsx:999 msgid "From email" msgstr "Siuntėjo el. paštas" #. Label for SMTP from name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1029 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1003 msgid "From name" msgstr "Siuntėjo vardas" @@ -16204,7 +16175,7 @@ msgid "GIF preview" msgstr "GIF peržiūra" #. Setup wizard title for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:969 +#: src/features/app/components/setup/SetupWizardSteps.tsx:962 msgid "GIF search" msgstr "GIF paieška" @@ -16853,21 +16824,12 @@ msgstr "Turite dovanų kodą? Aktyvuokite jį, kad atrakintumėte {PREMIUM_PRODU msgid "Having fun?" msgstr "Gerai leidžiate laiką?" -#: src/features/auth/components/modals/CaptchaModal.tsx:175 -msgid "Having issues? Try hCaptcha instead" -msgstr "Kyla problemų? Išbandykite „hCaptcha“" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:63 msgctxt "us-state" msgid "Hawaii" msgstr "Havajai" -#. hCaptcha provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1013 -msgid "hCaptcha" -msgstr "„hCaptcha“" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:238 msgid "HD" @@ -19768,7 +19730,7 @@ msgid "Logo" msgstr "Logotipas" #. Label for Bluesky OAuth logo URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1065 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1039 msgid "Logo URL" msgstr "Logotipo URL" @@ -22941,7 +22903,7 @@ msgid "No tokens match \"{searchQuery}\"." msgstr "Nėra žetonų, atitinkančių „{searchQuery}“." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:92 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:91 msgid "No trusted domains" msgstr "Nėra patikimų domenų" @@ -23696,10 +23658,6 @@ msgstr "Atidaryti naršyklės parinkiklį" msgid "Open call view" msgstr "Atidaryti skambučio rodinį" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:288 -msgid "Open captcha modal" -msgstr "Atidaryti „Captcha“ modalinį langą" - #. Accessible label for the channel header title button in a community channel. #: src/features/channel/components/channel_header/shared.ts:14 msgid "Open channel details for {channelName}" @@ -23712,7 +23670,7 @@ msgstr "Atidaryti kanalo „{channelName}“ išsamią informaciją" msgid "Open chat" msgstr "Atidaryti pokalbį" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:314 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:290 msgid "Open claim account modal" msgstr "Atidaryti paskyros registravimo modalinį langą" @@ -23944,11 +23902,11 @@ msgstr "Atidaryti lipduką naršyklėje" msgid "Open streaming privacy settings" msgstr "Atidaryti srautinio perdavimo privatumo nustatymus" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:327 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:303 msgid "Open sudo verification modal" msgstr "Atidaryti „sudo“ patvirtinimo modalinį langą" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:342 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:318 msgid "Open system DM" msgstr "Atidaryti sistemos DM" @@ -24430,7 +24388,7 @@ msgstr "Norint naudoti prieigos raktus, reikalingas pasirašytas „macOS“ pak #. Generic form-field label for a password. #. Label for SMTP password input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1036 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1010 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:146 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:183 @@ -25212,7 +25170,7 @@ msgid "Popup" msgstr "Iššokantis langas" #. Label for SMTP port input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1034 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1008 msgid "Port" msgstr "Prievadas" @@ -25338,7 +25296,7 @@ msgid "Premium since date" msgstr "„Premium“ narystė nuo datos" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:71 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:70 msgid "Premium state reset on the backend." msgstr "Premium būsena serveryje nustatyta iš naujo." @@ -25608,7 +25566,7 @@ msgid "Privacy settings" msgstr "Privatumo nustatymai" #. Label for Bluesky OAuth privacy URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1073 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1047 msgid "Privacy URL" msgstr "Privatumo URL" @@ -25633,7 +25591,7 @@ msgid "Private details" msgstr "Privatūs duomenys" #. Label for Bluesky OAuth private key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1081 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1055 msgid "Private key" msgstr "Privatusis raktas" @@ -25699,18 +25657,18 @@ msgstr "Profilio spalva" #. Settings section label for editing profile appearance and identity. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:105 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:104 #: src/features/user/components/settings_utils/section_registry/GeneralSettingsSections.ts:6 msgid "Profile customization" msgstr "Profilio tinkinimas" #. Label in the my profile tab. Preserve {selectedGuildName}; it is inserted by code. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:101 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:100 msgid "Profile customization for {selectedGuildName}" msgstr "Profilio tinkinimas bendruomenėje {selectedGuildName}" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:97 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:96 msgid "Profile customization form" msgstr "Profilio tinkinimo forma" @@ -25775,7 +25733,7 @@ msgid "Profile type" msgstr "Profilio tipas" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:77 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:76 msgid "Profile updated" msgstr "Profilis atnaujintas" @@ -25812,7 +25770,7 @@ msgstr "Klausti prijungus naują garso įrenginį" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:142 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:141 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:177 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:160 msgid "Pronouns" @@ -25842,11 +25800,6 @@ msgstr "Nurodykite asmens, apie kurį pranešate, naudotojo ID arba naudotojo va msgid "Provide your full legal name for the declaration." msgstr "Nurodykite savo vardą ir pavardę deklaracijai." -#. Label for an integration provider choice. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 -msgid "Provider" -msgstr "Paslaugos teikėjas" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27626,7 +27579,7 @@ msgid "Reset password" msgstr "Atkurti slaptažodį" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:79 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:78 msgid "Reset premium state" msgstr "Iš naujo nustatyti „Premium“ būseną" @@ -27635,7 +27588,7 @@ msgstr "Iš naujo nustatyti „Premium“ būseną" msgid "Reset slider to default value" msgstr "Grąžinti slankiklį į numatytąją reikšmę" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:247 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:229 msgid "Reset socket" msgstr "Iš naujo nustatyti lizdą" @@ -27684,7 +27637,7 @@ msgid "Reset zoom" msgstr "Atkurti mastelį" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:112 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:111 msgid "Resetting premium state..." msgstr "Iš naujo nustatoma „Premium“ būsena..." @@ -28315,7 +28268,7 @@ msgid "Run the instance as one community instead of many. This can only be enabl msgstr "Naudokite instanciją kaip vieną bendruomenę, o ne kaip kelias. Tai galima įjungti tik dabar, sąrankos metu." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:100 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:99 msgid "Runtime utilities" msgstr "Vykdymo meto įrankiai" @@ -29103,11 +29056,6 @@ msgstr "Paspaustas antrinis mygtukas." msgid "Secret" msgstr "Paslaptis" -#. Label for a CAPTCHA secret key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1020 -msgid "Secret key" -msgstr "Slaptasis raktas" - #. Settings search entry label. Names the settings search entry in the settings UI. #. Short label in the secrets section. Keep it concise. Keep the tone plain and specific. #: src/features/user/components/modals/tabs/applications_tab/application_detail/SecretsSection.tsx:11 @@ -29925,7 +29873,7 @@ msgid "Set up authenticator app" msgstr "Nustatyti autentifikavimo programėlę" #. Option for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:953 +#: src/features/app/components/setup/SetupWizardSteps.tsx:946 msgid "Set up later" msgstr "Nustatyti vėliau" @@ -30427,7 +30375,7 @@ msgstr "Rodyti tiesioginių žinučių sąrašą" msgid "Show just the typing indicator without avatars" msgstr "Rodyti tik rašymo indikatorių be avatarų" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:308 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:284 msgid "Show keyboard mode intro" msgstr "Rodyti klaviatūros režimo įvadą" @@ -30538,7 +30486,7 @@ msgstr "Rodyti Neko" msgid "Show new device alerts" msgstr "Rodyti naujų įrenginių įspėjimus" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:282 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:264 msgid "Show new device modal" msgstr "Rodyti naujo įrenginio modalinį langą" @@ -30820,7 +30768,7 @@ msgid "Signed-in devices" msgstr "Prisijungę įrenginiai" #. Label for Bluesky OAuth signing key ID input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1077 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1051 msgid "Signing key ID" msgstr "Pasirašymo rakto ID" @@ -30910,11 +30858,6 @@ msgstr "Viena eilutė" msgid "Single user (all statuses)" msgstr "Vienas naudotojas (visos būsenos)" -#. Label for a CAPTCHA site key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 -msgid "Site key" -msgstr "Svetainės raktas" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:98 @@ -30964,7 +30907,7 @@ msgid "Skip the system leave notice — nobody gets pinged." msgstr "Praleisti sisteminę žinutę apie išėjimą. Niekas nebus informuotas." #. Description for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:957 +#: src/features/app/components/setup/SetupWizardSteps.tsx:950 msgid "Skip this now and configure it from the admin panel." msgstr "Praleisti dabar ir sukonfigūruoti administratoriaus skydelyje." @@ -31212,17 +31155,17 @@ msgid "SMS verification is unavailable right now. Try again later or contact sup msgstr "Šiuo metu SMS patvirtinimas nepasiekiamas. Bandykite dar kartą vėliau arba susisiekite su palaikymo komanda." #. Success message after validating SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1045 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 msgid "SMTP connection verified." msgstr "SMTP ryšys patikrintas." #. Label for SMTP host input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1033 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1007 msgid "SMTP host" msgstr "SMTP serveris" #. Failure message after validating SMTP credentials when the server returns no error detail. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1049 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1023 msgid "SMTP validation failed." msgstr "SMTP patikrinti nepavyko." @@ -31402,7 +31345,7 @@ msgstr "Kažkas nepavyko. Bandykite dar kartą vėliau." #. Inline error in the web deep-link prompt when opening the desktop app fails. #. Toast error shown when the mature content check request fails unexpectedly. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:18 -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:580 +#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 #: src/features/auth/flow/DesktopDeepLinkPrompt.tsx:31 msgid "Something went wrong. Try again." msgstr "Kažkas nepavyko. Bandykite dar kartą." @@ -32099,6 +32042,11 @@ msgstr "Vis dar indeksuojama – patikrinkite po akimirkos" msgid "Still Neko" msgstr "Nejudantis Neko" +#. Small toast shown only when an automatic background check before sign-in, sign-up or a similar request takes more than a couple of seconds. No user action needed. Keep it short and calm. +#: src/features/auth/altcha/CaptchaInterceptor.ts:13 +msgid "Still working on it…" +msgstr "Vis dar dirbama…" + #. Stop-recording button label in the desktop voice message composer. #: src/features/voice/components/VoiceMessageComposerModal.tsx:65 msgid "Stop" @@ -33013,7 +32961,7 @@ msgid "Terms of service" msgstr "Paslaugų teikimo sąlygos" #. Label for Bluesky OAuth terms URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1069 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1043 msgid "Terms URL" msgstr "Sąlygų URL" @@ -33023,7 +32971,7 @@ msgid "Terrorism or violent extremism" msgstr "Terorizmas arba smurtinis ekstremizmas" #. Button that validates SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1041 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1015 msgid "Test SMTP" msgstr "Išbandyti SMTP" @@ -33800,7 +33748,7 @@ msgid "This clears quick CSS, imported themes, uploaded assets, and local file r msgstr "Tai išvalo sparčiuosius CSS, importuotas temas, įkeltus išteklius ir vietinių failų nuorodas šiame įrenginyje." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:83 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:82 msgid "This clears your backend premium state entirely, including premium type, billing metadata, and override flags." msgstr "Tai visiškai išvalo jūsų premium būseną serveryje, įskaitant premium tipą, atsiskaitymo metaduomenis ir nepaisymo vėliavėles." @@ -34200,7 +34148,7 @@ msgid "This message no longer exists." msgstr "Šios žinutės nebėra." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:130 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:129 msgid "This nickname will only be visible in this community" msgstr "Šis slapyvardis bus matomas tik šioje bendruomenėje" @@ -34277,12 +34225,12 @@ msgid "This removes all custom CSS overrides. Theme files in your library are no msgstr "Taip pašalinsite visus pasirinktinius CSS pakeitimus. Jūsų bibliotekos temų failai nebus paveikti." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:50 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:49 msgid "This removes all previously authorized IP addresses on your account. The next login from any IP will require email verification." msgstr "Tai pašalina visus anksčiau autorizuotus IP adresus jūsų paskyroje. Kitas prisijungimas iš bet kurio IP reikalaus el. pašto patvirtinimo." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:67 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:66 msgid "This removes all trusted domains. You will see the external link warning for all domains again." msgstr "Tai pašalina visus patikimus domenus. Vėl matysite išorinės nuorodos įspėjimą visiems domenams." @@ -34949,7 +34897,7 @@ msgstr "Dėklo piktogramos pakeitimai „Linux“ sistemoje įsigalioja tik iš msgid "Trending GIFs" msgstr "Populiarūs GIF" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:383 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:359 msgid "Trigger React crash" msgstr "Sukelti „React“ strigtį" @@ -35008,7 +34956,7 @@ msgid "Trusted domains" msgstr "Patikimi domenai" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:55 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:54 msgid "Trusted domains cleared." msgstr "Patikimi domenai išvalyti." @@ -35054,7 +35002,6 @@ msgid "Try a different variable name or clear the search." msgstr "Pabandykite kitą kintamojo pavadinimą arba išvalykite paiešką." #. Generic action label for retrying a failed or interrupted operation. -#: src/features/auth/components/AltchaVerification.tsx:53 #: src/features/auth/flow/AuthRouteLoadError.tsx:22 #: src/features/i18n/utils/CommonMessageDescriptors.ts:75 msgid "Try again" @@ -35132,10 +35079,6 @@ msgstr "Vietoj to naudokite saugos raktą / prieigos raktą" msgid "Try sending your message again." msgstr "Bandyti siųsti žinutę dar kartą." -#: src/features/auth/components/modals/CaptchaModal.tsx:177 -msgid "Try Turnstile instead" -msgstr "Vietoj to išbandykite „Turnstile“" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:135 msgid "TTS" @@ -36890,7 +36833,7 @@ msgid "Use this when troubleshooting the client or collecting logs. It may add v msgstr "Naudokite tai, kai šalinate kliento triktis arba renkate žurnalus. Tai gali pridėti išsamių pranešimų į naršyklės konsolę dabartiniam klientui." #. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1037 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1011 msgid "Use TLS" msgstr "Naudoti TLS" @@ -37056,7 +36999,7 @@ msgstr "Naudotojo garsumas" #. Generic form-field label for a username. #. Label for SMTP username input. #. Settings search entry label. Also used as a search synonym in the settings search bar. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 #: src/features/i18n/utils/CommonMessageDescriptors.ts:572 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:218 #: src/features/user/components/modals/tabs/my_profile_tab/MyProfileTabUsernameSection.tsx:56 @@ -37337,11 +37280,6 @@ msgstr "Patvirtinti telefono numerį" msgid "Verify phone number form" msgstr "Telefono numerio patvirtinimo forma" -#. Short label in the authentication captcha modal. Keep the tone plain and specific. -#: src/features/auth/components/modals/CaptchaModal.tsx:17 -msgid "Verify you're human" -msgstr "Patvirtinkite, kad esate žmogus" - #. Title of the error modal shown when an unverified account tries to start a DM. #. Title shown when an unverified account cannot start a DM or group DM. #: src/features/app/components/alerts/DmActionErrorModal.tsx:40 @@ -37369,22 +37307,22 @@ msgid "Verify your email before adding an authenticator app." msgstr "Prieš pridėdami autentifikavimo programėlę, patvirtinkite savo el. paštą." #. Description text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:117 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:116 msgid "Verify your email before changing your community nickname, avatar, banner, bio, pronouns, or accent color." msgstr "Patvirtinkite savo el. paštą prieš keisdami bendruomenės slapyvardį, avatarą, reklamjuostę, biografiją, įvardžius ar akcento spalvą." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:121 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:120 msgid "Verify your email before changing your username, display name, avatar, banner, bio, pronouns, time zone, or {premiumProductName} badge privacy." msgstr "Patvirtinkite savo el. paštą prieš keisdami naudotojo vardą, rodomą vardą, avatarą, reklamjuostę, biografiją, įvardžius, laiko juostą arba {premiumProductName} ženkliuko privatumą." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:85 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:84 msgid "Verify your email before editing this community profile. You can still preview it here." msgstr "Patvirtinkite savo el. paštą prieš redaguodami šį bendruomenės profilį. Vis tiek galite jį peržiūrėti čia." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:89 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:88 msgid "Verify your email before editing your profile. You can still preview it here." msgstr "Prieš redaguodami profilį, patvirtinkite savo el. paštą. Vis tiek galite jį peržiūrėti čia." @@ -37416,12 +37354,12 @@ msgid "Verify your email to continue using {productName}." msgstr "Patvirtinkite savo el. paštą, kad galėtumėte toliau naudotis {productName}." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:109 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:108 msgid "Verify your email to edit this community profile" msgstr "Patvirtinkite el. paštą, kad galėtumėte redaguoti šį bendruomenės profilį" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:113 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:112 msgid "Verify your email to edit your profile" msgstr "Patvirtinkite el. paštą, kad galėtumėte redaguoti profilį" @@ -38398,10 +38336,6 @@ msgstr "Brazilyje sumažinome {premiumProductName} kainą. Dabar ji kainuoja {mo msgid "We need one verification step before you continue. This helps protect accounts and keep spam off {productName}." msgstr "Prieš tęsiant, reikalingas vienas patvirtinimo veiksmas. Tai padeda apsaugoti paskyras ir saugo „{productName}“ nuo brukalų." -#: src/features/auth/components/modals/CaptchaModal.tsx:128 -msgid "We need to make sure you're not a bot. Complete the verification below." -msgstr "Turime įsitikinti, kad nesate botas. Užpildykite patvirtinimą žemiau." - #. Required-action modal intro text when both email and phone verification are required. #: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:216 msgid "We need two verification steps before you continue. We will show one step at a time." @@ -39256,7 +39190,7 @@ msgid "You can't befriend yourself" msgstr "Negalite draugauti su savimi" #. Label in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:134 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:133 msgid "You can't change your nickname here" msgstr "Čia negalite pakeisti savo slapyvardžio" @@ -39506,7 +39440,7 @@ msgid "You have unsaved changes." msgstr "Turite neišsaugotų pakeitimų." #. Warning text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:81 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:80 msgid "You have unsaved changes. Save or reset before leaving." msgstr "Turite neišsaugotų pakeitimų. Prieš išeidami išsaugokite arba atkurkite." @@ -40031,10 +39965,6 @@ msgstr "Jūsų veiksmas negalėjo būti atliktas, nes jį pažymėjo mūsų saug msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Jūsų paraiška laukia peržiūros. Vis dar galite atnaujinti savo įrašo informaciją arba atšaukti paraišką." -#: src/features/auth/components/AltchaVerification.tsx:50 -msgid "Your browser couldn't finish the check." -msgstr "Jūsų naršyklė negalėjo užbaigti patikrinimo." - #. Body of the browser-audio-required modal explaining why the user must click before audio can play. #: src/features/voice/components/modals/AudioPlaybackPermissionModal.tsx:12 msgid "Your browser requires user interaction before audio can be played. Click the button below to enable voice chat." @@ -40386,7 +40316,7 @@ msgid "YouTube enrichment" msgstr "„YouTube“ turinio papildymas" #. Setup wizard title for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:977 +#: src/features/app/components/setup/SetupWizardSteps.tsx:970 msgid "YouTube previews" msgstr "„YouTube“ peržiūros" diff --git a/fluxer_app/src/features/i18n/locales/nl/messages.po b/fluxer_app/src/features/i18n/locales/nl/messages.po index 693472e3e..39554f7b0 100644 --- a/fluxer_app/src/features/i18n/locales/nl/messages.po +++ b/fluxer_app/src/features/i18n/locales/nl/messages.po @@ -2395,11 +2395,6 @@ msgstr "60 seconden" msgid "7 days" msgstr "7 dagen" -#. Required-action error when the API requires a captcha for phone verification. -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 -msgid "A browser check is required before phone verification. Try again from the sign-in page or contact support." -msgstr "Voordat je je telefoonnummer kunt verifiëren, is een browsercontrole vereist. Probeer het opnieuw vanaf de inlogpagina of neem contact op met support." - #. Hint shown beside in:. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:77 msgid "a channel" @@ -2928,7 +2923,7 @@ msgid "Add a friend to get started." msgstr "Voeg een vriend toe om te beginnen." #. Setup wizard body for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:973 +#: src/features/app/components/setup/SetupWizardSteps.tsx:966 msgid "Add a Klipy API key to enable GIF search at runtime." msgstr "Voeg een Klipy-API-sleutel toe om zoeken naar GIF’s tijdens runtime in te schakelen." @@ -2965,7 +2960,7 @@ msgid "Add a working email" msgstr "Voeg een werkend e-mailadres toe" #. Setup wizard body for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:981 +#: src/features/app/components/setup/SetupWizardSteps.tsx:974 msgid "Add a YouTube Data API key to enrich YouTube links." msgstr "Voeg een YouTube Data API-sleutel toe om YouTube-links te verrijken." @@ -3011,7 +3006,7 @@ msgid "Add another reaction" msgstr "Nog een reactie toevoegen" #. Setup wizard body for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1005 +#: src/features/app/components/setup/SetupWizardSteps.tsx:990 msgid "Add Bluesky OAuth client metadata and a signing key." msgstr "Voeg Bluesky OAuth-clientmetadata en een ondertekensleutel toe." @@ -3161,7 +3156,7 @@ msgid "Add shortcut" msgstr "Sneltoets toevoegen" #. Setup wizard body for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:997 +#: src/features/app/components/setup/SetupWizardSteps.tsx:982 msgid "Add SMTP credentials so the instance can send verification and notification email." msgstr "Voeg SMTP-gegevens toe, zodat de instantie verificatie- en notificatiemail kan verzenden." @@ -3188,7 +3183,7 @@ msgid "Add stream" msgstr "Stream toevoegen" #. Description for configuring an optional setup wizard integration now. -#: src/features/app/components/setup/SetupWizardSteps.tsx:965 +#: src/features/app/components/setup/SetupWizardSteps.tsx:958 msgid "Add the credentials during setup." msgstr "Voeg de toegangsgegevens toe tijdens de installatie." @@ -3954,7 +3949,7 @@ msgid "An invalid status was provided. You can now close this tab and return to msgstr "Er is een ongeldige status opgegeven. Je kunt dit tabblad nu sluiten en teruggaan naar de app." #. Short label in the authentication auth form. Keep the tone plain and specific. -#: src/features/auth/hooks/useAuthForm.ts:13 +#: src/features/auth/hooks/useAuthForm.ts:12 msgid "An unexpected error occurred" msgstr "Er is een onverwachte fout opgetreden" @@ -4262,7 +4257,7 @@ msgid "Anyone can request an account, but an administrator must approve it." msgstr "Iedereen kan een account aanvragen, maar een beheerder moet het goedkeuren." #. Label for an integration API key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1018 +#: src/features/app/components/setup/SetupWizardSteps.tsx:994 msgid "API key" msgstr "API-sleutel" @@ -4958,7 +4953,7 @@ msgid "Authorized apps" msgstr "Geautoriseerde apps" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:38 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:37 msgid "Authorized IPs cleared. New logins will require email verification." msgstr "Geautoriseerde IP-adressen gewist. Bij nieuwe aanmeldingen is e-mailverificatie vereist." @@ -5730,7 +5725,7 @@ msgid "Bluesky connections" msgstr "Bluesky-verbindingen" #. Setup wizard title for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1001 +#: src/features/app/components/setup/SetupWizardSteps.tsx:986 msgid "Bluesky OAuth" msgstr "Bluesky OAuth" @@ -5897,11 +5892,6 @@ msgstr "Botmachtigingen kunnen niet negatief zijn." msgid "Bot profile" msgstr "Botprofiel" -#. Setup wizard title for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:985 -msgid "Bot protection" -msgstr "Botbescherming" - #. Short label in the authentication OAUTH scopes step. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/OAuthScopesStep.tsx:20 msgid "Bot scope requested" @@ -6554,11 +6544,6 @@ msgstr "Kan niet worden bewerkt" msgid "Cannot delete account" msgstr "Account kan niet worden verwijderd" -#. Toast error shown when captcha verification fails inside the auth captcha interceptor. -#: src/features/auth/components/CaptchaInterceptor.tsx:15 -msgid "Captcha verification failed. Try again." -msgstr "Captcha-verificatie mislukt. Probeer het opnieuw." - #. Section header in the Linux audio source picker. Lists capture-target options (entire system / specific apps). #: src/features/voice/components/AudioSourcePickerLinux.tsx:50 msgid "Capture" @@ -7398,10 +7383,6 @@ msgstr "Toegang controleren..." msgid "Checking screen recording permission..." msgstr "Toestemming voor schermopname controleren..." -#: src/features/auth/components/AltchaVerification.tsx:62 -msgid "Checking your browser. This takes a few seconds." -msgstr "Je browser wordt gecontroleerd. Dit duurt een paar seconden." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -7571,11 +7552,6 @@ msgstr "Kies Archief en vervolgens Voeg toe aan Dock." msgid "Choose friends to message." msgstr "Kies vrienden aan wie je een bericht wilt sturen." -#. Setup wizard body for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:989 -msgid "Choose hCaptcha or Cloudflare Turnstile for signup challenges." -msgstr "Kies hCaptcha of Cloudflare Turnstile voor verificatie bij registratie." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:455 msgid "Choose how chat moves after you send a message" @@ -7982,17 +7958,17 @@ msgid "Clear selection" msgstr "Selectie wissen" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:88 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:87 msgid "Clear trust all setting" msgstr "Instelling 'alles vertrouwen' wissen" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:63 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:62 msgid "Clear trusted domains" msgstr "Vertrouwde domeinen wissen" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:96 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:95 msgid "Clear trusted domains ({trustedDomainsCount})" msgstr "Vertrouwde domeinen wissen ({trustedDomainsCount})" @@ -8002,7 +7978,7 @@ msgid "Clearer text" msgstr "Duidelijkere tekst" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:108 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:107 msgid "Clearing trusted domains..." msgstr "Vertrouwde domeinen wissen..." @@ -8100,7 +8076,7 @@ msgid "Client" msgstr "Client" #. Label for Bluesky OAuth client name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1057 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1031 msgid "Client name" msgstr "Clientnaam" @@ -8117,7 +8093,7 @@ msgid "Client secret regenerated. Update any code that uses the old secret." msgstr "Clientgeheim opnieuw gegenereerd. Werk alle code bij die het oude geheim gebruikt." #. Label for Bluesky OAuth client URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1061 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 msgid "Client URL" msgstr "Client-URL" @@ -8269,11 +8245,6 @@ msgstr "Gesloten DM's" msgid "Cloud upload" msgstr "Uploaden naar cloud" -#. Cloudflare Turnstile provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1014 -msgid "Cloudflare Turnstile" -msgstr "Cloudflare Turnstile" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:58 msgid "Coal" @@ -8669,7 +8640,7 @@ msgstr "Naam community" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:126 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:125 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:113 msgid "Community nickname" msgstr "Communitybijnaam" @@ -8722,7 +8693,7 @@ msgid "Community profile" msgstr "Communityprofiel" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:73 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:72 msgid "Community profile updated" msgstr "Communityprofiel bijgewerkt" @@ -8880,7 +8851,7 @@ msgid "Configure keyboard shortcuts" msgstr "Sneltoetsen configureren" #. Option for configuring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:961 +#: src/features/app/components/setup/SetupWizardSteps.tsx:954 msgid "Configure now" msgstr "Nu configureren" @@ -12341,7 +12312,7 @@ msgstr "Verbinding met {channel} verbreken" msgid "Disconnect from voice" msgstr "Verbinding met spraakchat verbreken" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:261 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:243 msgid "Disconnect socket" msgstr "Socketverbinding verbreken" @@ -12479,7 +12450,7 @@ msgstr "Weergavemodus" #. Short label in the inputs tab. Keep it concise. #. Short label in the my profile tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:22 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:138 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:137 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:61 msgid "Display name" msgstr "Weergavenaam" @@ -12625,7 +12596,7 @@ msgstr "Wil je lid worden van {communityName}?" #. Label in the accessibility tab. #. Label in the my profile tab. #: src/features/user/components/modals/tabs/AccessibilityTab.tsx:54 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:146 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:145 msgid "Doc, I'm from the future. I came here in a time machine that you invented. Now, I need your help to get back to the year 1985." msgstr "Doc, ik kom uit de toekomst. Ik ben hierheen gekomen met een tijdmachine die jij hebt uitgevonden. Nu heb ik je hulp nodig om terug te gaan naar het jaar 1985." @@ -13262,7 +13233,7 @@ msgid "Edit your messages above or below" msgstr "Je berichten hierboven of hieronder bewerken" #. Button or menu action label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:93 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:92 msgid "Edit your profile appearance and see a live preview" msgstr "Bewerk je profielweergave en zie een live voorbeeld" @@ -13330,7 +13301,7 @@ msgid "Email changed" msgstr "E-mailadres gewijzigd" #. Setup wizard title for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:993 +#: src/features/app/components/setup/SetupWizardSteps.tsx:978 msgid "Email delivery" msgstr "E-mailbezorging" @@ -13635,7 +13606,7 @@ msgid "Enable beta feature" msgstr "Bètafunctie inschakelen" #. Label for enabling Bluesky OAuth in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1053 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1027 msgid "Enable Bluesky OAuth" msgstr "Bluesky OAuth inschakelen" @@ -13668,7 +13639,7 @@ msgid "Enable developer mode" msgstr "Ontwikkelaarsmodus inschakelen" #. Label for enabling SMTP email delivery in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1021 +#: src/features/app/components/setup/SetupWizardSteps.tsx:995 msgid "Enable email delivery" msgstr "E-mailbezorging inschakelen" @@ -14705,7 +14676,7 @@ msgid "Failed to ban member. Try again." msgstr "Lid verbannen mislukt. Probeer het opnieuw." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:59 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:58 msgid "Failed to clear trusted domains." msgstr "Vertrouwde domeinen wissen mislukt." @@ -14762,7 +14733,7 @@ msgid "Failed to enable camera." msgstr "Camera inschakelen mislukt." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:42 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:41 msgid "Failed to forget authorized IPs. Try again." msgstr "Geautoriseerde IP-adressen vergeten mislukt. Probeer het opnieuw." @@ -14907,7 +14878,7 @@ msgid "Failed to resend verification code. Try again later." msgstr "Verificatiecode opnieuw verzenden mislukt. Probeer het later opnieuw." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:75 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:74 msgid "Failed to reset premium state." msgstr "Premiumstatus opnieuw instellen mislukt." @@ -15581,7 +15552,7 @@ msgstr "Laadplaceholder forceren" msgid "Force mature media" msgstr "Media forceren als volwassen" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:276 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:258 msgid "Force move to AFK channel" msgstr "Verplaatsen naar AFK-kanaal forceren" @@ -15640,7 +15611,7 @@ msgid "Forced off" msgstr "Geforceerd uitgeschakeld" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:46 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:45 msgid "Forget authorized IPs" msgstr "Geautoriseerde IP-adressen vergeten" @@ -15650,7 +15621,7 @@ msgid "Forget subscriptions" msgstr "Abonnementen vergeten" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:104 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:103 msgid "Forgetting authorized IPs..." msgstr "Geautoriseerde IP-adressen vergeten..." @@ -15907,12 +15878,12 @@ msgid "from <0>{0}" msgstr "van <0>{0}" #. Label for SMTP from email input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1025 +#: src/features/app/components/setup/SetupWizardSteps.tsx:999 msgid "From email" msgstr "E-mailadres van afzender" #. Label for SMTP from name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1029 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1003 msgid "From name" msgstr "Afzendernaam" @@ -16204,7 +16175,7 @@ msgid "GIF preview" msgstr "GIF-voorbeeld" #. Setup wizard title for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:969 +#: src/features/app/components/setup/SetupWizardSteps.tsx:962 msgid "GIF search" msgstr "GIF-zoekopdracht" @@ -16853,21 +16824,12 @@ msgstr "Heb je een cadeaubon? Wissel deze in om {PREMIUM_PRODUCT_NAME} te ontgre msgid "Having fun?" msgstr "Plezier?" -#: src/features/auth/components/modals/CaptchaModal.tsx:175 -msgid "Having issues? Try hCaptcha instead" -msgstr "Problemen? Probeer hCaptcha" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:63 msgctxt "us-state" msgid "Hawaii" msgstr "Hawaï" -#. hCaptcha provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1013 -msgid "hCaptcha" -msgstr "hCaptcha" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:238 msgid "HD" @@ -19768,7 +19730,7 @@ msgid "Logo" msgstr "Logo" #. Label for Bluesky OAuth logo URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1065 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1039 msgid "Logo URL" msgstr "Logo-URL" @@ -22941,7 +22903,7 @@ msgid "No tokens match \"{searchQuery}\"." msgstr "Geen tokens komen overeen met \"{searchQuery}\"." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:92 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:91 msgid "No trusted domains" msgstr "Geen vertrouwde domeinen" @@ -23696,10 +23658,6 @@ msgstr "Browserkiezer openen" msgid "Open call view" msgstr "Oproepweergave openen" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:288 -msgid "Open captcha modal" -msgstr "Captcha-venster openen" - #. Accessible label for the channel header title button in a community channel. #: src/features/channel/components/channel_header/shared.ts:14 msgid "Open channel details for {channelName}" @@ -23712,7 +23670,7 @@ msgstr "Open kanaaldetails voor {channelName}" msgid "Open chat" msgstr "Chat openen" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:314 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:290 msgid "Open claim account modal" msgstr "Venster voor het voltooien van de accountregistratie openen" @@ -23944,11 +23902,11 @@ msgstr "Sticker openen in browser" msgid "Open streaming privacy settings" msgstr "Streamingprivacyinstellingen openen" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:327 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:303 msgid "Open sudo verification modal" msgstr "Venster voor sudo-verificatie openen" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:342 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:318 msgid "Open system DM" msgstr "Systeem-DM openen" @@ -24430,7 +24388,7 @@ msgstr "Passkeys vereisen een ondertekende macOS-bundel met een geldige app-ID. #. Generic form-field label for a password. #. Label for SMTP password input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1036 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1010 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:146 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:183 @@ -25212,7 +25170,7 @@ msgid "Popup" msgstr "Pop-up" #. Label for SMTP port input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1034 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1008 msgid "Port" msgstr "Poort" @@ -25338,7 +25296,7 @@ msgid "Premium since date" msgstr "Premium sinds" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:71 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:70 msgid "Premium state reset on the backend." msgstr "Premiumstatus gereset in de backend." @@ -25608,7 +25566,7 @@ msgid "Privacy settings" msgstr "Privacyinstellingen" #. Label for Bluesky OAuth privacy URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1073 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1047 msgid "Privacy URL" msgstr "Privacy-URL" @@ -25633,7 +25591,7 @@ msgid "Private details" msgstr "Privégegevens" #. Label for Bluesky OAuth private key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1081 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1055 msgid "Private key" msgstr "Privésleutel" @@ -25699,18 +25657,18 @@ msgstr "Profielkleur" #. Settings section label for editing profile appearance and identity. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:105 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:104 #: src/features/user/components/settings_utils/section_registry/GeneralSettingsSections.ts:6 msgid "Profile customization" msgstr "Profiel aanpassen" #. Label in the my profile tab. Preserve {selectedGuildName}; it is inserted by code. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:101 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:100 msgid "Profile customization for {selectedGuildName}" msgstr "Profiel aanpassen voor {selectedGuildName}" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:97 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:96 msgid "Profile customization form" msgstr "Formulier om je profiel aan te passen" @@ -25775,7 +25733,7 @@ msgid "Profile type" msgstr "Profieltype" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:77 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:76 msgid "Profile updated" msgstr "Profiel bijgewerkt" @@ -25812,7 +25770,7 @@ msgstr "Om bevestiging vragen bij nieuwe audioapparaten" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:142 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:141 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:177 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:160 msgid "Pronouns" @@ -25842,11 +25800,6 @@ msgstr "Geef de gebruikers-ID of gebruikersnaam op van de persoon die je meldt." msgid "Provide your full legal name for the declaration." msgstr "Vul je volledige officiële naam in voor de verklaring." -#. Label for an integration provider choice. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 -msgid "Provider" -msgstr "Provider" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27626,7 +27579,7 @@ msgid "Reset password" msgstr "Wachtwoord opnieuw instellen" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:79 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:78 msgid "Reset premium state" msgstr "Premiumstatus resetten" @@ -27635,7 +27588,7 @@ msgstr "Premiumstatus resetten" msgid "Reset slider to default value" msgstr "Schuifregelaar op standaardwaarde zetten" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:247 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:229 msgid "Reset socket" msgstr "Socket resetten" @@ -27684,7 +27637,7 @@ msgid "Reset zoom" msgstr "Zoom opnieuw instellen" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:112 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:111 msgid "Resetting premium state..." msgstr "Premiumstatus opnieuw instellen..." @@ -28315,7 +28268,7 @@ msgid "Run the instance as one community instead of many. This can only be enabl msgstr "Gebruik de instantie als één community in plaats van meerdere. Dit kan alleen nu, tijdens de installatie, worden ingeschakeld." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:100 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:99 msgid "Runtime utilities" msgstr "Runtimehulpprogramma's" @@ -29103,11 +29056,6 @@ msgstr "Secundaire knop aangeklikt." msgid "Secret" msgstr "Geheim" -#. Label for a CAPTCHA secret key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1020 -msgid "Secret key" -msgstr "Geheime sleutel" - #. Settings search entry label. Names the settings search entry in the settings UI. #. Short label in the secrets section. Keep it concise. Keep the tone plain and specific. #: src/features/user/components/modals/tabs/applications_tab/application_detail/SecretsSection.tsx:11 @@ -29925,7 +29873,7 @@ msgid "Set up authenticator app" msgstr "Authenticator-app instellen" #. Option for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:953 +#: src/features/app/components/setup/SetupWizardSteps.tsx:946 msgid "Set up later" msgstr "Later instellen" @@ -30427,7 +30375,7 @@ msgstr "Ingebedde DM-lijst tonen" msgid "Show just the typing indicator without avatars" msgstr "Toon alleen de typindicator zonder avatars" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:308 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:284 msgid "Show keyboard mode intro" msgstr "Toetsenbordmodus-intro tonen" @@ -30538,7 +30486,7 @@ msgstr "Neko weergeven" msgid "Show new device alerts" msgstr "Meldingen over nieuwe apparaten tonen" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:282 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:264 msgid "Show new device modal" msgstr "Venster voor nieuw apparaat tonen" @@ -30820,7 +30768,7 @@ msgid "Signed-in devices" msgstr "Ingelogde apparaten" #. Label for Bluesky OAuth signing key ID input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1077 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1051 msgid "Signing key ID" msgstr "ID van ondertekeningssleutel" @@ -30910,11 +30858,6 @@ msgstr "Eén regel" msgid "Single user (all statuses)" msgstr "Eén gebruiker (alle statussen)" -#. Label for a CAPTCHA site key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 -msgid "Site key" -msgstr "Sitesleutel" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:98 @@ -30964,7 +30907,7 @@ msgid "Skip the system leave notice — nobody gets pinged." msgstr "Sla de melding over dat je de groep verlaat — niemand krijgt een melding." #. Description for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:957 +#: src/features/app/components/setup/SetupWizardSteps.tsx:950 msgid "Skip this now and configure it from the admin panel." msgstr "Sla dit nu over en stel het later in via het beheerpaneel." @@ -31212,17 +31155,17 @@ msgid "SMS verification is unavailable right now. Try again later or contact sup msgstr "Sms-verificatie is momenteel niet beschikbaar. Probeer het later opnieuw of neem contact op met de ondersteuning." #. Success message after validating SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1045 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 msgid "SMTP connection verified." msgstr "SMTP-verbinding geverifieerd." #. Label for SMTP host input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1033 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1007 msgid "SMTP host" msgstr "SMTP-host" #. Failure message after validating SMTP credentials when the server returns no error detail. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1049 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1023 msgid "SMTP validation failed." msgstr "SMTP-validatie mislukt." @@ -31402,7 +31345,7 @@ msgstr "Er is iets misgegaan. Probeer het later opnieuw." #. Inline error in the web deep-link prompt when opening the desktop app fails. #. Toast error shown when the mature content check request fails unexpectedly. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:18 -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:580 +#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 #: src/features/auth/flow/DesktopDeepLinkPrompt.tsx:31 msgid "Something went wrong. Try again." msgstr "Er is iets misgegaan. Probeer het opnieuw." @@ -32099,6 +32042,11 @@ msgstr "Nog steeds aan het indexeren — probeer het zo opnieuw" msgid "Still Neko" msgstr "Stilstaande Neko" +#. Small toast shown only when an automatic background check before sign-in, sign-up or a similar request takes more than a couple of seconds. No user action needed. Keep it short and calm. +#: src/features/auth/altcha/CaptchaInterceptor.ts:13 +msgid "Still working on it…" +msgstr "Nog bezig…" + #. Stop-recording button label in the desktop voice message composer. #: src/features/voice/components/VoiceMessageComposerModal.tsx:65 msgid "Stop" @@ -33013,7 +32961,7 @@ msgid "Terms of service" msgstr "Gebruiksvoorwaarden" #. Label for Bluesky OAuth terms URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1069 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1043 msgid "Terms URL" msgstr "URL voor voorwaarden" @@ -33023,7 +32971,7 @@ msgid "Terrorism or violent extremism" msgstr "Terrorisme of gewelddadig extremisme" #. Button that validates SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1041 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1015 msgid "Test SMTP" msgstr "Test SMTP" @@ -33800,7 +33748,7 @@ msgid "This clears quick CSS, imported themes, uploaded assets, and local file r msgstr "Hiermee worden snelle CSS, geïmporteerde thema's, geüploade bestanden en lokale bestandsverwijzingen op dit apparaat gewist." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:83 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:82 msgid "This clears your backend premium state entirely, including premium type, billing metadata, and override flags." msgstr "Hiermee wordt je Premiumstatus in de backend volledig gewist, inclusief Premiumtype, factureringsmetadata en vlaggen voor geforceerde instellingen." @@ -34200,7 +34148,7 @@ msgid "This message no longer exists." msgstr "Dit bericht bestaat niet meer." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:130 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:129 msgid "This nickname will only be visible in this community" msgstr "Deze bijnaam is alleen zichtbaar in deze community" @@ -34277,12 +34225,12 @@ msgid "This removes all custom CSS overrides. Theme files in your library are no msgstr "Hiermee worden alle aangepaste CSS-waarden verwijderd. Themabestanden in je bibliotheek blijven behouden." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:50 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:49 msgid "This removes all previously authorized IP addresses on your account. The next login from any IP will require email verification." msgstr "Hiermee worden alle eerder geautoriseerde IP-adressen van je account verwijderd. De volgende keer dat je inlogt vanaf een IP-adres, is e-mailverificatie vereist." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:67 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:66 msgid "This removes all trusted domains. You will see the external link warning for all domains again." msgstr "Hiermee worden alle vertrouwde domeinen verwijderd. Je ziet dan opnieuw de waarschuwing voor externe links voor alle domeinen." @@ -34949,7 +34897,7 @@ msgstr "Wijzigingen aan het pictogram in het systeemvak worden op Linux pas na e msgid "Trending GIFs" msgstr "Trending GIF's" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:383 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:359 msgid "Trigger React crash" msgstr "React-crash activeren" @@ -35008,7 +34956,7 @@ msgid "Trusted domains" msgstr "Vertrouwde domeinen" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:55 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:54 msgid "Trusted domains cleared." msgstr "Vertrouwde domeinen gewist." @@ -35054,7 +35002,6 @@ msgid "Try a different variable name or clear the search." msgstr "Probeer een andere variabelenaam of wis de zoekopdracht." #. Generic action label for retrying a failed or interrupted operation. -#: src/features/auth/components/AltchaVerification.tsx:53 #: src/features/auth/flow/AuthRouteLoadError.tsx:22 #: src/features/i18n/utils/CommonMessageDescriptors.ts:75 msgid "Try again" @@ -35132,10 +35079,6 @@ msgstr "Beveiligingssleutel/passkey gebruiken" msgid "Try sending your message again." msgstr "Probeer je bericht opnieuw te verzenden." -#: src/features/auth/components/modals/CaptchaModal.tsx:177 -msgid "Try Turnstile instead" -msgstr "Probeer Turnstile" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:135 msgid "TTS" @@ -36890,7 +36833,7 @@ msgid "Use this when troubleshooting the client or collecting logs. It may add v msgstr "Gebruik dit bij het oplossen van problemen met de client of het verzamelen van logs. Het kan uitgebreide berichten toevoegen aan de browserconsole voor de huidige client." #. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1037 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1011 msgid "Use TLS" msgstr "Gebruik TLS" @@ -37056,7 +36999,7 @@ msgstr "Volume van gebruiker" #. Generic form-field label for a username. #. Label for SMTP username input. #. Settings search entry label. Also used as a search synonym in the settings search bar. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 #: src/features/i18n/utils/CommonMessageDescriptors.ts:572 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:218 #: src/features/user/components/modals/tabs/my_profile_tab/MyProfileTabUsernameSection.tsx:56 @@ -37337,11 +37280,6 @@ msgstr "Telefoonnummer verifiëren" msgid "Verify phone number form" msgstr "Formulier voor telefoonnummerverificatie" -#. Short label in the authentication captcha modal. Keep the tone plain and specific. -#: src/features/auth/components/modals/CaptchaModal.tsx:17 -msgid "Verify you're human" -msgstr "Verifieer dat je een mens bent" - #. Title of the error modal shown when an unverified account tries to start a DM. #. Title shown when an unverified account cannot start a DM or group DM. #: src/features/app/components/alerts/DmActionErrorModal.tsx:40 @@ -37369,22 +37307,22 @@ msgid "Verify your email before adding an authenticator app." msgstr "Verifieer je e-mailadres voordat je een authenticator-app toevoegt." #. Description text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:117 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:116 msgid "Verify your email before changing your community nickname, avatar, banner, bio, pronouns, or accent color." msgstr "Verifieer je e-mailadres voordat je je community-bijnaam, avatar, banner, biografie, voornaamwoorden of accentkleur wijzigt." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:121 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:120 msgid "Verify your email before changing your username, display name, avatar, banner, bio, pronouns, time zone, or {premiumProductName} badge privacy." msgstr "Verifieer je e-mailadres voordat je je gebruikersnaam, weergavenaam, avatar, banner, biografie, voornaamwoorden, tijdzone of {premiumProductName}-badgeprivacy wijzigt." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:85 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:84 msgid "Verify your email before editing this community profile. You can still preview it here." msgstr "Verifieer je e-mailadres voordat je dit communityprofiel bewerkt. Je kunt het hier nog wel bekijken." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:89 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:88 msgid "Verify your email before editing your profile. You can still preview it here." msgstr "Verifieer je e-mailadres voordat je je profiel bewerkt. Je kunt het hier nog wel bekijken." @@ -37416,12 +37354,12 @@ msgid "Verify your email to continue using {productName}." msgstr "Verifieer je e-mailadres om {productName} te blijven gebruiken." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:109 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:108 msgid "Verify your email to edit this community profile" msgstr "Verifieer je e-mailadres om dit communityprofiel te bewerken" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:113 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:112 msgid "Verify your email to edit your profile" msgstr "Verifieer je e-mailadres om je profiel te bewerken" @@ -38398,10 +38336,6 @@ msgstr "We hebben de prijs van {premiumProductName} in Brazilië verlaagd. Het i msgid "We need one verification step before you continue. This helps protect accounts and keep spam off {productName}." msgstr "We hebben nog één verificatiestap nodig voordat je verder kunt. Dit helpt accounts te beschermen en spam van {productName} te weren." -#: src/features/auth/components/modals/CaptchaModal.tsx:128 -msgid "We need to make sure you're not a bot. Complete the verification below." -msgstr "We moeten zeker weten dat je geen bot bent. Voltooi de verificatie hieronder." - #. Required-action modal intro text when both email and phone verification are required. #: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:216 msgid "We need two verification steps before you continue. We will show one step at a time." @@ -39256,7 +39190,7 @@ msgid "You can't befriend yourself" msgstr "Je kunt jezelf geen vriendschapsverzoek sturen" #. Label in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:134 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:133 msgid "You can't change your nickname here" msgstr "Je kunt je bijnaam hier niet wijzigen" @@ -39506,7 +39440,7 @@ msgid "You have unsaved changes." msgstr "Je hebt niet-opgeslagen wijzigingen." #. Warning text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:81 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:80 msgid "You have unsaved changes. Save or reset before leaving." msgstr "Je hebt niet-opgeslagen wijzigingen. Sla ze op of maak ze ongedaan voordat je weggaat." @@ -40031,10 +39965,6 @@ msgstr "Je actie kon niet worden voltooid omdat deze is gemarkeerd door onze vei msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Je aanvraag wacht op beoordeling. Je kunt de gegevens van je vermelding nog bijwerken of de aanvraag intrekken." -#: src/features/auth/components/AltchaVerification.tsx:50 -msgid "Your browser couldn't finish the check." -msgstr "Je browser kon de controle niet voltooien." - #. Body of the browser-audio-required modal explaining why the user must click before audio can play. #: src/features/voice/components/modals/AudioPlaybackPermissionModal.tsx:12 msgid "Your browser requires user interaction before audio can be played. Click the button below to enable voice chat." @@ -40386,7 +40316,7 @@ msgid "YouTube enrichment" msgstr "YouTube-verrijking" #. Setup wizard title for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:977 +#: src/features/app/components/setup/SetupWizardSteps.tsx:970 msgid "YouTube previews" msgstr "YouTube-voorbeelden" diff --git a/fluxer_app/src/features/i18n/locales/no/messages.po b/fluxer_app/src/features/i18n/locales/no/messages.po index 50aa02ed8..f81f91865 100644 --- a/fluxer_app/src/features/i18n/locales/no/messages.po +++ b/fluxer_app/src/features/i18n/locales/no/messages.po @@ -2395,11 +2395,6 @@ msgstr "60 sekunder" msgid "7 days" msgstr "7 dager" -#. Required-action error when the API requires a captcha for phone verification. -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 -msgid "A browser check is required before phone verification. Try again from the sign-in page or contact support." -msgstr "En nettlesersjekk kreves før telefonverifisering. Prøv igjen fra påloggingssiden eller kontakt kundestøtte." - #. Hint shown beside in:. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:77 msgid "a channel" @@ -2928,7 +2923,7 @@ msgid "Add a friend to get started." msgstr "Legg til en venn for å komme i gang." #. Setup wizard body for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:973 +#: src/features/app/components/setup/SetupWizardSteps.tsx:966 msgid "Add a Klipy API key to enable GIF search at runtime." msgstr "Legg til en API-nøkkel for Klipy for å aktivere GIF-søk under kjøring." @@ -2965,7 +2960,7 @@ msgid "Add a working email" msgstr "Legg til en fungerende e-postadresse" #. Setup wizard body for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:981 +#: src/features/app/components/setup/SetupWizardSteps.tsx:974 msgid "Add a YouTube Data API key to enrich YouTube links." msgstr "Legg til en API-nøkkel for YouTube Data for å hente mer informasjon om YouTube-lenker." @@ -3011,7 +3006,7 @@ msgid "Add another reaction" msgstr "Legg til en annen reaksjon" #. Setup wizard body for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1005 +#: src/features/app/components/setup/SetupWizardSteps.tsx:990 msgid "Add Bluesky OAuth client metadata and a signing key." msgstr "Legg til OAuth-klientmetadata for Bluesky og en signeringsnøkkel." @@ -3161,7 +3156,7 @@ msgid "Add shortcut" msgstr "Legg til snarvei" #. Setup wizard body for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:997 +#: src/features/app/components/setup/SetupWizardSteps.tsx:982 msgid "Add SMTP credentials so the instance can send verification and notification email." msgstr "Legg til SMTP-legitimasjon slik at instansen kan sende e-post med bekreftelser og varsler." @@ -3188,7 +3183,7 @@ msgid "Add stream" msgstr "Legg til strøm" #. Description for configuring an optional setup wizard integration now. -#: src/features/app/components/setup/SetupWizardSteps.tsx:965 +#: src/features/app/components/setup/SetupWizardSteps.tsx:958 msgid "Add the credentials during setup." msgstr "Legg til legitimasjonen under oppsettet." @@ -3954,7 +3949,7 @@ msgid "An invalid status was provided. You can now close this tab and return to msgstr "Ugyldig status ble oppgitt. Du kan nå lukke denne fanen og gå tilbake til appen." #. Short label in the authentication auth form. Keep the tone plain and specific. -#: src/features/auth/hooks/useAuthForm.ts:13 +#: src/features/auth/hooks/useAuthForm.ts:12 msgid "An unexpected error occurred" msgstr "Det oppstod en uventet feil" @@ -4262,7 +4257,7 @@ msgid "Anyone can request an account, but an administrator must approve it." msgstr "Alle kan be om en konto, men en administrator må godkjenne den." #. Label for an integration API key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1018 +#: src/features/app/components/setup/SetupWizardSteps.tsx:994 msgid "API key" msgstr "API-nøkkel" @@ -4958,7 +4953,7 @@ msgid "Authorized apps" msgstr "Autoriserte apper" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:38 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:37 msgid "Authorized IPs cleared. New logins will require email verification." msgstr "Listen over autoriserte IP-adresser er tømt. Nye pålogginger krever e-postbekreftelse." @@ -5730,7 +5725,7 @@ msgid "Bluesky connections" msgstr "Bluesky-tilkoblinger" #. Setup wizard title for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1001 +#: src/features/app/components/setup/SetupWizardSteps.tsx:986 msgid "Bluesky OAuth" msgstr "Bluesky OAuth" @@ -5897,11 +5892,6 @@ msgstr "Verdien for bottillatelser kan ikke være negativ." msgid "Bot profile" msgstr "Botprofil" -#. Setup wizard title for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:985 -msgid "Bot protection" -msgstr "Botbeskyttelse" - #. Short label in the authentication OAUTH scopes step. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/OAuthScopesStep.tsx:20 msgid "Bot scope requested" @@ -6554,11 +6544,6 @@ msgstr "Kan ikke redigeres" msgid "Cannot delete account" msgstr "Kan ikke slette konto" -#. Toast error shown when captcha verification fails inside the auth captcha interceptor. -#: src/features/auth/components/CaptchaInterceptor.tsx:15 -msgid "Captcha verification failed. Try again." -msgstr "Captcha-verifisering mislyktes. Prøv igjen." - #. Section header in the Linux audio source picker. Lists capture-target options (entire system / specific apps). #: src/features/voice/components/AudioSourcePickerLinux.tsx:50 msgid "Capture" @@ -7398,10 +7383,6 @@ msgstr "Sjekker tilgang …" msgid "Checking screen recording permission..." msgstr "Sjekker tillatelse for skjermopptak …" -#: src/features/auth/components/AltchaVerification.tsx:62 -msgid "Checking your browser. This takes a few seconds." -msgstr "Sjekker nettleseren din. Dette tar noen sekunder." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -7571,11 +7552,6 @@ msgstr "Velg Arkiv, deretter Legg til i Dock." msgid "Choose friends to message." msgstr "Velg venner å sende melding til." -#. Setup wizard body for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:989 -msgid "Choose hCaptcha or Cloudflare Turnstile for signup challenges." -msgstr "Velg hCaptcha eller Cloudflare Turnstile for verifisering ved registrering." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:455 msgid "Choose how chat moves after you send a message" @@ -7982,17 +7958,17 @@ msgid "Clear selection" msgstr "Fjern markering" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:88 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:87 msgid "Clear trust all setting" msgstr "Fjern innstillingen «Stol på alle»" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:63 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:62 msgid "Clear trusted domains" msgstr "Tøm listen over klarerte domener" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:96 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:95 msgid "Clear trusted domains ({trustedDomainsCount})" msgstr "Tøm listen over klarerte domener ({trustedDomainsCount})" @@ -8002,7 +7978,7 @@ msgid "Clearer text" msgstr "Klarere tekst" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:108 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:107 msgid "Clearing trusted domains..." msgstr "Tømmer listen over klarerte domener …" @@ -8100,7 +8076,7 @@ msgid "Client" msgstr "Klient" #. Label for Bluesky OAuth client name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1057 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1031 msgid "Client name" msgstr "Klientnavn" @@ -8117,7 +8093,7 @@ msgid "Client secret regenerated. Update any code that uses the old secret." msgstr "Klienthemmeligheten er fornyet. Oppdater all kode som bruker den gamle hemmeligheten." #. Label for Bluesky OAuth client URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1061 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 msgid "Client URL" msgstr "Klient-URL" @@ -8269,11 +8245,6 @@ msgstr "Lukkede direktemeldingssamtaler" msgid "Cloud upload" msgstr "Skyopplasting" -#. Cloudflare Turnstile provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1014 -msgid "Cloudflare Turnstile" -msgstr "Cloudflare Turnstile" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:58 msgid "Coal" @@ -8669,7 +8640,7 @@ msgstr "Fellesskapsnavn" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:126 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:125 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:113 msgid "Community nickname" msgstr "Kallenavn i fellesskapet" @@ -8722,7 +8693,7 @@ msgid "Community profile" msgstr "Fellesskapsprofil" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:73 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:72 msgid "Community profile updated" msgstr "Fellesskapsprofilen er oppdatert" @@ -8880,7 +8851,7 @@ msgid "Configure keyboard shortcuts" msgstr "Konfigurer tastatursnarveier" #. Option for configuring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:961 +#: src/features/app/components/setup/SetupWizardSteps.tsx:954 msgid "Configure now" msgstr "Konfigurer nå" @@ -12341,7 +12312,7 @@ msgstr "Koble fra {channel}" msgid "Disconnect from voice" msgstr "Koble fra tale" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:261 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:243 msgid "Disconnect socket" msgstr "Koble fra socket" @@ -12479,7 +12450,7 @@ msgstr "Visningsmodus" #. Short label in the inputs tab. Keep it concise. #. Short label in the my profile tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:22 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:138 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:137 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:61 msgid "Display name" msgstr "Visningsnavn" @@ -12625,7 +12596,7 @@ msgstr "Vil du bli med i {communityName}?" #. Label in the accessibility tab. #. Label in the my profile tab. #: src/features/user/components/modals/tabs/AccessibilityTab.tsx:54 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:146 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:145 msgid "Doc, I'm from the future. I came here in a time machine that you invented. Now, I need your help to get back to the year 1985." msgstr "Doc, jeg er fra fremtiden. Jeg kom hit i en tidsmaskin du fant opp. Nå trenger jeg hjelpen din for å komme tilbake til 1985." @@ -13262,7 +13233,7 @@ msgid "Edit your messages above or below" msgstr "Rediger meldingene dine over eller under" #. Button or menu action label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:93 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:92 msgid "Edit your profile appearance and see a live preview" msgstr "Rediger profilens utseende og se en forhåndsvisning som oppdateres fortløpende" @@ -13330,7 +13301,7 @@ msgid "Email changed" msgstr "E-postadresse endret" #. Setup wizard title for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:993 +#: src/features/app/components/setup/SetupWizardSteps.tsx:978 msgid "Email delivery" msgstr "E-postlevering" @@ -13635,7 +13606,7 @@ msgid "Enable beta feature" msgstr "Aktiver betafunksjon" #. Label for enabling Bluesky OAuth in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1053 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1027 msgid "Enable Bluesky OAuth" msgstr "Aktiver Bluesky OAuth" @@ -13668,7 +13639,7 @@ msgid "Enable developer mode" msgstr "Aktiver utviklermodus" #. Label for enabling SMTP email delivery in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1021 +#: src/features/app/components/setup/SetupWizardSteps.tsx:995 msgid "Enable email delivery" msgstr "Aktiver e-postlevering" @@ -14705,7 +14676,7 @@ msgid "Failed to ban member. Try again." msgstr "Kunne ikke utestenge medlemmet. Prøv igjen." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:59 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:58 msgid "Failed to clear trusted domains." msgstr "Kunne ikke tømme listen over klarerte domener." @@ -14762,7 +14733,7 @@ msgid "Failed to enable camera." msgstr "Klarte ikke å aktivere kameraet." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:42 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:41 msgid "Failed to forget authorized IPs. Try again." msgstr "Kunne ikke fjerne autoriserte IP-adresser. Prøv igjen." @@ -14907,7 +14878,7 @@ msgid "Failed to resend verification code. Try again later." msgstr "Kunne ikke sende bekreftelseskoden på nytt. Prøv igjen senere." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:75 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:74 msgid "Failed to reset premium state." msgstr "Kunne ikke tilbakestille premiumstatus." @@ -15581,7 +15552,7 @@ msgstr "Fremtving plassholder ved innlasting" msgid "Force mature media" msgstr "Simuler voksent medieinnhold" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:276 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:258 msgid "Force move to AFK channel" msgstr "Tving flytting til AFK-kanal" @@ -15640,7 +15611,7 @@ msgid "Forced off" msgstr "Tvunget av" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:46 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:45 msgid "Forget authorized IPs" msgstr "Fjern autoriserte IP-adresser" @@ -15650,7 +15621,7 @@ msgid "Forget subscriptions" msgstr "Fjern abonnementer på push-varsler" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:104 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:103 msgid "Forgetting authorized IPs..." msgstr "Fjerner autoriserte IP-adresser …" @@ -15907,12 +15878,12 @@ msgid "from <0>{0}" msgstr "fra <0>{0}" #. Label for SMTP from email input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1025 +#: src/features/app/components/setup/SetupWizardSteps.tsx:999 msgid "From email" msgstr "Avsenderens e-postadresse" #. Label for SMTP from name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1029 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1003 msgid "From name" msgstr "Avsendernavn" @@ -16204,7 +16175,7 @@ msgid "GIF preview" msgstr "Forhåndsvisning av GIF" #. Setup wizard title for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:969 +#: src/features/app/components/setup/SetupWizardSteps.tsx:962 msgid "GIF search" msgstr "GIF-søk" @@ -16853,21 +16824,12 @@ msgstr "Har du en gavekode? Løs den inn for å låse opp {PREMIUM_PRODUCT_NAME} msgid "Having fun?" msgstr "Har du det gøy?" -#: src/features/auth/components/modals/CaptchaModal.tsx:175 -msgid "Having issues? Try hCaptcha instead" -msgstr "Har du problemer? Prøv hCaptcha i stedet" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:63 msgctxt "us-state" msgid "Hawaii" msgstr "Hawaii" -#. hCaptcha provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1013 -msgid "hCaptcha" -msgstr "hCaptcha" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:238 msgid "HD" @@ -19768,7 +19730,7 @@ msgid "Logo" msgstr "Logo" #. Label for Bluesky OAuth logo URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1065 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1039 msgid "Logo URL" msgstr "Logo-URL" @@ -22941,7 +22903,7 @@ msgid "No tokens match \"{searchQuery}\"." msgstr "Ingen temavariabler samsvarer med «{searchQuery}»." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:92 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:91 msgid "No trusted domains" msgstr "Ingen klarerte domener" @@ -23696,10 +23658,6 @@ msgstr "Åpne nettleservelger" msgid "Open call view" msgstr "Åpne samtalevisning" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:288 -msgid "Open captcha modal" -msgstr "Åpne CAPTCHA-dialogen" - #. Accessible label for the channel header title button in a community channel. #: src/features/channel/components/channel_header/shared.ts:14 msgid "Open channel details for {channelName}" @@ -23712,7 +23670,7 @@ msgstr "Åpne kanalinfo for {channelName}" msgid "Open chat" msgstr "Åpne chat" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:314 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:290 msgid "Open claim account modal" msgstr "Åpne dialogen for å fullføre kontoregistreringen" @@ -23944,11 +23902,11 @@ msgstr "Åpne klistremerke i nettleser" msgid "Open streaming privacy settings" msgstr "Åpne personverninnstillinger for strømming" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:327 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:303 msgid "Open sudo verification modal" msgstr "Åpne dialogen for sudo-verifisering" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:342 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:318 msgid "Open system DM" msgstr "Åpne systemsamtalen" @@ -24430,7 +24388,7 @@ msgstr "Passnøkler krever en signert macOS-pakke med en gyldig applikasjonsiden #. Generic form-field label for a password. #. Label for SMTP password input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1036 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1010 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:146 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:183 @@ -25212,7 +25170,7 @@ msgid "Popup" msgstr "Sprettoppvindu" #. Label for SMTP port input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1034 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1008 msgid "Port" msgstr "Port" @@ -25338,7 +25296,7 @@ msgid "Premium since date" msgstr "Startdato for Premium" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:71 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:70 msgid "Premium state reset on the backend." msgstr "Premiumstatus tilbakestilt på serveren." @@ -25608,7 +25566,7 @@ msgid "Privacy settings" msgstr "Personverninnstillinger" #. Label for Bluesky OAuth privacy URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1073 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1047 msgid "Privacy URL" msgstr "URL til personvernreglene" @@ -25633,7 +25591,7 @@ msgid "Private details" msgstr "Private detaljer" #. Label for Bluesky OAuth private key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1081 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1055 msgid "Private key" msgstr "Privat nøkkel" @@ -25699,18 +25657,18 @@ msgstr "Profilfarge" #. Settings section label for editing profile appearance and identity. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:105 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:104 #: src/features/user/components/settings_utils/section_registry/GeneralSettingsSections.ts:6 msgid "Profile customization" msgstr "Profiltilpasning" #. Label in the my profile tab. Preserve {selectedGuildName}; it is inserted by code. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:101 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:100 msgid "Profile customization for {selectedGuildName}" msgstr "Profiltilpasning for {selectedGuildName}" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:97 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:96 msgid "Profile customization form" msgstr "Skjema for profiltilpasning" @@ -25775,7 +25733,7 @@ msgid "Profile type" msgstr "Profiltype" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:77 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:76 msgid "Profile updated" msgstr "Profilen er oppdatert" @@ -25812,7 +25770,7 @@ msgstr "Spør om nye lydenheter" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:142 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:141 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:177 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:160 msgid "Pronouns" @@ -25842,11 +25800,6 @@ msgstr "Oppgi enten en bruker-ID eller et brukernavn for personen du rapporterer msgid "Provide your full legal name for the declaration." msgstr "Oppgi fullt juridisk navn for erklæringen." -#. Label for an integration provider choice. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 -msgid "Provider" -msgstr "Leverandør" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27626,7 +27579,7 @@ msgid "Reset password" msgstr "Tilbakestill passord" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:79 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:78 msgid "Reset premium state" msgstr "Tilbakestill Premium-status" @@ -27635,7 +27588,7 @@ msgstr "Tilbakestill Premium-status" msgid "Reset slider to default value" msgstr "Tilbakestill skyveknappen til standardverdien" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:247 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:229 msgid "Reset socket" msgstr "Tilbakestill socket" @@ -27684,7 +27637,7 @@ msgid "Reset zoom" msgstr "Tilbakestill zoom" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:112 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:111 msgid "Resetting premium state..." msgstr "Tilbakestiller Premium-status …" @@ -28315,7 +28268,7 @@ msgid "Run the instance as one community instead of many. This can only be enabl msgstr "Kjør instansen som ett fellesskap i stedet for mange. Dette kan bare aktiveres nå, under oppsettet." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:100 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:99 msgid "Runtime utilities" msgstr "Kjøretidsverktøy" @@ -29103,11 +29056,6 @@ msgstr "Sekundærknappen ble klikket på." msgid "Secret" msgstr "Hemmelighet" -#. Label for a CAPTCHA secret key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1020 -msgid "Secret key" -msgstr "Hemmelig nøkkel" - #. Settings search entry label. Names the settings search entry in the settings UI. #. Short label in the secrets section. Keep it concise. Keep the tone plain and specific. #: src/features/user/components/modals/tabs/applications_tab/application_detail/SecretsSection.tsx:11 @@ -29925,7 +29873,7 @@ msgid "Set up authenticator app" msgstr "Konfigurer autentiseringsapp" #. Option for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:953 +#: src/features/app/components/setup/SetupWizardSteps.tsx:946 msgid "Set up later" msgstr "Sett opp senere" @@ -30427,7 +30375,7 @@ msgstr "Vis direktemeldingssamtaler i sidefeltet" msgid "Show just the typing indicator without avatars" msgstr "Vis kun skriveindikatoren uten avatarer" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:308 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:284 msgid "Show keyboard mode intro" msgstr "Vis introduksjon til tastaturmodus" @@ -30538,7 +30486,7 @@ msgstr "Vis Neko" msgid "Show new device alerts" msgstr "Vis varsler om nye enheter" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:282 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:264 msgid "Show new device modal" msgstr "Vis dialog for ny enhet" @@ -30820,7 +30768,7 @@ msgid "Signed-in devices" msgstr "Påloggede enheter" #. Label for Bluesky OAuth signing key ID input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1077 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1051 msgid "Signing key ID" msgstr "ID for signeringsnøkkel" @@ -30910,11 +30858,6 @@ msgstr "Enkel linje" msgid "Single user (all statuses)" msgstr "Enkeltbruker (alle statuser)" -#. Label for a CAPTCHA site key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 -msgid "Site key" -msgstr "Nettstedsnøkkel" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:98 @@ -30964,7 +30907,7 @@ msgid "Skip the system leave notice — nobody gets pinged." msgstr "Utelat systemmeldingen om at du forlater gruppen – ingen blir varslet." #. Description for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:957 +#: src/features/app/components/setup/SetupWizardSteps.tsx:950 msgid "Skip this now and configure it from the admin panel." msgstr "Hopp over dette nå og konfigurer det fra administrasjonspanelet." @@ -31212,17 +31155,17 @@ msgid "SMS verification is unavailable right now. Try again later or contact sup msgstr "SMS-verifisering er utilgjengelig akkurat nå. Prøv igjen senere, eller kontakt kundestøtte." #. Success message after validating SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1045 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 msgid "SMTP connection verified." msgstr "SMTP-tilkobling verifisert." #. Label for SMTP host input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1033 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1007 msgid "SMTP host" msgstr "SMTP-vert" #. Failure message after validating SMTP credentials when the server returns no error detail. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1049 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1023 msgid "SMTP validation failed." msgstr "SMTP-valideringen mislyktes." @@ -31402,7 +31345,7 @@ msgstr "Noe gikk galt. Prøv igjen senere." #. Inline error in the web deep-link prompt when opening the desktop app fails. #. Toast error shown when the mature content check request fails unexpectedly. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:18 -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:580 +#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 #: src/features/auth/flow/DesktopDeepLinkPrompt.tsx:31 msgid "Something went wrong. Try again." msgstr "Noe gikk galt. Prøv igjen." @@ -32099,6 +32042,11 @@ msgstr "Indekserer fortsatt – prøv igjen om et øyeblikk" msgid "Still Neko" msgstr "Stillestående Neko" +#. Small toast shown only when an automatic background check before sign-in, sign-up or a similar request takes more than a couple of seconds. No user action needed. Keep it short and calm. +#: src/features/auth/altcha/CaptchaInterceptor.ts:13 +msgid "Still working on it…" +msgstr "Fortsatt i gang…" + #. Stop-recording button label in the desktop voice message composer. #: src/features/voice/components/VoiceMessageComposerModal.tsx:65 msgid "Stop" @@ -33013,7 +32961,7 @@ msgid "Terms of service" msgstr "Vilkår for bruk" #. Label for Bluesky OAuth terms URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1069 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1043 msgid "Terms URL" msgstr "URL til vilkårene" @@ -33023,7 +32971,7 @@ msgid "Terrorism or violent extremism" msgstr "Terrorisme eller voldelig ekstremisme" #. Button that validates SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1041 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1015 msgid "Test SMTP" msgstr "Test SMTP" @@ -33800,7 +33748,7 @@ msgid "This clears quick CSS, imported themes, uploaded assets, and local file r msgstr "Dette sletter hurtig-CSS, importerte temaer, opplastede filer og lokale filreferanser på denne enheten." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:83 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:82 msgid "This clears your backend premium state entirely, including premium type, billing metadata, and override flags." msgstr "Dette sletter hele Premium-statusen din på serveren, inkludert Premium-type, faktureringsmetadata og overstyringsflagg." @@ -34200,7 +34148,7 @@ msgid "This message no longer exists." msgstr "Denne meldingen finnes ikke lenger." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:130 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:129 msgid "This nickname will only be visible in this community" msgstr "Dette kallenavnet vil bare være synlig i dette fellesskapet" @@ -34277,12 +34225,12 @@ msgid "This removes all custom CSS overrides. Theme files in your library are no msgstr "Dette fjerner alle egendefinerte CSS-overstyringer. Temafiler i biblioteket ditt påvirkes ikke." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:50 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:49 msgid "This removes all previously authorized IP addresses on your account. The next login from any IP will require email verification." msgstr "Dette fjerner alle tidligere godkjente IP-adresser på kontoen din. Neste pålogging fra en hvilken som helst IP vil kreve e-postverifisering." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:67 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:66 msgid "This removes all trusted domains. You will see the external link warning for all domains again." msgstr "Dette fjerner alle klarerte domener. Du vil se advarselen for eksterne lenker for alle domener igjen." @@ -34949,7 +34897,7 @@ msgstr "Endringer i ikonet i systemstatusfeltet trer først i kraft etter en oms msgid "Trending GIFs" msgstr "Populære GIF-er" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:383 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:359 msgid "Trigger React crash" msgstr "Utløs React-krasj" @@ -35008,7 +34956,7 @@ msgid "Trusted domains" msgstr "Klarerte domener" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:55 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:54 msgid "Trusted domains cleared." msgstr "Listen over klarerte domener er tømt." @@ -35054,7 +35002,6 @@ msgid "Try a different variable name or clear the search." msgstr "Prøv et annet variabelnavn eller tøm søket." #. Generic action label for retrying a failed or interrupted operation. -#: src/features/auth/components/AltchaVerification.tsx:53 #: src/features/auth/flow/AuthRouteLoadError.tsx:22 #: src/features/i18n/utils/CommonMessageDescriptors.ts:75 msgid "Try again" @@ -35132,10 +35079,6 @@ msgstr "Prøv sikkerhetsnøkkel / passnøkkel i stedet" msgid "Try sending your message again." msgstr "Prøv å sende meldingen din på nytt." -#: src/features/auth/components/modals/CaptchaModal.tsx:177 -msgid "Try Turnstile instead" -msgstr "Prøv Turnstile i stedet" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:135 msgid "TTS" @@ -36890,7 +36833,7 @@ msgid "Use this when troubleshooting the client or collecting logs. It may add v msgstr "Bruk dette når du feilsøker klienten eller samler inn logger. Det kan legge til detaljerte meldinger i nettleserkonsollen for den nåværende klienten." #. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1037 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1011 msgid "Use TLS" msgstr "Bruk TLS" @@ -37056,7 +36999,7 @@ msgstr "Brukervolum" #. Generic form-field label for a username. #. Label for SMTP username input. #. Settings search entry label. Also used as a search synonym in the settings search bar. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 #: src/features/i18n/utils/CommonMessageDescriptors.ts:572 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:218 #: src/features/user/components/modals/tabs/my_profile_tab/MyProfileTabUsernameSection.tsx:56 @@ -37337,11 +37280,6 @@ msgstr "Bekreft telefonnummer" msgid "Verify phone number form" msgstr "Skjema for bekreftelse av telefonnummer" -#. Short label in the authentication captcha modal. Keep the tone plain and specific. -#: src/features/auth/components/modals/CaptchaModal.tsx:17 -msgid "Verify you're human" -msgstr "Bekreft at du er et menneske" - #. Title of the error modal shown when an unverified account tries to start a DM. #. Title shown when an unverified account cannot start a DM or group DM. #: src/features/app/components/alerts/DmActionErrorModal.tsx:40 @@ -37369,22 +37307,22 @@ msgid "Verify your email before adding an authenticator app." msgstr "Bekreft e-postadressen din før du legger til en autentiseringsapp." #. Description text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:117 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:116 msgid "Verify your email before changing your community nickname, avatar, banner, bio, pronouns, or accent color." msgstr "Bekreft e-postadressen din før du endrer kallenavn, avatar, banner, biografi, pronomen eller aksentfarge i fellesskapet." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:121 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:120 msgid "Verify your email before changing your username, display name, avatar, banner, bio, pronouns, time zone, or {premiumProductName} badge privacy." msgstr "Bekreft e-postadressen din før du endrer brukernavn, visningsnavn, avatar, banner, biografi, pronomen, tidssone eller personverninnstillinger for {premiumProductName}-merket ditt." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:85 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:84 msgid "Verify your email before editing this community profile. You can still preview it here." msgstr "Bekreft e-postadressen din før du redigerer denne fellesskapsprofilen. Du kan fortsatt forhåndsvise den her." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:89 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:88 msgid "Verify your email before editing your profile. You can still preview it here." msgstr "Bekreft e-postadressen din før du redigerer profilen din. Du kan fortsatt forhåndsvise den her." @@ -37416,12 +37354,12 @@ msgid "Verify your email to continue using {productName}." msgstr "Bekreft e-postadressen din for å fortsette å bruke {productName}." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:109 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:108 msgid "Verify your email to edit this community profile" msgstr "Bekreft e-postadressen din for å redigere denne fellesskapsprofilen" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:113 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:112 msgid "Verify your email to edit your profile" msgstr "Bekreft e-postadressen din for å redigere profilen din" @@ -38398,10 +38336,6 @@ msgstr "Vi har senket prisen på {premiumProductName} i Brasil. Det koster nå { msgid "We need one verification step before you continue. This helps protect accounts and keep spam off {productName}." msgstr "Vi trenger ett bekreftelsestrinn før du fortsetter. Dette bidrar til å beskytte kontoer og holde spam unna {productName}." -#: src/features/auth/components/modals/CaptchaModal.tsx:128 -msgid "We need to make sure you're not a bot. Complete the verification below." -msgstr "Vi må forsikre oss om at du ikke er en robot. Fullfør verifiseringen nedenfor." - #. Required-action modal intro text when both email and phone verification are required. #: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:216 msgid "We need two verification steps before you continue. We will show one step at a time." @@ -39256,7 +39190,7 @@ msgid "You can't befriend yourself" msgstr "Du kan ikke bli venn med deg selv" #. Label in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:134 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:133 msgid "You can't change your nickname here" msgstr "Du kan ikke endre kallenavnet ditt her" @@ -39506,7 +39440,7 @@ msgid "You have unsaved changes." msgstr "Du har ulagrede endringer." #. Warning text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:81 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:80 msgid "You have unsaved changes. Save or reset before leaving." msgstr "Du har ulagrede endringer. Lagre eller tilbakestill før du går herfra." @@ -40031,10 +39965,6 @@ msgstr "Handlingen din kunne ikke fullføres fordi den ble flagget av sikkerhets msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Søknaden din venter på gjennomgang. Du kan fortsatt oppdatere oppføringsdetaljene eller trekke tilbake søknaden." -#: src/features/auth/components/AltchaVerification.tsx:50 -msgid "Your browser couldn't finish the check." -msgstr "Nettleseren din klarte ikke å fullføre sjekken." - #. Body of the browser-audio-required modal explaining why the user must click before audio can play. #: src/features/voice/components/modals/AudioPlaybackPermissionModal.tsx:12 msgid "Your browser requires user interaction before audio can be played. Click the button below to enable voice chat." @@ -40386,7 +40316,7 @@ msgid "YouTube enrichment" msgstr "Berikede YouTube-lenker" #. Setup wizard title for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:977 +#: src/features/app/components/setup/SetupWizardSteps.tsx:970 msgid "YouTube previews" msgstr "YouTube-forhåndsvisninger" diff --git a/fluxer_app/src/features/i18n/locales/pl/messages.po b/fluxer_app/src/features/i18n/locales/pl/messages.po index e7c364a55..d71e84e10 100644 --- a/fluxer_app/src/features/i18n/locales/pl/messages.po +++ b/fluxer_app/src/features/i18n/locales/pl/messages.po @@ -2395,11 +2395,6 @@ msgstr "60 sekund" msgid "7 days" msgstr "7 dni" -#. Required-action error when the API requires a captcha for phone verification. -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 -msgid "A browser check is required before phone verification. Try again from the sign-in page or contact support." -msgstr "Przed weryfikacją telefonu wymagane jest sprawdzenie przeglądarki. Spróbuj ponownie ze strony logowania lub skontaktuj się z pomocą techniczną." - #. Hint shown beside in:. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:77 msgid "a channel" @@ -2928,7 +2923,7 @@ msgid "Add a friend to get started." msgstr "Dodaj znajomego, aby zacząć." #. Setup wizard body for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:973 +#: src/features/app/components/setup/SetupWizardSteps.tsx:966 msgid "Add a Klipy API key to enable GIF search at runtime." msgstr "Dodaj klucz API Klipy, aby włączyć wyszukiwanie GIF-ów podczas działania aplikacji." @@ -2965,7 +2960,7 @@ msgid "Add a working email" msgstr "Dodaj działający adres e-mail" #. Setup wizard body for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:981 +#: src/features/app/components/setup/SetupWizardSteps.tsx:974 msgid "Add a YouTube Data API key to enrich YouTube links." msgstr "Dodaj klucz YouTube Data API, aby wzbogacić linki do YouTube." @@ -3011,7 +3006,7 @@ msgid "Add another reaction" msgstr "Dodaj kolejną reakcję" #. Setup wizard body for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1005 +#: src/features/app/components/setup/SetupWizardSteps.tsx:990 msgid "Add Bluesky OAuth client metadata and a signing key." msgstr "Dodaj metadane klienta OAuth Bluesky i klucz podpisu." @@ -3161,7 +3156,7 @@ msgid "Add shortcut" msgstr "Dodaj skrót" #. Setup wizard body for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:997 +#: src/features/app/components/setup/SetupWizardSteps.tsx:982 msgid "Add SMTP credentials so the instance can send verification and notification email." msgstr "Dodaj dane uwierzytelniające SMTP, aby instancja mogła wysyłać e-maile weryfikacyjne i powiadomienia." @@ -3188,7 +3183,7 @@ msgid "Add stream" msgstr "Dodaj transmisję" #. Description for configuring an optional setup wizard integration now. -#: src/features/app/components/setup/SetupWizardSteps.tsx:965 +#: src/features/app/components/setup/SetupWizardSteps.tsx:958 msgid "Add the credentials during setup." msgstr "Dodaj dane uwierzytelniające podczas konfiguracji." @@ -3954,7 +3949,7 @@ msgid "An invalid status was provided. You can now close this tab and return to msgstr "Podano nieprawidłowy status. Możesz teraz zamknąć tę kartę i wrócić do aplikacji." #. Short label in the authentication auth form. Keep the tone plain and specific. -#: src/features/auth/hooks/useAuthForm.ts:13 +#: src/features/auth/hooks/useAuthForm.ts:12 msgid "An unexpected error occurred" msgstr "Wystąpił nieoczekiwany błąd" @@ -4262,7 +4257,7 @@ msgid "Anyone can request an account, but an administrator must approve it." msgstr "Każdy może poprosić o konto, ale administrator musi je zatwierdzić." #. Label for an integration API key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1018 +#: src/features/app/components/setup/SetupWizardSteps.tsx:994 msgid "API key" msgstr "Klucz API" @@ -4958,7 +4953,7 @@ msgid "Authorized apps" msgstr "Autoryzowane aplikacje" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:38 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:37 msgid "Authorized IPs cleared. New logins will require email verification." msgstr "Autoryzowane adresy IP zostały usunięte. Nowe logowania będą wymagały weryfikacji e-mail." @@ -5730,7 +5725,7 @@ msgid "Bluesky connections" msgstr "Połączenia z Bluesky" #. Setup wizard title for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1001 +#: src/features/app/components/setup/SetupWizardSteps.tsx:986 msgid "Bluesky OAuth" msgstr "OAuth Bluesky" @@ -5897,11 +5892,6 @@ msgstr "Uprawnienia bota nie mogą być ujemne." msgid "Bot profile" msgstr "Profil bota" -#. Setup wizard title for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:985 -msgid "Bot protection" -msgstr "Ochrona przed botami" - #. Short label in the authentication OAUTH scopes step. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/OAuthScopesStep.tsx:20 msgid "Bot scope requested" @@ -6554,11 +6544,6 @@ msgstr "Nie można edytować" msgid "Cannot delete account" msgstr "Nie można usunąć konta" -#. Toast error shown when captcha verification fails inside the auth captcha interceptor. -#: src/features/auth/components/CaptchaInterceptor.tsx:15 -msgid "Captcha verification failed. Try again." -msgstr "Weryfikacja captcha nie powiodła się. Spróbuj ponownie." - #. Section header in the Linux audio source picker. Lists capture-target options (entire system / specific apps). #: src/features/voice/components/AudioSourcePickerLinux.tsx:50 msgid "Capture" @@ -7398,10 +7383,6 @@ msgstr "Sprawdzanie dostępu..." msgid "Checking screen recording permission..." msgstr "Sprawdzanie uprawnień do nagrywania ekranu…" -#: src/features/auth/components/AltchaVerification.tsx:62 -msgid "Checking your browser. This takes a few seconds." -msgstr "Sprawdzanie przeglądarki. Zajmie to kilka sekund." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -7571,11 +7552,6 @@ msgstr "Wybierz Plik, a następnie Dodaj do Docka." msgid "Choose friends to message." msgstr "Wybierz znajomych, do których chcesz wysłać wiadomość." -#. Setup wizard body for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:989 -msgid "Choose hCaptcha or Cloudflare Turnstile for signup challenges." -msgstr "Wybierz hCaptcha lub Cloudflare Turnstile do weryfikacji podczas rejestracji." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:455 msgid "Choose how chat moves after you send a message" @@ -7982,17 +7958,17 @@ msgid "Clear selection" msgstr "Wyczyść zaznaczenie" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:88 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:87 msgid "Clear trust all setting" msgstr "Wyczyść ustawienie \"ufaj wszystkim\"" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:63 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:62 msgid "Clear trusted domains" msgstr "Wyczyść zaufane domeny" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:96 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:95 msgid "Clear trusted domains ({trustedDomainsCount})" msgstr "Wyczyść zaufane domeny ({trustedDomainsCount})" @@ -8002,7 +7978,7 @@ msgid "Clearer text" msgstr "Wyraźniejszy tekst" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:108 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:107 msgid "Clearing trusted domains..." msgstr "Czyszczenie zaufanych domen..." @@ -8100,7 +8076,7 @@ msgid "Client" msgstr "Klient" #. Label for Bluesky OAuth client name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1057 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1031 msgid "Client name" msgstr "Nazwa klienta" @@ -8117,7 +8093,7 @@ msgid "Client secret regenerated. Update any code that uses the old secret." msgstr "Klucz tajny klienta został wygenerowany ponownie. Zaktualizuj kod, który używa starego klucza." #. Label for Bluesky OAuth client URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1061 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 msgid "Client URL" msgstr "Adres URL klienta" @@ -8269,11 +8245,6 @@ msgstr "Zamknięte rozmowy prywatne" msgid "Cloud upload" msgstr "Przesyłanie do chmury" -#. Cloudflare Turnstile provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1014 -msgid "Cloudflare Turnstile" -msgstr "Cloudflare Turnstile" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:58 msgid "Coal" @@ -8669,7 +8640,7 @@ msgstr "Nazwa społeczności" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:126 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:125 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:113 msgid "Community nickname" msgstr "Pseudonim w społeczności" @@ -8722,7 +8693,7 @@ msgid "Community profile" msgstr "Profil społeczności" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:73 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:72 msgid "Community profile updated" msgstr "Profil społeczności zaktualizowany" @@ -8880,7 +8851,7 @@ msgid "Configure keyboard shortcuts" msgstr "Skonfiguruj skróty klawiszowe" #. Option for configuring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:961 +#: src/features/app/components/setup/SetupWizardSteps.tsx:954 msgid "Configure now" msgstr "Skonfiguruj teraz" @@ -12341,7 +12312,7 @@ msgstr "Rozłącz z kanałem {channel}" msgid "Disconnect from voice" msgstr "Rozłącz z kanałem głosowym" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:261 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:243 msgid "Disconnect socket" msgstr "Odłącz gniazdo" @@ -12479,7 +12450,7 @@ msgstr "Tryb wyświetlania" #. Short label in the inputs tab. Keep it concise. #. Short label in the my profile tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:22 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:138 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:137 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:61 msgid "Display name" msgstr "Nazwa wyświetlana" @@ -12625,7 +12596,7 @@ msgstr "Czy chcesz dołączyć do {communityName}?" #. Label in the accessibility tab. #. Label in the my profile tab. #: src/features/user/components/modals/tabs/AccessibilityTab.tsx:54 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:146 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:145 msgid "Doc, I'm from the future. I came here in a time machine that you invented. Now, I need your help to get back to the year 1985." msgstr "Doktorze, jestem z przyszłości. Przybyłem tu wehikułem czasu, który pan wynalazł. Teraz potrzebuję pańskiej pomocy, żeby wrócić do roku 1985." @@ -13262,7 +13233,7 @@ msgid "Edit your messages above or below" msgstr "Edytuj swoje wiadomości powyżej lub poniżej" #. Button or menu action label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:93 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:92 msgid "Edit your profile appearance and see a live preview" msgstr "Edytuj wygląd swojego profilu i zobacz podgląd na żywo" @@ -13330,7 +13301,7 @@ msgid "Email changed" msgstr "Adres e-mail zmieniony" #. Setup wizard title for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:993 +#: src/features/app/components/setup/SetupWizardSteps.tsx:978 msgid "Email delivery" msgstr "Dostarczanie wiadomości e-mail" @@ -13635,7 +13606,7 @@ msgid "Enable beta feature" msgstr "Włącz funkcję beta" #. Label for enabling Bluesky OAuth in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1053 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1027 msgid "Enable Bluesky OAuth" msgstr "Włącz OAuth dla Bluesky" @@ -13668,7 +13639,7 @@ msgid "Enable developer mode" msgstr "Włącz tryb programisty" #. Label for enabling SMTP email delivery in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1021 +#: src/features/app/components/setup/SetupWizardSteps.tsx:995 msgid "Enable email delivery" msgstr "Włącz dostarczanie wiadomości e-mail" @@ -14705,7 +14676,7 @@ msgid "Failed to ban member. Try again." msgstr "Nie udało się zbanować członka. Spróbuj ponownie." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:59 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:58 msgid "Failed to clear trusted domains." msgstr "Nie udało się wyczyścić zaufanych domen." @@ -14762,7 +14733,7 @@ msgid "Failed to enable camera." msgstr "Nie udało się włączyć kamery." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:42 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:41 msgid "Failed to forget authorized IPs. Try again." msgstr "Nie udało się usunąć zapamiętanych autoryzowanych adresów IP. Spróbuj ponownie." @@ -14907,7 +14878,7 @@ msgid "Failed to resend verification code. Try again later." msgstr "Nie udało się ponownie wysłać kodu weryfikacyjnego. Spróbuj ponownie później." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:75 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:74 msgid "Failed to reset premium state." msgstr "Nie udało się zresetować stanu Premium." @@ -15581,7 +15552,7 @@ msgstr "Wymuś szkielet ładowania" msgid "Force mature media" msgstr "Wymuś oznaczenie multimediów jako treści dla dorosłych" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:276 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:258 msgid "Force move to AFK channel" msgstr "Wymuś przeniesienie na kanał AFK" @@ -15640,7 +15611,7 @@ msgid "Forced off" msgstr "Wymuszone wyłączenie" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:46 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:45 msgid "Forget authorized IPs" msgstr "Usuń zapamiętane autoryzowane adresy IP" @@ -15650,7 +15621,7 @@ msgid "Forget subscriptions" msgstr "Usuń zapamiętane subskrypcje" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:104 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:103 msgid "Forgetting authorized IPs..." msgstr "Usuwanie zapamiętanych autoryzowanych adresów IP..." @@ -15907,12 +15878,12 @@ msgid "from <0>{0}" msgstr "z <0>{0}" #. Label for SMTP from email input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1025 +#: src/features/app/components/setup/SetupWizardSteps.tsx:999 msgid "From email" msgstr "Adres e-mail nadawcy" #. Label for SMTP from name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1029 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1003 msgid "From name" msgstr "Nazwa nadawcy" @@ -16204,7 +16175,7 @@ msgid "GIF preview" msgstr "Podgląd GIF-a" #. Setup wizard title for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:969 +#: src/features/app/components/setup/SetupWizardSteps.tsx:962 msgid "GIF search" msgstr "Wyszukiwanie GIF-ów" @@ -16853,21 +16824,12 @@ msgstr "Masz kod podarunkowy? Aktywuj go, aby odblokować {PREMIUM_PRODUCT_NAME} msgid "Having fun?" msgstr "Dobrze się bawisz?" -#: src/features/auth/components/modals/CaptchaModal.tsx:175 -msgid "Having issues? Try hCaptcha instead" -msgstr "Masz problemy? Spróbuj użyć hCaptcha" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:63 msgctxt "us-state" msgid "Hawaii" msgstr "Hawaje" -#. hCaptcha provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1013 -msgid "hCaptcha" -msgstr "hCaptcha" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:238 msgid "HD" @@ -19768,7 +19730,7 @@ msgid "Logo" msgstr "Logo" #. Label for Bluesky OAuth logo URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1065 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1039 msgid "Logo URL" msgstr "Adres URL logo" @@ -22941,7 +22903,7 @@ msgid "No tokens match \"{searchQuery}\"." msgstr "Brak tokenów pasujących do „{searchQuery}”." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:92 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:91 msgid "No trusted domains" msgstr "Brak zaufanych domen" @@ -23696,10 +23658,6 @@ msgstr "Otwórz selektor przeglądarki" msgid "Open call view" msgstr "Otwórz widok połączenia" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:288 -msgid "Open captcha modal" -msgstr "Otwórz okno captcha" - #. Accessible label for the channel header title button in a community channel. #: src/features/channel/components/channel_header/shared.ts:14 msgid "Open channel details for {channelName}" @@ -23712,7 +23670,7 @@ msgstr "Otwórz szczegóły kanału „{channelName}”" msgid "Open chat" msgstr "Otwórz czat" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:314 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:290 msgid "Open claim account modal" msgstr "Otwórz okno dokończenia rejestracji konta" @@ -23944,11 +23902,11 @@ msgstr "Otwórz naklejkę w przeglądarce" msgid "Open streaming privacy settings" msgstr "Otwórz ustawienia prywatności transmisji" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:327 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:303 msgid "Open sudo verification modal" msgstr "Otwórz okno weryfikacji sudo" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:342 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:318 msgid "Open system DM" msgstr "Otwórz rozmowę z kontem systemowym" @@ -24430,7 +24388,7 @@ msgstr "Klucze dostępu wymagają podpisanego pakietu aplikacji macOS z prawidł #. Generic form-field label for a password. #. Label for SMTP password input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1036 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1010 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:146 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:183 @@ -25212,7 +25170,7 @@ msgid "Popup" msgstr "Wyskakujące okienko" #. Label for SMTP port input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1034 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1008 msgid "Port" msgstr "Port" @@ -25338,7 +25296,7 @@ msgid "Premium since date" msgstr "Premium od" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:71 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:70 msgid "Premium state reset on the backend." msgstr "Stan Premium zresetowany po stronie serwera." @@ -25608,7 +25566,7 @@ msgid "Privacy settings" msgstr "Ustawienia prywatności" #. Label for Bluesky OAuth privacy URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1073 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1047 msgid "Privacy URL" msgstr "Adres URL polityki prywatności" @@ -25633,7 +25591,7 @@ msgid "Private details" msgstr "Dane prywatne" #. Label for Bluesky OAuth private key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1081 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1055 msgid "Private key" msgstr "Klucz prywatny" @@ -25699,18 +25657,18 @@ msgstr "Kolor profilu" #. Settings section label for editing profile appearance and identity. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:105 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:104 #: src/features/user/components/settings_utils/section_registry/GeneralSettingsSections.ts:6 msgid "Profile customization" msgstr "Dostosowywanie profilu" #. Label in the my profile tab. Preserve {selectedGuildName}; it is inserted by code. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:101 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:100 msgid "Profile customization for {selectedGuildName}" msgstr "Dostosowywanie profilu dla {selectedGuildName}" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:97 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:96 msgid "Profile customization form" msgstr "Formularz dostosowywania profilu" @@ -25775,7 +25733,7 @@ msgid "Profile type" msgstr "Typ profilu" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:77 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:76 msgid "Profile updated" msgstr "Profil zaktualizowany" @@ -25812,7 +25770,7 @@ msgstr "Pytaj o nowe urządzenia audio" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:142 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:141 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:177 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:160 msgid "Pronouns" @@ -25842,11 +25800,6 @@ msgstr "Podaj identyfikator lub nazwę użytkownika osoby, którą zgłaszasz." msgid "Provide your full legal name for the declaration." msgstr "Podaj swoje pełne imię i nazwisko do oświadczenia." -#. Label for an integration provider choice. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 -msgid "Provider" -msgstr "Dostawca" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27626,7 +27579,7 @@ msgid "Reset password" msgstr "Zresetuj hasło" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:79 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:78 msgid "Reset premium state" msgstr "Zresetuj stan Premium" @@ -27635,7 +27588,7 @@ msgstr "Zresetuj stan Premium" msgid "Reset slider to default value" msgstr "Przywróć domyślną wartość suwaka" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:247 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:229 msgid "Reset socket" msgstr "Zresetuj połączenie" @@ -27684,7 +27637,7 @@ msgid "Reset zoom" msgstr "Resetuj powiększenie" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:112 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:111 msgid "Resetting premium state..." msgstr "Resetowanie stanu Premium..." @@ -28315,7 +28268,7 @@ msgid "Run the instance as one community instead of many. This can only be enabl msgstr "Uruchom instancję jako jedną społeczność zamiast wielu. Można to włączyć tylko teraz, podczas konfiguracji." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:100 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:99 msgid "Runtime utilities" msgstr "Narzędzia uruchomieniowe" @@ -29103,11 +29056,6 @@ msgstr "Kliknięto przycisk dodatkowy." msgid "Secret" msgstr "Sekret" -#. Label for a CAPTCHA secret key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1020 -msgid "Secret key" -msgstr "Klucz tajny" - #. Settings search entry label. Names the settings search entry in the settings UI. #. Short label in the secrets section. Keep it concise. Keep the tone plain and specific. #: src/features/user/components/modals/tabs/applications_tab/application_detail/SecretsSection.tsx:11 @@ -29925,7 +29873,7 @@ msgid "Set up authenticator app" msgstr "Skonfiguruj aplikację uwierzytelniającą" #. Option for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:953 +#: src/features/app/components/setup/SetupWizardSteps.tsx:946 msgid "Set up later" msgstr "Skonfiguruj później" @@ -30427,7 +30375,7 @@ msgstr "Pokaż listę czatów w oknie" msgid "Show just the typing indicator without avatars" msgstr "Pokaż tylko wskaźnik pisania bez awatarów" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:308 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:284 msgid "Show keyboard mode intro" msgstr "Pokaż wprowadzenie do trybu klawiatury" @@ -30538,7 +30486,7 @@ msgstr "Pokaż Neko" msgid "Show new device alerts" msgstr "Pokaż alerty o nowych urządzeniach" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:282 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:264 msgid "Show new device modal" msgstr "Pokaż okno nowego urządzenia" @@ -30820,7 +30768,7 @@ msgid "Signed-in devices" msgstr "Zalogowane urządzenia" #. Label for Bluesky OAuth signing key ID input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1077 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1051 msgid "Signing key ID" msgstr "Identyfikator klucza podpisu" @@ -30910,11 +30858,6 @@ msgstr "Pojedyncza linia" msgid "Single user (all statuses)" msgstr "Jeden użytkownik (wszystkie statusy)" -#. Label for a CAPTCHA site key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 -msgid "Site key" -msgstr "Klucz witryny" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:98 @@ -30964,7 +30907,7 @@ msgid "Skip the system leave notice — nobody gets pinged." msgstr "Pomiń systemową wiadomość o opuszczeniu grupy — nikt nie otrzyma powiadomienia." #. Description for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:957 +#: src/features/app/components/setup/SetupWizardSteps.tsx:950 msgid "Skip this now and configure it from the admin panel." msgstr "Pomiń teraz i skonfiguruj z panelu administratora." @@ -31212,17 +31155,17 @@ msgid "SMS verification is unavailable right now. Try again later or contact sup msgstr "Weryfikacja SMS jest teraz niedostępna. Spróbuj ponownie później lub skontaktuj się z pomocą techniczną." #. Success message after validating SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1045 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 msgid "SMTP connection verified." msgstr "Połączenie SMTP zweryfikowane." #. Label for SMTP host input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1033 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1007 msgid "SMTP host" msgstr "Host SMTP" #. Failure message after validating SMTP credentials when the server returns no error detail. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1049 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1023 msgid "SMTP validation failed." msgstr "Weryfikacja SMTP nie powiodła się." @@ -31402,7 +31345,7 @@ msgstr "Coś poszło nie tak. Spróbuj ponownie później." #. Inline error in the web deep-link prompt when opening the desktop app fails. #. Toast error shown when the mature content check request fails unexpectedly. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:18 -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:580 +#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 #: src/features/auth/flow/DesktopDeepLinkPrompt.tsx:31 msgid "Something went wrong. Try again." msgstr "Coś poszło nie tak. Spróbuj ponownie." @@ -32099,6 +32042,11 @@ msgstr "Trwa indeksowanie — spróbuj ponownie za chwilę" msgid "Still Neko" msgstr "Nieruchomy Neko" +#. Small toast shown only when an automatic background check before sign-in, sign-up or a similar request takes more than a couple of seconds. No user action needed. Keep it short and calm. +#: src/features/auth/altcha/CaptchaInterceptor.ts:13 +msgid "Still working on it…" +msgstr "Nadal pracujemy…" + #. Stop-recording button label in the desktop voice message composer. #: src/features/voice/components/VoiceMessageComposerModal.tsx:65 msgid "Stop" @@ -33013,7 +32961,7 @@ msgid "Terms of service" msgstr "Warunki korzystania z usługi" #. Label for Bluesky OAuth terms URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1069 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1043 msgid "Terms URL" msgstr "Adres URL warunków korzystania z usługi" @@ -33023,7 +32971,7 @@ msgid "Terrorism or violent extremism" msgstr "Terroryzm lub brutalny ekstremizm" #. Button that validates SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1041 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1015 msgid "Test SMTP" msgstr "Testuj SMTP" @@ -33800,7 +33748,7 @@ msgid "This clears quick CSS, imported themes, uploaded assets, and local file r msgstr "Spowoduje to wyczyszczenie Szybkiego CSS, zaimportowanych motywów, przesłanych zasobów i odwołań do plików lokalnych na tym urządzeniu." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:83 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:82 msgid "This clears your backend premium state entirely, including premium type, billing metadata, and override flags." msgstr "Spowoduje to całkowite wyczyszczenie Twojego stanu Premium po stronie serwera, w tym typu Premium, metadanych rozliczeniowych i flag wymuszeń." @@ -34200,7 +34148,7 @@ msgid "This message no longer exists." msgstr "Ta wiadomość już nie istnieje." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:130 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:129 msgid "This nickname will only be visible in this community" msgstr "Ten pseudonim będzie widoczny tylko w tej społeczności" @@ -34277,12 +34225,12 @@ msgid "This removes all custom CSS overrides. Theme files in your library are no msgstr "Spowoduje to usunięcie wszystkich niestandardowych reguł CSS. Pliki motywów w Twojej bibliotece pozostaną nienaruszone." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:50 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:49 msgid "This removes all previously authorized IP addresses on your account. The next login from any IP will require email verification." msgstr "Spowoduje to usunięcie wszystkich wcześniej autoryzowanych adresów IP na Twoim koncie. Następne logowanie z dowolnego adresu IP będzie wymagało weryfikacji e-mailowej." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:67 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:66 msgid "This removes all trusted domains. You will see the external link warning for all domains again." msgstr "Spowoduje to usunięcie wszystkich zaufanych domen. Ponownie zobaczysz ostrzeżenie o linkach zewnętrznych dla wszystkich domen." @@ -34949,7 +34897,7 @@ msgstr "W systemie Linux zmiany ikony w zasobniku systemowym są stosowane dopie msgid "Trending GIFs" msgstr "Popularne GIF-y" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:383 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:359 msgid "Trigger React crash" msgstr "Wywołaj awarię Reacta" @@ -35008,7 +34956,7 @@ msgid "Trusted domains" msgstr "Zaufane domeny" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:55 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:54 msgid "Trusted domains cleared." msgstr "Wyczyszczono zaufane domeny." @@ -35054,7 +35002,6 @@ msgid "Try a different variable name or clear the search." msgstr "Spróbuj innej nazwy zmiennej lub wyczyść wyszukiwanie." #. Generic action label for retrying a failed or interrupted operation. -#: src/features/auth/components/AltchaVerification.tsx:53 #: src/features/auth/flow/AuthRouteLoadError.tsx:22 #: src/features/i18n/utils/CommonMessageDescriptors.ts:75 msgid "Try again" @@ -35132,10 +35079,6 @@ msgstr "Spróbuj użyć klucza bezpieczeństwa / klucza dostępu" msgid "Try sending your message again." msgstr "Spróbuj wysłać wiadomość ponownie." -#: src/features/auth/components/modals/CaptchaModal.tsx:177 -msgid "Try Turnstile instead" -msgstr "Wypróbuj Turnstile" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:135 msgid "TTS" @@ -36890,7 +36833,7 @@ msgid "Use this when troubleshooting the client or collecting logs. It may add v msgstr "Użyj tej opcji do rozwiązywania problemów z klientem lub zbierania logów. Może ona dodać szczegółowe wiadomości do konsoli przeglądarki dla bieżącego klienta." #. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1037 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1011 msgid "Use TLS" msgstr "Użyj TLS" @@ -37056,7 +36999,7 @@ msgstr "Głośność użytkownika" #. Generic form-field label for a username. #. Label for SMTP username input. #. Settings search entry label. Also used as a search synonym in the settings search bar. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 #: src/features/i18n/utils/CommonMessageDescriptors.ts:572 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:218 #: src/features/user/components/modals/tabs/my_profile_tab/MyProfileTabUsernameSection.tsx:56 @@ -37337,11 +37280,6 @@ msgstr "Zweryfikuj numer telefonu" msgid "Verify phone number form" msgstr "Formularz weryfikacji numeru telefonu" -#. Short label in the authentication captcha modal. Keep the tone plain and specific. -#: src/features/auth/components/modals/CaptchaModal.tsx:17 -msgid "Verify you're human" -msgstr "Potwierdź, że nie jesteś robotem" - #. Title of the error modal shown when an unverified account tries to start a DM. #. Title shown when an unverified account cannot start a DM or group DM. #: src/features/app/components/alerts/DmActionErrorModal.tsx:40 @@ -37369,22 +37307,22 @@ msgid "Verify your email before adding an authenticator app." msgstr "Zweryfikuj swój adres e-mail, zanim dodasz aplikację uwierzytelniającą." #. Description text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:117 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:116 msgid "Verify your email before changing your community nickname, avatar, banner, bio, pronouns, or accent color." msgstr "Zweryfikuj swój adres e-mail, zanim zmienisz pseudonim, awatar, baner, biogram, zaimki lub kolor akcentujący w profilu w społeczności." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:121 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:120 msgid "Verify your email before changing your username, display name, avatar, banner, bio, pronouns, time zone, or {premiumProductName} badge privacy." msgstr "Zweryfikuj swój adres e-mail, zanim zmienisz nazwę użytkownika, nazwę wyświetlaną, awatar, baner, biogram, zaimki, strefę czasową lub prywatność odznaki {premiumProductName}." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:85 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:84 msgid "Verify your email before editing this community profile. You can still preview it here." msgstr "Zweryfikuj swój adres e-mail, zanim zaczniesz edytować ten profil w społeczności. Nadal możesz go tutaj podejrzeć." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:89 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:88 msgid "Verify your email before editing your profile. You can still preview it here." msgstr "Zweryfikuj swój adres e-mail, zanim edytujesz profil. Nadal możesz go tutaj podejrzeć." @@ -37416,12 +37354,12 @@ msgid "Verify your email to continue using {productName}." msgstr "Zweryfikuj swój adres e-mail, aby dalej korzystać z {productName}." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:109 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:108 msgid "Verify your email to edit this community profile" msgstr "Zweryfikuj swój adres e-mail, aby edytować ten profil w społeczności" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:113 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:112 msgid "Verify your email to edit your profile" msgstr "Zweryfikuj swój adres e-mail, aby edytować profil" @@ -38398,10 +38336,6 @@ msgstr "Obniżyliśmy cenę {premiumProductName} w Brazylii. Teraz kosztuje {mon msgid "We need one verification step before you continue. This helps protect accounts and keep spam off {productName}." msgstr "Zanim przejdziesz dalej, wymagany jest jeden etap weryfikacji. Pomaga to chronić konta i zapobiegać spamowi w {productName}." -#: src/features/auth/components/modals/CaptchaModal.tsx:128 -msgid "We need to make sure you're not a bot. Complete the verification below." -msgstr "Musimy się upewnić, że nie jesteś botem. Ukończ weryfikację poniżej." - #. Required-action modal intro text when both email and phone verification are required. #: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:216 msgid "We need two verification steps before you continue. We will show one step at a time." @@ -39256,7 +39190,7 @@ msgid "You can't befriend yourself" msgstr "Nie możesz zaprosić samego siebie do znajomych" #. Label in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:134 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:133 msgid "You can't change your nickname here" msgstr "Nie możesz zmienić pseudonimu tutaj" @@ -39506,7 +39440,7 @@ msgid "You have unsaved changes." msgstr "Masz niezapisane zmiany." #. Warning text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:81 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:80 msgid "You have unsaved changes. Save or reset before leaving." msgstr "Masz niezapisane zmiany. Zapisz je lub zresetuj przed wyjściem." @@ -40031,10 +39965,6 @@ msgstr "Nie udało się wykonać tej czynności, ponieważ nasze systemy bezpiec msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Twoje zgłoszenie oczekuje na rozpatrzenie. Nadal możesz zaktualizować szczegóły wpisu lub wycofać zgłoszenie." -#: src/features/auth/components/AltchaVerification.tsx:50 -msgid "Your browser couldn't finish the check." -msgstr "Twoja przeglądarka nie mogła dokończyć sprawdzania." - #. Body of the browser-audio-required modal explaining why the user must click before audio can play. #: src/features/voice/components/modals/AudioPlaybackPermissionModal.tsx:12 msgid "Your browser requires user interaction before audio can be played. Click the button below to enable voice chat." @@ -40386,7 +40316,7 @@ msgid "YouTube enrichment" msgstr "Wzbogacanie YouTube" #. Setup wizard title for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:977 +#: src/features/app/components/setup/SetupWizardSteps.tsx:970 msgid "YouTube previews" msgstr "Podglądy YouTube" diff --git a/fluxer_app/src/features/i18n/locales/pt-BR/messages.po b/fluxer_app/src/features/i18n/locales/pt-BR/messages.po index ccd34664c..227b6242a 100644 --- a/fluxer_app/src/features/i18n/locales/pt-BR/messages.po +++ b/fluxer_app/src/features/i18n/locales/pt-BR/messages.po @@ -2395,11 +2395,6 @@ msgstr "60 segundos" msgid "7 days" msgstr "7 dias" -#. Required-action error when the API requires a captcha for phone verification. -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 -msgid "A browser check is required before phone verification. Try again from the sign-in page or contact support." -msgstr "É necessária uma verificação no navegador antes da verificação por telefone. Tente novamente na página de login ou entre em contato com o suporte." - #. Hint shown beside in:. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:77 msgid "a channel" @@ -2928,7 +2923,7 @@ msgid "Add a friend to get started." msgstr "Adicione um amigo para começar." #. Setup wizard body for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:973 +#: src/features/app/components/setup/SetupWizardSteps.tsx:966 msgid "Add a Klipy API key to enable GIF search at runtime." msgstr "Adicione uma chave da Klipy API para ativar a pesquisa de GIFs durante a execução." @@ -2965,7 +2960,7 @@ msgid "Add a working email" msgstr "Adicione um e-mail válido" #. Setup wizard body for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:981 +#: src/features/app/components/setup/SetupWizardSteps.tsx:974 msgid "Add a YouTube Data API key to enrich YouTube links." msgstr "Adicione uma chave da YouTube Data API para enriquecer os links do YouTube." @@ -3011,7 +3006,7 @@ msgid "Add another reaction" msgstr "Adicionar outra reação" #. Setup wizard body for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1005 +#: src/features/app/components/setup/SetupWizardSteps.tsx:990 msgid "Add Bluesky OAuth client metadata and a signing key." msgstr "Adicione metadados do cliente OAuth do Bluesky e uma chave de assinatura." @@ -3161,7 +3156,7 @@ msgid "Add shortcut" msgstr "Adicionar atalho" #. Setup wizard body for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:997 +#: src/features/app/components/setup/SetupWizardSteps.tsx:982 msgid "Add SMTP credentials so the instance can send verification and notification email." msgstr "Adicione credenciais SMTP para que a instância possa enviar e-mails de verificação e notificação." @@ -3188,7 +3183,7 @@ msgid "Add stream" msgstr "Adicionar transmissão" #. Description for configuring an optional setup wizard integration now. -#: src/features/app/components/setup/SetupWizardSteps.tsx:965 +#: src/features/app/components/setup/SetupWizardSteps.tsx:958 msgid "Add the credentials during setup." msgstr "Adicione as credenciais durante a configuração." @@ -3954,7 +3949,7 @@ msgid "An invalid status was provided. You can now close this tab and return to msgstr "Foi fornecido um status inválido. Agora você pode fechar esta aba e voltar para o aplicativo." #. Short label in the authentication auth form. Keep the tone plain and specific. -#: src/features/auth/hooks/useAuthForm.ts:13 +#: src/features/auth/hooks/useAuthForm.ts:12 msgid "An unexpected error occurred" msgstr "Ocorreu um erro inesperado" @@ -4262,7 +4257,7 @@ msgid "Anyone can request an account, but an administrator must approve it." msgstr "Qualquer pessoa pode solicitar uma conta, mas um administrador precisa aprová-la." #. Label for an integration API key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1018 +#: src/features/app/components/setup/SetupWizardSteps.tsx:994 msgid "API key" msgstr "Chave de API" @@ -4958,7 +4953,7 @@ msgid "Authorized apps" msgstr "Aplicativos autorizados" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:38 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:37 msgid "Authorized IPs cleared. New logins will require email verification." msgstr "IPs autorizados apagados. Novos logins exigirão verificação por e-mail." @@ -5730,7 +5725,7 @@ msgid "Bluesky connections" msgstr "Conexões do Bluesky" #. Setup wizard title for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1001 +#: src/features/app/components/setup/SetupWizardSteps.tsx:986 msgid "Bluesky OAuth" msgstr "OAuth do Bluesky" @@ -5897,11 +5892,6 @@ msgstr "As permissões do bot não podem ser negativas." msgid "Bot profile" msgstr "Perfil do bot" -#. Setup wizard title for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:985 -msgid "Bot protection" -msgstr "Proteção contra bots" - #. Short label in the authentication OAUTH scopes step. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/OAuthScopesStep.tsx:20 msgid "Bot scope requested" @@ -6554,11 +6544,6 @@ msgstr "Não pode ser editado" msgid "Cannot delete account" msgstr "Não é possível excluir a conta" -#. Toast error shown when captcha verification fails inside the auth captcha interceptor. -#: src/features/auth/components/CaptchaInterceptor.tsx:15 -msgid "Captcha verification failed. Try again." -msgstr "A verificação do CAPTCHA falhou. Tente novamente." - #. Section header in the Linux audio source picker. Lists capture-target options (entire system / specific apps). #: src/features/voice/components/AudioSourcePickerLinux.tsx:50 msgid "Capture" @@ -7398,10 +7383,6 @@ msgstr "Verificando acesso..." msgid "Checking screen recording permission..." msgstr "Verificando a permissão de gravação de tela..." -#: src/features/auth/components/AltchaVerification.tsx:62 -msgid "Checking your browser. This takes a few seconds." -msgstr "Verificando seu navegador. Isso leva alguns segundos." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -7571,11 +7552,6 @@ msgstr "Escolha Arquivo e depois Adicionar ao Dock." msgid "Choose friends to message." msgstr "Escolha amigos para conversar." -#. Setup wizard body for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:989 -msgid "Choose hCaptcha or Cloudflare Turnstile for signup challenges." -msgstr "Escolha hCaptcha ou Cloudflare Turnstile para as verificações de cadastro." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:455 msgid "Choose how chat moves after you send a message" @@ -7982,17 +7958,17 @@ msgid "Clear selection" msgstr "Limpar seleção" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:88 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:87 msgid "Clear trust all setting" msgstr "Limpar configuração de \"confiar em todos\"" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:63 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:62 msgid "Clear trusted domains" msgstr "Limpar domínios confiáveis" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:96 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:95 msgid "Clear trusted domains ({trustedDomainsCount})" msgstr "Limpar domínios confiáveis ({trustedDomainsCount})" @@ -8002,7 +7978,7 @@ msgid "Clearer text" msgstr "Texto mais claro" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:108 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:107 msgid "Clearing trusted domains..." msgstr "Limpando domínios confiáveis..." @@ -8100,7 +8076,7 @@ msgid "Client" msgstr "Cliente" #. Label for Bluesky OAuth client name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1057 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1031 msgid "Client name" msgstr "Nome do cliente" @@ -8117,7 +8093,7 @@ msgid "Client secret regenerated. Update any code that uses the old secret." msgstr "Segredo do cliente gerado novamente. Atualize qualquer código que use o segredo antigo." #. Label for Bluesky OAuth client URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1061 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 msgid "Client URL" msgstr "URL do cliente" @@ -8269,11 +8245,6 @@ msgstr "Conversas por mensagem direta fechadas" msgid "Cloud upload" msgstr "Envio para a nuvem" -#. Cloudflare Turnstile provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1014 -msgid "Cloudflare Turnstile" -msgstr "Cloudflare Turnstile" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:58 msgid "Coal" @@ -8669,7 +8640,7 @@ msgstr "Nome da comunidade" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:126 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:125 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:113 msgid "Community nickname" msgstr "Apelido na comunidade" @@ -8722,7 +8693,7 @@ msgid "Community profile" msgstr "Perfil na comunidade" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:73 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:72 msgid "Community profile updated" msgstr "Perfil na comunidade atualizado" @@ -8880,7 +8851,7 @@ msgid "Configure keyboard shortcuts" msgstr "Configurar atalhos do teclado" #. Option for configuring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:961 +#: src/features/app/components/setup/SetupWizardSteps.tsx:954 msgid "Configure now" msgstr "Configurar agora" @@ -12341,7 +12312,7 @@ msgstr "Desconectar de {channel}" msgid "Disconnect from voice" msgstr "Desconectar da chamada de voz" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:261 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:243 msgid "Disconnect socket" msgstr "Desconectar socket" @@ -12479,7 +12450,7 @@ msgstr "Modo de exibição" #. Short label in the inputs tab. Keep it concise. #. Short label in the my profile tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:22 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:138 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:137 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:61 msgid "Display name" msgstr "Nome de exibição" @@ -12625,7 +12596,7 @@ msgstr "Deseja entrar em {communityName}?" #. Label in the accessibility tab. #. Label in the my profile tab. #: src/features/user/components/modals/tabs/AccessibilityTab.tsx:54 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:146 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:145 msgid "Doc, I'm from the future. I came here in a time machine that you invented. Now, I need your help to get back to the year 1985." msgstr "Doutor, eu sou do futuro. Vim parar aqui em uma máquina do tempo que você inventou. Agora, preciso da sua ajuda para voltar para o ano de 1985." @@ -13262,7 +13233,7 @@ msgid "Edit your messages above or below" msgstr "Editar suas mensagens acima ou abaixo" #. Button or menu action label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:93 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:92 msgid "Edit your profile appearance and see a live preview" msgstr "Edite a aparência do seu perfil e veja uma prévia ao vivo" @@ -13330,7 +13301,7 @@ msgid "Email changed" msgstr "E-mail alterado" #. Setup wizard title for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:993 +#: src/features/app/components/setup/SetupWizardSteps.tsx:978 msgid "Email delivery" msgstr "Entrega de e-mail" @@ -13635,7 +13606,7 @@ msgid "Enable beta feature" msgstr "Ativar recurso beta" #. Label for enabling Bluesky OAuth in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1053 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1027 msgid "Enable Bluesky OAuth" msgstr "Ativar OAuth do Bluesky" @@ -13668,7 +13639,7 @@ msgid "Enable developer mode" msgstr "Ativar modo de desenvolvedor" #. Label for enabling SMTP email delivery in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1021 +#: src/features/app/components/setup/SetupWizardSteps.tsx:995 msgid "Enable email delivery" msgstr "Ativar entrega de e-mail" @@ -14705,7 +14676,7 @@ msgid "Failed to ban member. Try again." msgstr "Falha ao banir membro. Tente novamente." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:59 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:58 msgid "Failed to clear trusted domains." msgstr "Não foi possível limpar os domínios confiáveis." @@ -14762,7 +14733,7 @@ msgid "Failed to enable camera." msgstr "Não foi possível ativar a câmera." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:42 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:41 msgid "Failed to forget authorized IPs. Try again." msgstr "Não foi possível remover os IPs autorizados. Tente novamente." @@ -14907,7 +14878,7 @@ msgid "Failed to resend verification code. Try again later." msgstr "Falha ao reenviar o código de verificação. Tente novamente mais tarde." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:75 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:74 msgid "Failed to reset premium state." msgstr "Falha ao redefinir o status premium." @@ -15581,7 +15552,7 @@ msgstr "Forçar esqueleto de carregamento" msgid "Force mature media" msgstr "Forçar mídia adulta" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:276 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:258 msgid "Force move to AFK channel" msgstr "Forçar mudança para o canal de ausência" @@ -15640,7 +15611,7 @@ msgid "Forced off" msgstr "Desativado à força" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:46 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:45 msgid "Forget authorized IPs" msgstr "Remover IPs autorizados" @@ -15650,7 +15621,7 @@ msgid "Forget subscriptions" msgstr "Esquecer assinaturas" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:104 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:103 msgid "Forgetting authorized IPs..." msgstr "Removendo IPs autorizados..." @@ -15907,12 +15878,12 @@ msgid "from <0>{0}" msgstr "de <0>{0}" #. Label for SMTP from email input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1025 +#: src/features/app/components/setup/SetupWizardSteps.tsx:999 msgid "From email" msgstr "E-mail do remetente" #. Label for SMTP from name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1029 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1003 msgid "From name" msgstr "Nome do remetente" @@ -16204,7 +16175,7 @@ msgid "GIF preview" msgstr "Prévia do GIF" #. Setup wizard title for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:969 +#: src/features/app/components/setup/SetupWizardSteps.tsx:962 msgid "GIF search" msgstr "Pesquisa de GIFs" @@ -16853,21 +16824,12 @@ msgstr "Tem um código de presente? Resgate-o para desbloquear {PREMIUM_PRODUCT_ msgid "Having fun?" msgstr "Está se divertindo?" -#: src/features/auth/components/modals/CaptchaModal.tsx:175 -msgid "Having issues? Try hCaptcha instead" -msgstr "Está com problemas? Tente o hCaptcha" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:63 msgctxt "us-state" msgid "Hawaii" msgstr "Havaí" -#. hCaptcha provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1013 -msgid "hCaptcha" -msgstr "hCaptcha" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:238 msgid "HD" @@ -19768,7 +19730,7 @@ msgid "Logo" msgstr "Logotipo" #. Label for Bluesky OAuth logo URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1065 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1039 msgid "Logo URL" msgstr "URL do logotipo" @@ -22941,7 +22903,7 @@ msgid "No tokens match \"{searchQuery}\"." msgstr "Nenhum token corresponde a \"{searchQuery}\"." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:92 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:91 msgid "No trusted domains" msgstr "Nenhum domínio confiável" @@ -23696,10 +23658,6 @@ msgstr "Abrir seletor do navegador" msgid "Open call view" msgstr "Abrir visualização da chamada" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:288 -msgid "Open captcha modal" -msgstr "Abrir janela de CAPTCHA" - #. Accessible label for the channel header title button in a community channel. #: src/features/channel/components/channel_header/shared.ts:14 msgid "Open channel details for {channelName}" @@ -23712,7 +23670,7 @@ msgstr "Abrir detalhes do canal {channelName}" msgid "Open chat" msgstr "Abrir chat" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:314 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:290 msgid "Open claim account modal" msgstr "Abrir janela para reivindicar a conta" @@ -23944,11 +23902,11 @@ msgstr "Abrir figurinha no navegador" msgid "Open streaming privacy settings" msgstr "Abrir configurações de privacidade de transmissão" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:327 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:303 msgid "Open sudo verification modal" msgstr "Abrir janela de verificação sudo" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:342 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:318 msgid "Open system DM" msgstr "Abrir mensagem direta do sistema" @@ -24430,7 +24388,7 @@ msgstr "As chaves de acesso exigem um pacote macOS assinado com um identificador #. Generic form-field label for a password. #. Label for SMTP password input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1036 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1010 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:146 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:183 @@ -25212,7 +25170,7 @@ msgid "Popup" msgstr "Pop-up" #. Label for SMTP port input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1034 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1008 msgid "Port" msgstr "Porta" @@ -25338,7 +25296,7 @@ msgid "Premium since date" msgstr "Premium desde" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:71 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:70 msgid "Premium state reset on the backend." msgstr "Status premium redefinido no servidor." @@ -25608,7 +25566,7 @@ msgid "Privacy settings" msgstr "Configurações de privacidade" #. Label for Bluesky OAuth privacy URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1073 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1047 msgid "Privacy URL" msgstr "URL de privacidade" @@ -25633,7 +25591,7 @@ msgid "Private details" msgstr "Detalhes privados" #. Label for Bluesky OAuth private key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1081 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1055 msgid "Private key" msgstr "Chave privada" @@ -25699,18 +25657,18 @@ msgstr "Cor do perfil" #. Settings section label for editing profile appearance and identity. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:105 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:104 #: src/features/user/components/settings_utils/section_registry/GeneralSettingsSections.ts:6 msgid "Profile customization" msgstr "Personalização do perfil" #. Label in the my profile tab. Preserve {selectedGuildName}; it is inserted by code. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:101 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:100 msgid "Profile customization for {selectedGuildName}" msgstr "Personalização de perfil para {selectedGuildName}" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:97 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:96 msgid "Profile customization form" msgstr "Formulário de personalização do perfil" @@ -25775,7 +25733,7 @@ msgid "Profile type" msgstr "Tipo de perfil" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:77 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:76 msgid "Profile updated" msgstr "Perfil atualizado" @@ -25812,7 +25770,7 @@ msgstr "Perguntar sobre novos dispositivos de áudio" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:142 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:141 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:177 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:160 msgid "Pronouns" @@ -25842,11 +25800,6 @@ msgstr "Informe o ID ou o nome de usuário da pessoa que você está denunciando msgid "Provide your full legal name for the declaration." msgstr "Informe seu nome completo para a declaração." -#. Label for an integration provider choice. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 -msgid "Provider" -msgstr "Provedor" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27626,7 +27579,7 @@ msgid "Reset password" msgstr "Redefinir senha" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:79 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:78 msgid "Reset premium state" msgstr "Redefinir status premium" @@ -27635,7 +27588,7 @@ msgstr "Redefinir status premium" msgid "Reset slider to default value" msgstr "Redefinir controle deslizante para o valor padrão" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:247 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:229 msgid "Reset socket" msgstr "Redefinir socket" @@ -27684,7 +27637,7 @@ msgid "Reset zoom" msgstr "Redefinir zoom" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:112 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:111 msgid "Resetting premium state..." msgstr "Redefinindo o status premium..." @@ -28315,7 +28268,7 @@ msgid "Run the instance as one community instead of many. This can only be enabl msgstr "Execute a instância como uma comunidade em vez de várias. Isso só pode ser ativado agora, durante a configuração." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:100 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:99 msgid "Runtime utilities" msgstr "Utilitários de tempo de execução" @@ -29103,11 +29056,6 @@ msgstr "Botão secundário clicado." msgid "Secret" msgstr "Segredo" -#. Label for a CAPTCHA secret key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1020 -msgid "Secret key" -msgstr "Chave secreta" - #. Settings search entry label. Names the settings search entry in the settings UI. #. Short label in the secrets section. Keep it concise. Keep the tone plain and specific. #: src/features/user/components/modals/tabs/applications_tab/application_detail/SecretsSection.tsx:11 @@ -29925,7 +29873,7 @@ msgid "Set up authenticator app" msgstr "Configurar app autenticador" #. Option for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:953 +#: src/features/app/components/setup/SetupWizardSteps.tsx:946 msgid "Set up later" msgstr "Configurar mais tarde" @@ -30427,7 +30375,7 @@ msgstr "Mostrar lista de mensagens diretas integrada à barra lateral" msgid "Show just the typing indicator without avatars" msgstr "Mostrar apenas o indicador de digitação, sem avatares" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:308 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:284 msgid "Show keyboard mode intro" msgstr "Mostrar introdução ao modo de teclado" @@ -30538,7 +30486,7 @@ msgstr "Mostrar Neko" msgid "Show new device alerts" msgstr "Mostrar alertas de novos aparelhos" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:282 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:264 msgid "Show new device modal" msgstr "Mostrar modal de novo aparelho" @@ -30820,7 +30768,7 @@ msgid "Signed-in devices" msgstr "Dispositivos conectados" #. Label for Bluesky OAuth signing key ID input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1077 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1051 msgid "Signing key ID" msgstr "ID da chave de assinatura" @@ -30910,11 +30858,6 @@ msgstr "Linha única" msgid "Single user (all statuses)" msgstr "Usuário único (todos os status)" -#. Label for a CAPTCHA site key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 -msgid "Site key" -msgstr "Chave do site" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:98 @@ -30964,7 +30907,7 @@ msgid "Skip the system leave notice — nobody gets pinged." msgstr "Pular o aviso de saída do sistema — ninguém será notificado." #. Description for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:957 +#: src/features/app/components/setup/SetupWizardSteps.tsx:950 msgid "Skip this now and configure it from the admin panel." msgstr "Pular isto agora e configurar no painel de administração." @@ -31212,17 +31155,17 @@ msgid "SMS verification is unavailable right now. Try again later or contact sup msgstr "A verificação por SMS está indisponível no momento. Tente novamente mais tarde ou entre em contato com o suporte." #. Success message after validating SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1045 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 msgid "SMTP connection verified." msgstr "Conexão SMTP verificada." #. Label for SMTP host input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1033 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1007 msgid "SMTP host" msgstr "Host SMTP" #. Failure message after validating SMTP credentials when the server returns no error detail. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1049 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1023 msgid "SMTP validation failed." msgstr "Falha na validação SMTP." @@ -31402,7 +31345,7 @@ msgstr "Algo deu errado. Tente novamente mais tarde." #. Inline error in the web deep-link prompt when opening the desktop app fails. #. Toast error shown when the mature content check request fails unexpectedly. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:18 -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:580 +#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 #: src/features/auth/flow/DesktopDeepLinkPrompt.tsx:31 msgid "Something went wrong. Try again." msgstr "Algo deu errado. Tente novamente." @@ -32099,6 +32042,11 @@ msgstr "Ainda indexando — volte em um instante" msgid "Still Neko" msgstr "Neko parado" +#. Small toast shown only when an automatic background check before sign-in, sign-up or a similar request takes more than a couple of seconds. No user action needed. Keep it short and calm. +#: src/features/auth/altcha/CaptchaInterceptor.ts:13 +msgid "Still working on it…" +msgstr "Ainda processando…" + #. Stop-recording button label in the desktop voice message composer. #: src/features/voice/components/VoiceMessageComposerModal.tsx:65 msgid "Stop" @@ -33013,7 +32961,7 @@ msgid "Terms of service" msgstr "Termos de serviço" #. Label for Bluesky OAuth terms URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1069 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1043 msgid "Terms URL" msgstr "URL dos termos" @@ -33023,7 +32971,7 @@ msgid "Terrorism or violent extremism" msgstr "Terrorismo ou extremismo violento" #. Button that validates SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1041 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1015 msgid "Test SMTP" msgstr "Testar SMTP" @@ -33800,7 +33748,7 @@ msgid "This clears quick CSS, imported themes, uploaded assets, and local file r msgstr "Isso limpa o CSS rápido, temas importados, arquivos enviados e referências de arquivos locais neste aparelho." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:83 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:82 msgid "This clears your backend premium state entirely, including premium type, billing metadata, and override flags." msgstr "Isso limpa completamente seu status premium no backend, incluindo tipo de premium, metadados de cobrança e sinalizadores de substituição." @@ -34200,7 +34148,7 @@ msgid "This message no longer exists." msgstr "Esta mensagem não existe mais." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:130 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:129 msgid "This nickname will only be visible in this community" msgstr "Este apelido só ficará visível nesta comunidade" @@ -34277,12 +34225,12 @@ msgid "This removes all custom CSS overrides. Theme files in your library are no msgstr "Isso remove todas as substituições de CSS personalizadas. Os arquivos de tema na sua biblioteca não serão afetados." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:50 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:49 msgid "This removes all previously authorized IP addresses on your account. The next login from any IP will require email verification." msgstr "Isso remove todos os endereços IP autorizados anteriormente na sua conta. O próximo login de qualquer IP exigirá verificação por e-mail." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:67 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:66 msgid "This removes all trusted domains. You will see the external link warning for all domains again." msgstr "Isso remove todos os domínios confiáveis. Você verá o aviso de link externo para todos os domínios novamente." @@ -34949,7 +34897,7 @@ msgstr "As alterações no ícone da bandeja só se aplicam após reiniciar no L msgid "Trending GIFs" msgstr "GIFs em alta" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:383 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:359 msgid "Trigger React crash" msgstr "Gerar erro no React" @@ -35008,7 +34956,7 @@ msgid "Trusted domains" msgstr "Domínios confiáveis" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:55 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:54 msgid "Trusted domains cleared." msgstr "Domínios confiáveis apagados." @@ -35054,7 +35002,6 @@ msgid "Try a different variable name or clear the search." msgstr "Tente um nome de variável diferente ou limpe a busca." #. Generic action label for retrying a failed or interrupted operation. -#: src/features/auth/components/AltchaVerification.tsx:53 #: src/features/auth/flow/AuthRouteLoadError.tsx:22 #: src/features/i18n/utils/CommonMessageDescriptors.ts:75 msgid "Try again" @@ -35132,10 +35079,6 @@ msgstr "Tentar uma chave de segurança ou chave de acesso" msgid "Try sending your message again." msgstr "Tente enviar sua mensagem novamente." -#: src/features/auth/components/modals/CaptchaModal.tsx:177 -msgid "Try Turnstile instead" -msgstr "Tentar Turnstile em vez disso" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:135 msgid "TTS" @@ -36890,7 +36833,7 @@ msgid "Use this when troubleshooting the client or collecting logs. It may add v msgstr "Use isso ao solucionar problemas do cliente ou coletar registros. Pode adicionar mensagens detalhadas ao console do navegador para o cliente atual." #. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1037 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1011 msgid "Use TLS" msgstr "Usar TLS" @@ -37056,7 +36999,7 @@ msgstr "Volume do usuário" #. Generic form-field label for a username. #. Label for SMTP username input. #. Settings search entry label. Also used as a search synonym in the settings search bar. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 #: src/features/i18n/utils/CommonMessageDescriptors.ts:572 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:218 #: src/features/user/components/modals/tabs/my_profile_tab/MyProfileTabUsernameSection.tsx:56 @@ -37337,11 +37280,6 @@ msgstr "Verificar número de telefone" msgid "Verify phone number form" msgstr "Formulário de verificação do número de telefone" -#. Short label in the authentication captcha modal. Keep the tone plain and specific. -#: src/features/auth/components/modals/CaptchaModal.tsx:17 -msgid "Verify you're human" -msgstr "Verifique se você é humano" - #. Title of the error modal shown when an unverified account tries to start a DM. #. Title shown when an unverified account cannot start a DM or group DM. #: src/features/app/components/alerts/DmActionErrorModal.tsx:40 @@ -37369,22 +37307,22 @@ msgid "Verify your email before adding an authenticator app." msgstr "Verifique seu e-mail antes de adicionar um aplicativo autenticador." #. Description text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:117 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:116 msgid "Verify your email before changing your community nickname, avatar, banner, bio, pronouns, or accent color." msgstr "Verifique seu e-mail antes de mudar seu apelido da comunidade, avatar, banner, biografia, pronomes ou cor de destaque." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:121 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:120 msgid "Verify your email before changing your username, display name, avatar, banner, bio, pronouns, time zone, or {premiumProductName} badge privacy." msgstr "Verifique seu e-mail antes de alterar seu nome de usuário, nome de exibição, avatar, banner, biografia, pronomes, fuso horário ou privacidade do selo {premiumProductName}." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:85 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:84 msgid "Verify your email before editing this community profile. You can still preview it here." msgstr "Verifique seu e-mail antes de editar seu perfil nesta comunidade. Você ainda pode ver uma prévia aqui." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:89 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:88 msgid "Verify your email before editing your profile. You can still preview it here." msgstr "Verifique seu e-mail antes de editar seu perfil. Você ainda pode pré-visualizá-lo aqui." @@ -37416,12 +37354,12 @@ msgid "Verify your email to continue using {productName}." msgstr "Verifique seu e-mail para continuar usando o {productName}." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:109 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:108 msgid "Verify your email to edit this community profile" msgstr "Verifique seu e-mail para editar seu perfil nesta comunidade" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:113 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:112 msgid "Verify your email to edit your profile" msgstr "Verifique seu e-mail para editar seu perfil" @@ -38398,10 +38336,6 @@ msgstr "Reduzimos o preço do {premiumProductName} no Brasil. Agora custa {month msgid "We need one verification step before you continue. This helps protect accounts and keep spam off {productName}." msgstr "Precisamos de uma etapa de verificação antes que você continue. Isso ajuda a proteger as contas e a manter o spam longe do {productName}." -#: src/features/auth/components/modals/CaptchaModal.tsx:128 -msgid "We need to make sure you're not a bot. Complete the verification below." -msgstr "Precisamos ter certeza de que você não é um robô. Conclua a verificação abaixo." - #. Required-action modal intro text when both email and phone verification are required. #: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:216 msgid "We need two verification steps before you continue. We will show one step at a time." @@ -39256,7 +39190,7 @@ msgid "You can't befriend yourself" msgstr "Você não pode adicionar a si mesmo(a) como amigo(a)" #. Label in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:134 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:133 msgid "You can't change your nickname here" msgstr "Você não pode mudar seu apelido aqui" @@ -39506,7 +39440,7 @@ msgid "You have unsaved changes." msgstr "Você tem alterações não salvas." #. Warning text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:81 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:80 msgid "You have unsaved changes. Save or reset before leaving." msgstr "Você tem alterações não salvas. Salve ou redefina antes de sair." @@ -40031,10 +39965,6 @@ msgstr "Não foi possível concluir sua ação porque ela foi sinalizada pelos n msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Sua inscrição está aguardando análise. Você ainda pode atualizar os detalhes da página da comunidade ou retirar a inscrição." -#: src/features/auth/components/AltchaVerification.tsx:50 -msgid "Your browser couldn't finish the check." -msgstr "Seu navegador não conseguiu concluir a verificação." - #. Body of the browser-audio-required modal explaining why the user must click before audio can play. #: src/features/voice/components/modals/AudioPlaybackPermissionModal.tsx:12 msgid "Your browser requires user interaction before audio can be played. Click the button below to enable voice chat." @@ -40386,7 +40316,7 @@ msgid "YouTube enrichment" msgstr "Prévias aprimoradas do YouTube" #. Setup wizard title for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:977 +#: src/features/app/components/setup/SetupWizardSteps.tsx:970 msgid "YouTube previews" msgstr "Prévias do YouTube" diff --git a/fluxer_app/src/features/i18n/locales/ro/messages.po b/fluxer_app/src/features/i18n/locales/ro/messages.po index d911dcf9c..ace689edf 100644 --- a/fluxer_app/src/features/i18n/locales/ro/messages.po +++ b/fluxer_app/src/features/i18n/locales/ro/messages.po @@ -2395,11 +2395,6 @@ msgstr "60 de secunde" msgid "7 days" msgstr "7 zile" -#. Required-action error when the API requires a captcha for phone verification. -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 -msgid "A browser check is required before phone verification. Try again from the sign-in page or contact support." -msgstr "Este necesară o verificare în browser înainte de verificarea telefonică. Încearcă din nou de pe pagina de conectare sau contactează asistența." - #. Hint shown beside in:. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:77 msgid "a channel" @@ -2928,7 +2923,7 @@ msgid "Add a friend to get started." msgstr "Adaugă un prieten pentru a începe." #. Setup wizard body for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:973 +#: src/features/app/components/setup/SetupWizardSteps.tsx:966 msgid "Add a Klipy API key to enable GIF search at runtime." msgstr "Adaugă o cheie API Klipy pentru a activa căutarea GIF-urilor la rulare." @@ -2965,7 +2960,7 @@ msgid "Add a working email" msgstr "Adaugă o adresă de e-mail funcțională" #. Setup wizard body for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:981 +#: src/features/app/components/setup/SetupWizardSteps.tsx:974 msgid "Add a YouTube Data API key to enrich YouTube links." msgstr "Adaugă o cheie API YouTube Data pentru a îmbogăți linkurile YouTube." @@ -3011,7 +3006,7 @@ msgid "Add another reaction" msgstr "Adaugă altă reacție" #. Setup wizard body for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1005 +#: src/features/app/components/setup/SetupWizardSteps.tsx:990 msgid "Add Bluesky OAuth client metadata and a signing key." msgstr "Adaugă metadate pentru clientul OAuth Bluesky și o cheie de semnare." @@ -3161,7 +3156,7 @@ msgid "Add shortcut" msgstr "Adaugă scurtătură" #. Setup wizard body for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:997 +#: src/features/app/components/setup/SetupWizardSteps.tsx:982 msgid "Add SMTP credentials so the instance can send verification and notification email." msgstr "Adaugă credențiale SMTP pentru ca instanța să poată trimite e-mailuri de verificare și notificare." @@ -3188,7 +3183,7 @@ msgid "Add stream" msgstr "Adaugă stream" #. Description for configuring an optional setup wizard integration now. -#: src/features/app/components/setup/SetupWizardSteps.tsx:965 +#: src/features/app/components/setup/SetupWizardSteps.tsx:958 msgid "Add the credentials during setup." msgstr "Adaugă credențialele în timpul configurării." @@ -3954,7 +3949,7 @@ msgid "An invalid status was provided. You can now close this tab and return to msgstr "A fost furnizată o stare nevalidă. Acum poți închide această filă și reveni la aplicație." #. Short label in the authentication auth form. Keep the tone plain and specific. -#: src/features/auth/hooks/useAuthForm.ts:13 +#: src/features/auth/hooks/useAuthForm.ts:12 msgid "An unexpected error occurred" msgstr "A apărut o eroare neașteptată" @@ -4262,7 +4257,7 @@ msgid "Anyone can request an account, but an administrator must approve it." msgstr "Oricine poate solicita un cont, dar un administrator trebuie să-l aprobe." #. Label for an integration API key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1018 +#: src/features/app/components/setup/SetupWizardSteps.tsx:994 msgid "API key" msgstr "Cheie API" @@ -4958,7 +4953,7 @@ msgid "Authorized apps" msgstr "Aplicații autorizate" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:38 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:37 msgid "Authorized IPs cleared. New logins will require email verification." msgstr "IP-urile autorizate au fost șterse. Noile autentificări vor necesita verificare prin e-mail." @@ -5730,7 +5725,7 @@ msgid "Bluesky connections" msgstr "Conexiuni Bluesky" #. Setup wizard title for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1001 +#: src/features/app/components/setup/SetupWizardSteps.tsx:986 msgid "Bluesky OAuth" msgstr "OAuth Bluesky" @@ -5897,11 +5892,6 @@ msgstr "Permisiunile botului nu pot fi negative." msgid "Bot profile" msgstr "Profil bot" -#. Setup wizard title for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:985 -msgid "Bot protection" -msgstr "Protecție împotriva boților" - #. Short label in the authentication OAUTH scopes step. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/OAuthScopesStep.tsx:20 msgid "Bot scope requested" @@ -6554,11 +6544,6 @@ msgstr "Nu se poate edita" msgid "Cannot delete account" msgstr "Nu se poate șterge contul" -#. Toast error shown when captcha verification fails inside the auth captcha interceptor. -#: src/features/auth/components/CaptchaInterceptor.tsx:15 -msgid "Captcha verification failed. Try again." -msgstr "Verificarea Captcha a eșuat. Încearcă din nou." - #. Section header in the Linux audio source picker. Lists capture-target options (entire system / specific apps). #: src/features/voice/components/AudioSourcePickerLinux.tsx:50 msgid "Capture" @@ -7398,10 +7383,6 @@ msgstr "Se verifică accesul..." msgid "Checking screen recording permission..." msgstr "Se verifică permisiunea de înregistrare a ecranului..." -#: src/features/auth/components/AltchaVerification.tsx:62 -msgid "Checking your browser. This takes a few seconds." -msgstr "Verificăm browserul. Durează câteva secunde." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -7571,11 +7552,6 @@ msgstr "Alege Fișier, apoi Adaugă în Dock." msgid "Choose friends to message." msgstr "Alege prieteni cărora să le trimiți mesaje." -#. Setup wizard body for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:989 -msgid "Choose hCaptcha or Cloudflare Turnstile for signup challenges." -msgstr "Alege hCaptcha sau Cloudflare Turnstile pentru verificările de la înregistrare." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:455 msgid "Choose how chat moves after you send a message" @@ -7982,17 +7958,17 @@ msgid "Clear selection" msgstr "Anulează selecția" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:88 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:87 msgid "Clear trust all setting" msgstr "Șterge setarea „încredere totală”" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:63 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:62 msgid "Clear trusted domains" msgstr "Șterge domeniile de încredere" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:96 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:95 msgid "Clear trusted domains ({trustedDomainsCount})" msgstr "Șterge domeniile de încredere ({trustedDomainsCount})" @@ -8002,7 +7978,7 @@ msgid "Clearer text" msgstr "Text mai clar" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:108 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:107 msgid "Clearing trusted domains..." msgstr "Se șterg domeniile de încredere..." @@ -8100,7 +8076,7 @@ msgid "Client" msgstr "Client" #. Label for Bluesky OAuth client name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1057 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1031 msgid "Client name" msgstr "Nume client" @@ -8117,7 +8093,7 @@ msgid "Client secret regenerated. Update any code that uses the old secret." msgstr "Secretul clientului a fost regenerat. Actualizează orice cod care folosește vechiul secret." #. Label for Bluesky OAuth client URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1061 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 msgid "Client URL" msgstr "URL client" @@ -8269,11 +8245,6 @@ msgstr "DM-uri închise" msgid "Cloud upload" msgstr "Încărcare în cloud" -#. Cloudflare Turnstile provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1014 -msgid "Cloudflare Turnstile" -msgstr "Cloudflare Turnstile" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:58 msgid "Coal" @@ -8669,7 +8640,7 @@ msgstr "Numele comunității" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:126 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:125 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:113 msgid "Community nickname" msgstr "Pseudonim în comunitate" @@ -8722,7 +8693,7 @@ msgid "Community profile" msgstr "Profilul comunității" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:73 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:72 msgid "Community profile updated" msgstr "Profilul comunității a fost actualizat" @@ -8880,7 +8851,7 @@ msgid "Configure keyboard shortcuts" msgstr "Configurează scurtăturile de la tastatură" #. Option for configuring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:961 +#: src/features/app/components/setup/SetupWizardSteps.tsx:954 msgid "Configure now" msgstr "Configurează acum" @@ -12341,7 +12312,7 @@ msgstr "Deconectare de la {channel}" msgid "Disconnect from voice" msgstr "Deconectare de la apelul vocal" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:261 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:243 msgid "Disconnect socket" msgstr "Deconectare socket" @@ -12479,7 +12450,7 @@ msgstr "Mod de afișare" #. Short label in the inputs tab. Keep it concise. #. Short label in the my profile tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:22 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:138 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:137 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:61 msgid "Display name" msgstr "Nume afișat" @@ -12625,7 +12596,7 @@ msgstr "Dorești să te alături la {communityName}?" #. Label in the accessibility tab. #. Label in the my profile tab. #: src/features/user/components/modals/tabs/AccessibilityTab.tsx:54 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:146 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:145 msgid "Doc, I'm from the future. I came here in a time machine that you invented. Now, I need your help to get back to the year 1985." msgstr "Doc, sunt din viitor. Am venit aici într-o mașină a timpului pe care ai inventat-o. Acum, am nevoie de ajutorul tău ca să mă întorc în anul 1985." @@ -13262,7 +13233,7 @@ msgid "Edit your messages above or below" msgstr "Editează-ți mesajele de deasupra sau de dedesubt" #. Button or menu action label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:93 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:92 msgid "Edit your profile appearance and see a live preview" msgstr "Editează-ți aspectul profilului și vezi o previzualizare live" @@ -13330,7 +13301,7 @@ msgid "Email changed" msgstr "E-mail modificat" #. Setup wizard title for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:993 +#: src/features/app/components/setup/SetupWizardSteps.tsx:978 msgid "Email delivery" msgstr "Livrare e-mail" @@ -13635,7 +13606,7 @@ msgid "Enable beta feature" msgstr "Activează funcția beta" #. Label for enabling Bluesky OAuth in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1053 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1027 msgid "Enable Bluesky OAuth" msgstr "Activare OAuth Bluesky" @@ -13668,7 +13639,7 @@ msgid "Enable developer mode" msgstr "Activează modul dezvoltator" #. Label for enabling SMTP email delivery in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1021 +#: src/features/app/components/setup/SetupWizardSteps.tsx:995 msgid "Enable email delivery" msgstr "Activează livrarea e-mailurilor" @@ -14705,7 +14676,7 @@ msgid "Failed to ban member. Try again." msgstr "Nu s-a putut bana membrul. Încearcă din nou." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:59 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:58 msgid "Failed to clear trusted domains." msgstr "Nu s-au putut șterge domeniile de încredere." @@ -14762,7 +14733,7 @@ msgid "Failed to enable camera." msgstr "Activarea camerei a eșuat." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:42 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:41 msgid "Failed to forget authorized IPs. Try again." msgstr "Nu s-au putut uita IP-urile autorizate. Încearcă din nou." @@ -14907,7 +14878,7 @@ msgid "Failed to resend verification code. Try again later." msgstr "Nu s-a putut retrimite codul de verificare. Încearcă din nou mai târziu." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:75 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:74 msgid "Failed to reset premium state." msgstr "Nu s-a putut reseta starea premium." @@ -15581,7 +15552,7 @@ msgstr "Forțează scheletul de încărcare" msgid "Force mature media" msgstr "Forțează conținut matur" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:276 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:258 msgid "Force move to AFK channel" msgstr "Forțează mutarea pe canalul AFK" @@ -15640,7 +15611,7 @@ msgid "Forced off" msgstr "Dezactivat forțat" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:46 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:45 msgid "Forget authorized IPs" msgstr "Uită IP-urile autorizate" @@ -15650,7 +15621,7 @@ msgid "Forget subscriptions" msgstr "Uită abonamentele" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:104 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:103 msgid "Forgetting authorized IPs..." msgstr "Se uită IP-urile autorizate..." @@ -15907,12 +15878,12 @@ msgid "from <0>{0}" msgstr "din <0>{0}" #. Label for SMTP from email input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1025 +#: src/features/app/components/setup/SetupWizardSteps.tsx:999 msgid "From email" msgstr "E-mail expeditor" #. Label for SMTP from name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1029 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1003 msgid "From name" msgstr "Nume expeditor" @@ -16204,7 +16175,7 @@ msgid "GIF preview" msgstr "Previzualizare GIF" #. Setup wizard title for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:969 +#: src/features/app/components/setup/SetupWizardSteps.tsx:962 msgid "GIF search" msgstr "Căutare GIF" @@ -16853,21 +16824,12 @@ msgstr "Ai un cod cadou? Valorifică-l pentru a debloca {PREMIUM_PRODUCT_NAME}." msgid "Having fun?" msgstr "Te distrezi?" -#: src/features/auth/components/modals/CaptchaModal.tsx:175 -msgid "Having issues? Try hCaptcha instead" -msgstr "Întâmpini probleme? Încearcă hCaptcha în schimb" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:63 msgctxt "us-state" msgid "Hawaii" msgstr "Hawaii" -#. hCaptcha provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1013 -msgid "hCaptcha" -msgstr "hCaptcha" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:238 msgid "HD" @@ -19768,7 +19730,7 @@ msgid "Logo" msgstr "Logo" #. Label for Bluesky OAuth logo URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1065 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1039 msgid "Logo URL" msgstr "URL logo" @@ -22941,7 +22903,7 @@ msgid "No tokens match \"{searchQuery}\"." msgstr "Niciun token nu se potrivește cu „{searchQuery}”." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:92 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:91 msgid "No trusted domains" msgstr "Niciun domeniu de încredere" @@ -23696,10 +23658,6 @@ msgstr "Deschide selectorul de browser" msgid "Open call view" msgstr "Deschide vizualizarea apelului" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:288 -msgid "Open captcha modal" -msgstr "Deschide fereastra captcha" - #. Accessible label for the channel header title button in a community channel. #: src/features/channel/components/channel_header/shared.ts:14 msgid "Open channel details for {channelName}" @@ -23712,7 +23670,7 @@ msgstr "Deschide detaliile canalului {channelName}" msgid "Open chat" msgstr "Deschide chatul" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:314 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:290 msgid "Open claim account modal" msgstr "Deschide fereastra modală Revendică contul" @@ -23944,11 +23902,11 @@ msgstr "Deschide stickerul în browser" msgid "Open streaming privacy settings" msgstr "Deschide setările de confidențialitate pentru streaming" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:327 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:303 msgid "Open sudo verification modal" msgstr "Deschide fereastra modală de verificare sudo" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:342 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:318 msgid "Open system DM" msgstr "Deschide DM-ul de sistem" @@ -24430,7 +24388,7 @@ msgstr "Cheile de acces necesită un pachet macOS semnat, cu un identificator de #. Generic form-field label for a password. #. Label for SMTP password input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1036 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1010 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:146 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:183 @@ -25212,7 +25170,7 @@ msgid "Popup" msgstr "Pop-up" #. Label for SMTP port input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1034 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1008 msgid "Port" msgstr "Port" @@ -25338,7 +25296,7 @@ msgid "Premium since date" msgstr "Premium de la data de" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:71 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:70 msgid "Premium state reset on the backend." msgstr "Starea premium a fost resetată în backend." @@ -25608,7 +25566,7 @@ msgid "Privacy settings" msgstr "Setări de confidențialitate" #. Label for Bluesky OAuth privacy URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1073 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1047 msgid "Privacy URL" msgstr "URL confidențialitate" @@ -25633,7 +25591,7 @@ msgid "Private details" msgstr "Detalii private" #. Label for Bluesky OAuth private key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1081 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1055 msgid "Private key" msgstr "Cheie privată" @@ -25699,18 +25657,18 @@ msgstr "Culoare profil" #. Settings section label for editing profile appearance and identity. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:105 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:104 #: src/features/user/components/settings_utils/section_registry/GeneralSettingsSections.ts:6 msgid "Profile customization" msgstr "Personalizare profil" #. Label in the my profile tab. Preserve {selectedGuildName}; it is inserted by code. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:101 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:100 msgid "Profile customization for {selectedGuildName}" msgstr "Personalizarea profilului pentru {selectedGuildName}" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:97 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:96 msgid "Profile customization form" msgstr "Formular de personalizare a profilului" @@ -25775,7 +25733,7 @@ msgid "Profile type" msgstr "Tip profil" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:77 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:76 msgid "Profile updated" msgstr "Profil actualizat" @@ -25812,7 +25770,7 @@ msgstr "Afișează o alertă când se conectează un dispozitiv audio nou" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:142 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:141 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:177 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:160 msgid "Pronouns" @@ -25842,11 +25800,6 @@ msgstr "Introdu un ID de utilizator sau un nume de utilizator pentru persoana pe msgid "Provide your full legal name for the declaration." msgstr "Introdu numele legal complet pentru declarație." -#. Label for an integration provider choice. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 -msgid "Provider" -msgstr "Furnizor" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27626,7 +27579,7 @@ msgid "Reset password" msgstr "Resetare parolă" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:79 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:78 msgid "Reset premium state" msgstr "Resetează starea premium" @@ -27635,7 +27588,7 @@ msgstr "Resetează starea premium" msgid "Reset slider to default value" msgstr "Resetează glisorul la valoarea implicită" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:247 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:229 msgid "Reset socket" msgstr "Resetează socketul" @@ -27684,7 +27637,7 @@ msgid "Reset zoom" msgstr "Resetare zoom" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:112 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:111 msgid "Resetting premium state..." msgstr "Se resetează starea premium..." @@ -28315,7 +28268,7 @@ msgid "Run the instance as one community instead of many. This can only be enabl msgstr "Rulează instanța ca o singură comunitate în loc de mai multe. Aceasta poate fi activată doar acum, în timpul configurării." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:100 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:99 msgid "Runtime utilities" msgstr "Utilitare runtime" @@ -29103,11 +29056,6 @@ msgstr "S-a apăsat butonul secundar." msgid "Secret" msgstr "Secret" -#. Label for a CAPTCHA secret key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1020 -msgid "Secret key" -msgstr "Cheie secretă" - #. Settings search entry label. Names the settings search entry in the settings UI. #. Short label in the secrets section. Keep it concise. Keep the tone plain and specific. #: src/features/user/components/modals/tabs/applications_tab/application_detail/SecretsSection.tsx:11 @@ -29925,7 +29873,7 @@ msgid "Set up authenticator app" msgstr "Configurează aplicația de autentificare" #. Option for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:953 +#: src/features/app/components/setup/SetupWizardSteps.tsx:946 msgid "Set up later" msgstr "Configurează mai târziu" @@ -30427,7 +30375,7 @@ msgstr "Afișează lista de DM-uri în linie" msgid "Show just the typing indicator without avatars" msgstr "Afișează doar indicatorul de tastare, fără avatare" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:308 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:284 msgid "Show keyboard mode intro" msgstr "Afișează introducerea modului tastatură" @@ -30538,7 +30486,7 @@ msgstr "Afișează Neko" msgid "Show new device alerts" msgstr "Afișează alerte pentru dispozitive noi" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:282 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:264 msgid "Show new device modal" msgstr "Afișează fereastra modală pentru dispozitiv nou" @@ -30820,7 +30768,7 @@ msgid "Signed-in devices" msgstr "Dispozitive conectate" #. Label for Bluesky OAuth signing key ID input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1077 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1051 msgid "Signing key ID" msgstr "ID cheie de semnare" @@ -30910,11 +30858,6 @@ msgstr "O singură linie" msgid "Single user (all statuses)" msgstr "Utilizator unic (toate statusurile)" -#. Label for a CAPTCHA site key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 -msgid "Site key" -msgstr "Cheie de site" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:98 @@ -30964,7 +30907,7 @@ msgid "Skip the system leave notice — nobody gets pinged." msgstr "Omite mesajul de sistem despre părăsirea grupului. Nimeni nu primește notificare." #. Description for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:957 +#: src/features/app/components/setup/SetupWizardSteps.tsx:950 msgid "Skip this now and configure it from the admin panel." msgstr "Omite acum și configurează din panoul de administrare." @@ -31212,17 +31155,17 @@ msgid "SMS verification is unavailable right now. Try again later or contact sup msgstr "Verificarea prin SMS nu este disponibilă momentan. Încearcă din nou mai târziu sau contactează asistența." #. Success message after validating SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1045 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 msgid "SMTP connection verified." msgstr "Conexiune SMTP verificată." #. Label for SMTP host input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1033 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1007 msgid "SMTP host" msgstr "Gazdă SMTP" #. Failure message after validating SMTP credentials when the server returns no error detail. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1049 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1023 msgid "SMTP validation failed." msgstr "Validarea SMTP a eșuat." @@ -31402,7 +31345,7 @@ msgstr "Ceva nu a mers bine. Încearcă din nou mai târziu." #. Inline error in the web deep-link prompt when opening the desktop app fails. #. Toast error shown when the mature content check request fails unexpectedly. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:18 -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:580 +#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 #: src/features/auth/flow/DesktopDeepLinkPrompt.tsx:31 msgid "Something went wrong. Try again." msgstr "Ceva nu a mers bine. Încearcă din nou." @@ -32099,6 +32042,11 @@ msgstr "Se indexează în continuare — revino în scurt timp" msgid "Still Neko" msgstr "Neko nemișcat" +#. Small toast shown only when an automatic background check before sign-in, sign-up or a similar request takes more than a couple of seconds. No user action needed. Keep it short and calm. +#: src/features/auth/altcha/CaptchaInterceptor.ts:13 +msgid "Still working on it…" +msgstr "Încă procesăm…" + #. Stop-recording button label in the desktop voice message composer. #: src/features/voice/components/VoiceMessageComposerModal.tsx:65 msgid "Stop" @@ -33013,7 +32961,7 @@ msgid "Terms of service" msgstr "Termeni și condiții" #. Label for Bluesky OAuth terms URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1069 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1043 msgid "Terms URL" msgstr "URL termeni" @@ -33023,7 +32971,7 @@ msgid "Terrorism or violent extremism" msgstr "Terorism sau extremism violent" #. Button that validates SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1041 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1015 msgid "Test SMTP" msgstr "Testează SMTP" @@ -33800,7 +33748,7 @@ msgid "This clears quick CSS, imported themes, uploaded assets, and local file r msgstr "Aceasta șterge CSS-ul rapid, temele importate, elementele încărcate și referințele fișierelor locale de pe acest dispozitiv." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:83 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:82 msgid "This clears your backend premium state entirely, including premium type, billing metadata, and override flags." msgstr "Aceasta șterge complet starea ta premium din backend, inclusiv tipul de premium, metadatele de facturare și indicatorii de suprascriere." @@ -34200,7 +34148,7 @@ msgid "This message no longer exists." msgstr "Acest mesaj nu mai există." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:130 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:129 msgid "This nickname will only be visible in this community" msgstr "Acest pseudonim va fi vizibil doar în această comunitate" @@ -34277,12 +34225,12 @@ msgid "This removes all custom CSS overrides. Theme files in your library are no msgstr "Aceasta elimină toate suprascrierile CSS personalizate. Fișierele de temă din biblioteca ta nu sunt afectate." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:50 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:49 msgid "This removes all previously authorized IP addresses on your account. The next login from any IP will require email verification." msgstr "Aceasta elimină toate adresele IP autorizate anterior din contul tău. Următoarea autentificare de pe orice IP va necesita verificarea prin e-mail." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:67 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:66 msgid "This removes all trusted domains. You will see the external link warning for all domains again." msgstr "Aceasta elimină toate domeniile de încredere. Vei vedea din nou avertismentul pentru linkuri externe la toate domeniile." @@ -34949,7 +34897,7 @@ msgstr "Modificările pictogramei din bara de sistem se aplică numai după o re msgid "Trending GIFs" msgstr "GIF-uri populare" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:383 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:359 msgid "Trigger React crash" msgstr "Declanșează o eroare React" @@ -35008,7 +34956,7 @@ msgid "Trusted domains" msgstr "Domenii de încredere" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:55 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:54 msgid "Trusted domains cleared." msgstr "Domeniile de încredere au fost șterse." @@ -35054,7 +35002,6 @@ msgid "Try a different variable name or clear the search." msgstr "Încearcă un alt nume de variabilă sau șterge căutarea." #. Generic action label for retrying a failed or interrupted operation. -#: src/features/auth/components/AltchaVerification.tsx:53 #: src/features/auth/flow/AuthRouteLoadError.tsx:22 #: src/features/i18n/utils/CommonMessageDescriptors.ts:75 msgid "Try again" @@ -35132,10 +35079,6 @@ msgstr "Încearcă în schimb o cheie de securitate / cheie de acces" msgid "Try sending your message again." msgstr "Încearcă să trimiți din nou mesajul." -#: src/features/auth/components/modals/CaptchaModal.tsx:177 -msgid "Try Turnstile instead" -msgstr "Încearcă Turnstile în schimb" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:135 msgid "TTS" @@ -36890,7 +36833,7 @@ msgid "Use this when troubleshooting the client or collecting logs. It may add v msgstr "Folosește asta când depanezi aplicația sau colectezi jurnale. Poate adăuga mesaje detaliate în consola browserului pentru clientul curent." #. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1037 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1011 msgid "Use TLS" msgstr "Folosește TLS" @@ -37056,7 +36999,7 @@ msgstr "Volum utilizator" #. Generic form-field label for a username. #. Label for SMTP username input. #. Settings search entry label. Also used as a search synonym in the settings search bar. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 #: src/features/i18n/utils/CommonMessageDescriptors.ts:572 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:218 #: src/features/user/components/modals/tabs/my_profile_tab/MyProfileTabUsernameSection.tsx:56 @@ -37337,11 +37280,6 @@ msgstr "Verifică numărul de telefon" msgid "Verify phone number form" msgstr "Formular de verificare a numărului de telefon" -#. Short label in the authentication captcha modal. Keep the tone plain and specific. -#: src/features/auth/components/modals/CaptchaModal.tsx:17 -msgid "Verify you're human" -msgstr "Confirmă că ești om" - #. Title of the error modal shown when an unverified account tries to start a DM. #. Title shown when an unverified account cannot start a DM or group DM. #: src/features/app/components/alerts/DmActionErrorModal.tsx:40 @@ -37369,22 +37307,22 @@ msgid "Verify your email before adding an authenticator app." msgstr "Verifică-ți adresa de e-mail înainte de a adăuga o aplicație de autentificare." #. Description text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:117 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:116 msgid "Verify your email before changing your community nickname, avatar, banner, bio, pronouns, or accent color." msgstr "Verifică-ți adresa de e-mail înainte de a-ți schimba pseudonimul din comunitate, avatarul, bannerul, biografia, pronumele sau culoarea de accent." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:121 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:120 msgid "Verify your email before changing your username, display name, avatar, banner, bio, pronouns, time zone, or {premiumProductName} badge privacy." msgstr "Verifică-ți adresa de e-mail înainte de a-ți schimba numele de utilizator, numele afișat, avatarul, bannerul, biografia, pronumele, fusul orar sau confidențialitatea insignei {premiumProductName}." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:85 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:84 msgid "Verify your email before editing this community profile. You can still preview it here." msgstr "Verifică-ți adresa de e-mail înainte de a edita acest profil de comunitate. Îl poți previzualiza în continuare aici." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:89 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:88 msgid "Verify your email before editing your profile. You can still preview it here." msgstr "Verifică-ți adresa de e-mail înainte de a-ți edita profilul. Îl poți previzualiza în continuare aici." @@ -37416,12 +37354,12 @@ msgid "Verify your email to continue using {productName}." msgstr "Verifică-ți adresa de e-mail pentru a continua să folosești {productName}." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:109 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:108 msgid "Verify your email to edit this community profile" msgstr "Verifică-ți adresa de e-mail pentru a edita acest profil de comunitate" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:113 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:112 msgid "Verify your email to edit your profile" msgstr "Verifică-ți adresa de e-mail pentru a-ți edita profilul" @@ -38398,10 +38336,6 @@ msgstr "Am redus prețul pentru {premiumProductName} în Brazilia. Acum este {mo msgid "We need one verification step before you continue. This helps protect accounts and keep spam off {productName}." msgstr "Mai este necesar un pas de verificare înainte de a continua. Acest lucru ajută la protejarea conturilor și la eliminarea spamului de pe {productName}." -#: src/features/auth/components/modals/CaptchaModal.tsx:128 -msgid "We need to make sure you're not a bot. Complete the verification below." -msgstr "Trebuie să ne asigurăm că nu ești un bot. Completează verificarea de mai jos." - #. Required-action modal intro text when both email and phone verification are required. #: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:216 msgid "We need two verification steps before you continue. We will show one step at a time." @@ -39256,7 +39190,7 @@ msgid "You can't befriend yourself" msgstr "Nu te poți adăuga pe tine ca prieten" #. Label in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:134 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:133 msgid "You can't change your nickname here" msgstr "Nu-ți poți schimba pseudonimul aici" @@ -39506,7 +39440,7 @@ msgid "You have unsaved changes." msgstr "Ai modificări nesalvate." #. Warning text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:81 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:80 msgid "You have unsaved changes. Save or reset before leaving." msgstr "Ai modificări nesalvate. Salvează sau resetează înainte de a pleca." @@ -40031,10 +39965,6 @@ msgstr "Acțiunea ta nu a putut fi finalizată deoarece a fost semnalată de sis msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Cererea ta este în curs de examinare. Poți actualiza în continuare detaliile listării sau poți retrage cererea." -#: src/features/auth/components/AltchaVerification.tsx:50 -msgid "Your browser couldn't finish the check." -msgstr "Browserul tău nu a putut finaliza verificarea." - #. Body of the browser-audio-required modal explaining why the user must click before audio can play. #: src/features/voice/components/modals/AudioPlaybackPermissionModal.tsx:12 msgid "Your browser requires user interaction before audio can be played. Click the button below to enable voice chat." @@ -40386,7 +40316,7 @@ msgid "YouTube enrichment" msgstr "Îmbogățire YouTube" #. Setup wizard title for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:977 +#: src/features/app/components/setup/SetupWizardSteps.tsx:970 msgid "YouTube previews" msgstr "Previzualizări YouTube" diff --git a/fluxer_app/src/features/i18n/locales/ru/messages.po b/fluxer_app/src/features/i18n/locales/ru/messages.po index f6ac71f06..f4a0e1c73 100644 --- a/fluxer_app/src/features/i18n/locales/ru/messages.po +++ b/fluxer_app/src/features/i18n/locales/ru/messages.po @@ -2395,11 +2395,6 @@ msgstr "60 секунд" msgid "7 days" msgstr "7 дней" -#. Required-action error when the API requires a captcha for phone verification. -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 -msgid "A browser check is required before phone verification. Try again from the sign-in page or contact support." -msgstr "Перед подтверждением номера телефона требуется проверка в браузере. Повторите попытку со страницы входа или обратитесь в службу поддержки." - #. Hint shown beside in:. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:77 msgid "a channel" @@ -2928,7 +2923,7 @@ msgid "Add a friend to get started." msgstr "Добавьте друга, чтобы начать." #. Setup wizard body for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:973 +#: src/features/app/components/setup/SetupWizardSteps.tsx:966 msgid "Add a Klipy API key to enable GIF search at runtime." msgstr "Добавьте API-ключ Klipy, чтобы включить поиск GIF во время выполнения." @@ -2965,7 +2960,7 @@ msgid "Add a working email" msgstr "Добавьте действующий адрес эл. почты" #. Setup wizard body for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:981 +#: src/features/app/components/setup/SetupWizardSteps.tsx:974 msgid "Add a YouTube Data API key to enrich YouTube links." msgstr "Добавьте API-ключ YouTube Data, чтобы дополнять ссылки на YouTube." @@ -3011,7 +3006,7 @@ msgid "Add another reaction" msgstr "Добавить ещё одну реакцию" #. Setup wizard body for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1005 +#: src/features/app/components/setup/SetupWizardSteps.tsx:990 msgid "Add Bluesky OAuth client metadata and a signing key." msgstr "Добавьте метаданные клиента OAuth Bluesky и ключ подписи." @@ -3161,7 +3156,7 @@ msgid "Add shortcut" msgstr "Добавить сочетание клавиш" #. Setup wizard body for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:997 +#: src/features/app/components/setup/SetupWizardSteps.tsx:982 msgid "Add SMTP credentials so the instance can send verification and notification email." msgstr "Добавьте учетные данные SMTP, чтобы экземпляр мог отправлять письма для подтверждения и уведомления." @@ -3188,7 +3183,7 @@ msgid "Add stream" msgstr "Добавить трансляцию" #. Description for configuring an optional setup wizard integration now. -#: src/features/app/components/setup/SetupWizardSteps.tsx:965 +#: src/features/app/components/setup/SetupWizardSteps.tsx:958 msgid "Add the credentials during setup." msgstr "Добавьте учетные данные во время настройки." @@ -3954,7 +3949,7 @@ msgid "An invalid status was provided. You can now close this tab and return to msgstr "Указан неверный статус. Теперь вы можете закрыть эту вкладку и вернуться в приложение." #. Short label in the authentication auth form. Keep the tone plain and specific. -#: src/features/auth/hooks/useAuthForm.ts:13 +#: src/features/auth/hooks/useAuthForm.ts:12 msgid "An unexpected error occurred" msgstr "Произошла непредвиденная ошибка" @@ -4262,7 +4257,7 @@ msgid "Anyone can request an account, but an administrator must approve it." msgstr "Любой может запросить аккаунт, но администратор должен его одобрить." #. Label for an integration API key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1018 +#: src/features/app/components/setup/SetupWizardSteps.tsx:994 msgid "API key" msgstr "API-ключ" @@ -4958,7 +4953,7 @@ msgid "Authorized apps" msgstr "Авторизованные приложения" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:38 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:37 msgid "Authorized IPs cleared. New logins will require email verification." msgstr "Список авторизованных IP-адресов очищен. Для новых входов потребуется подтверждение по почте." @@ -5730,7 +5725,7 @@ msgid "Bluesky connections" msgstr "Подключения Bluesky" #. Setup wizard title for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1001 +#: src/features/app/components/setup/SetupWizardSteps.tsx:986 msgid "Bluesky OAuth" msgstr "OAuth Bluesky" @@ -5897,11 +5892,6 @@ msgstr "Разрешения бота не могут быть отрицате msgid "Bot profile" msgstr "Профиль бота" -#. Setup wizard title for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:985 -msgid "Bot protection" -msgstr "Защита от ботов" - #. Short label in the authentication OAUTH scopes step. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/OAuthScopesStep.tsx:20 msgid "Bot scope requested" @@ -6554,11 +6544,6 @@ msgstr "Нельзя редактировать" msgid "Cannot delete account" msgstr "Невозможно удалить аккаунт" -#. Toast error shown when captcha verification fails inside the auth captcha interceptor. -#: src/features/auth/components/CaptchaInterceptor.tsx:15 -msgid "Captcha verification failed. Try again." -msgstr "Проверка капчи не удалась. Попробуйте ещё раз." - #. Section header in the Linux audio source picker. Lists capture-target options (entire system / specific apps). #: src/features/voice/components/AudioSourcePickerLinux.tsx:50 msgid "Capture" @@ -7398,10 +7383,6 @@ msgstr "Проверка доступа..." msgid "Checking screen recording permission..." msgstr "Проверка разрешения на запись экрана..." -#: src/features/auth/components/AltchaVerification.tsx:62 -msgid "Checking your browser. This takes a few seconds." -msgstr "Проверяем ваш браузер. Это займет несколько секунд." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -7571,11 +7552,6 @@ msgstr "Выберите «Файл», затем «Добавить в Dock»." msgid "Choose friends to message." msgstr "Выберите друзей для переписки." -#. Setup wizard body for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:989 -msgid "Choose hCaptcha or Cloudflare Turnstile for signup challenges." -msgstr "Выберите hCaptcha или Cloudflare Turnstile для проверок при регистрации." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:455 msgid "Choose how chat moves after you send a message" @@ -7982,17 +7958,17 @@ msgid "Clear selection" msgstr "Снять выбор" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:88 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:87 msgid "Clear trust all setting" msgstr "Сбросить настройки доверия" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:63 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:62 msgid "Clear trusted domains" msgstr "Очистить доверенные домены" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:96 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:95 msgid "Clear trusted domains ({trustedDomainsCount})" msgstr "Очистить доверенные домены ({trustedDomainsCount})" @@ -8002,7 +7978,7 @@ msgid "Clearer text" msgstr "Более четкий текст" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:108 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:107 msgid "Clearing trusted domains..." msgstr "Очистка доверенных доменов..." @@ -8100,7 +8076,7 @@ msgid "Client" msgstr "Клиент" #. Label for Bluesky OAuth client name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1057 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1031 msgid "Client name" msgstr "Название клиента" @@ -8117,7 +8093,7 @@ msgid "Client secret regenerated. Update any code that uses the old secret." msgstr "Секрет клиента перевыпущен. Обновите код, который использует старый секрет." #. Label for Bluesky OAuth client URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1061 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 msgid "Client URL" msgstr "URL клиента" @@ -8269,11 +8245,6 @@ msgstr "Закрытые личные чаты" msgid "Cloud upload" msgstr "Загрузка в облако" -#. Cloudflare Turnstile provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1014 -msgid "Cloudflare Turnstile" -msgstr "Cloudflare Turnstile" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:58 msgid "Coal" @@ -8669,7 +8640,7 @@ msgstr "Название сообщества" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:126 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:125 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:113 msgid "Community nickname" msgstr "Никнейм в сообществе" @@ -8722,7 +8693,7 @@ msgid "Community profile" msgstr "Профиль сообщества" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:73 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:72 msgid "Community profile updated" msgstr "Профиль сообщества обновлен" @@ -8880,7 +8851,7 @@ msgid "Configure keyboard shortcuts" msgstr "Настроить быстрые клавиши" #. Option for configuring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:961 +#: src/features/app/components/setup/SetupWizardSteps.tsx:954 msgid "Configure now" msgstr "Настроить сейчас" @@ -12341,7 +12312,7 @@ msgstr "Отключиться от {channel}" msgid "Disconnect from voice" msgstr "Отключиться от голосового чата" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:261 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:243 msgid "Disconnect socket" msgstr "Отключить сокет" @@ -12479,7 +12450,7 @@ msgstr "Режим отображения" #. Short label in the inputs tab. Keep it concise. #. Short label in the my profile tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:22 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:138 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:137 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:61 msgid "Display name" msgstr "Отображаемое имя" @@ -12625,7 +12596,7 @@ msgstr "Вы хотите присоединиться к {communityName}?" #. Label in the accessibility tab. #. Label in the my profile tab. #: src/features/user/components/modals/tabs/AccessibilityTab.tsx:54 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:146 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:145 msgid "Doc, I'm from the future. I came here in a time machine that you invented. Now, I need your help to get back to the year 1985." msgstr "Док, я из будущего. Я прибыл сюда на машине времени, которую вы изобрели. Теперь мне нужна ваша помощь, чтобы вернуться в 1985 год." @@ -13262,7 +13233,7 @@ msgid "Edit your messages above or below" msgstr "Изменить свои сообщения выше или ниже" #. Button or menu action label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:93 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:92 msgid "Edit your profile appearance and see a live preview" msgstr "Измените свой профиль и посмотрите, как он будет выглядеть" @@ -13330,7 +13301,7 @@ msgid "Email changed" msgstr "Эл. почта изменена" #. Setup wizard title for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:993 +#: src/features/app/components/setup/SetupWizardSteps.tsx:978 msgid "Email delivery" msgstr "Доставка электронной почты" @@ -13635,7 +13606,7 @@ msgid "Enable beta feature" msgstr "Включить бета-функцию" #. Label for enabling Bluesky OAuth in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1053 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1027 msgid "Enable Bluesky OAuth" msgstr "Включить OAuth для Bluesky" @@ -13668,7 +13639,7 @@ msgid "Enable developer mode" msgstr "Включить режим разработчика" #. Label for enabling SMTP email delivery in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1021 +#: src/features/app/components/setup/SetupWizardSteps.tsx:995 msgid "Enable email delivery" msgstr "Включить доставку электронной почты" @@ -14705,7 +14676,7 @@ msgid "Failed to ban member. Try again." msgstr "Не удалось забанить участника. Повторите попытку." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:59 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:58 msgid "Failed to clear trusted domains." msgstr "Не удалось очистить список доверенных доменов." @@ -14762,7 +14733,7 @@ msgid "Failed to enable camera." msgstr "Не удалось включить камеру." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:42 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:41 msgid "Failed to forget authorized IPs. Try again." msgstr "Не удалось забыть авторизованные IP-адреса. Повторите попытку." @@ -14907,7 +14878,7 @@ msgid "Failed to resend verification code. Try again later." msgstr "Не удалось отправить код подтверждения повторно. Повторите попытку позже." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:75 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:74 msgid "Failed to reset premium state." msgstr "Не удалось сбросить премиум-статус." @@ -15581,7 +15552,7 @@ msgstr "Принудительно показывать скелет загру msgid "Force mature media" msgstr "Принудительно показывать медиа для взрослых" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:276 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:258 msgid "Force move to AFK channel" msgstr "Принудительно переместить в AFK-канал" @@ -15640,7 +15611,7 @@ msgid "Forced off" msgstr "Отключено принудительно" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:46 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:45 msgid "Forget authorized IPs" msgstr "Забыть авторизованные IP-адреса" @@ -15650,7 +15621,7 @@ msgid "Forget subscriptions" msgstr "Удалить подписки" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:104 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:103 msgid "Forgetting authorized IPs..." msgstr "Забываем авторизованные IP-адреса…" @@ -15907,12 +15878,12 @@ msgid "from <0>{0}" msgstr "из <0>{0}" #. Label for SMTP from email input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1025 +#: src/features/app/components/setup/SetupWizardSteps.tsx:999 msgid "From email" msgstr "Эл. почта отправителя" #. Label for SMTP from name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1029 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1003 msgid "From name" msgstr "Имя отправителя" @@ -16204,7 +16175,7 @@ msgid "GIF preview" msgstr "Предпросмотр GIF" #. Setup wizard title for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:969 +#: src/features/app/components/setup/SetupWizardSteps.tsx:962 msgid "GIF search" msgstr "Поиск GIF" @@ -16853,21 +16824,12 @@ msgstr "Есть подарочный код? Активируйте его, ч msgid "Having fun?" msgstr "Веселитесь?" -#: src/features/auth/components/modals/CaptchaModal.tsx:175 -msgid "Having issues? Try hCaptcha instead" -msgstr "Возникли проблемы? Попробуйте hCaptcha" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:63 msgctxt "us-state" msgid "Hawaii" msgstr "Гавайи" -#. hCaptcha provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1013 -msgid "hCaptcha" -msgstr "hCaptcha" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:238 msgid "HD" @@ -19768,7 +19730,7 @@ msgid "Logo" msgstr "Логотип" #. Label for Bluesky OAuth logo URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1065 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1039 msgid "Logo URL" msgstr "URL логотипа" @@ -22941,7 +22903,7 @@ msgid "No tokens match \"{searchQuery}\"." msgstr "Токенов, соответствующих запросу «{searchQuery}», не найдено." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:92 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:91 msgid "No trusted domains" msgstr "Нет доверенных доменов" @@ -23696,10 +23658,6 @@ msgstr "Открыть выбор источника в браузере" msgid "Open call view" msgstr "Открыть звонок" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:288 -msgid "Open captcha modal" -msgstr "Открыть модальное окно капчи" - #. Accessible label for the channel header title button in a community channel. #: src/features/channel/components/channel_header/shared.ts:14 msgid "Open channel details for {channelName}" @@ -23712,7 +23670,7 @@ msgstr "Открыть информацию о канале «{channelName}»" msgid "Open chat" msgstr "Открыть чат" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:314 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:290 msgid "Open claim account modal" msgstr "Открыть модальное окно подтверждения аккаунта" @@ -23944,11 +23902,11 @@ msgstr "Открыть стикер в браузере" msgid "Open streaming privacy settings" msgstr "Открыть настройки конфиденциальности трансляций" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:327 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:303 msgid "Open sudo verification modal" msgstr "Открыть окно подтверждения sudo" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:342 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:318 msgid "Open system DM" msgstr "Открыть системный чат" @@ -24430,7 +24388,7 @@ msgstr "Для ключей доступа требуется подписанн #. Generic form-field label for a password. #. Label for SMTP password input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1036 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1010 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:146 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:183 @@ -25212,7 +25170,7 @@ msgid "Popup" msgstr "Всплывающее окно" #. Label for SMTP port input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1034 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1008 msgid "Port" msgstr "Порт" @@ -25338,7 +25296,7 @@ msgid "Premium since date" msgstr "Дата начала премиума" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:71 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:70 msgid "Premium state reset on the backend." msgstr "Премиум-статус сброшен на сервере." @@ -25608,7 +25566,7 @@ msgid "Privacy settings" msgstr "Настройки конфиденциальности" #. Label for Bluesky OAuth privacy URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1073 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1047 msgid "Privacy URL" msgstr "URL политики конфиденциальности" @@ -25633,7 +25591,7 @@ msgid "Private details" msgstr "Личные данные" #. Label for Bluesky OAuth private key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1081 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1055 msgid "Private key" msgstr "Приватный ключ" @@ -25699,18 +25657,18 @@ msgstr "Цвет профиля" #. Settings section label for editing profile appearance and identity. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:105 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:104 #: src/features/user/components/settings_utils/section_registry/GeneralSettingsSections.ts:6 msgid "Profile customization" msgstr "Настройка профиля" #. Label in the my profile tab. Preserve {selectedGuildName}; it is inserted by code. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:101 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:100 msgid "Profile customization for {selectedGuildName}" msgstr "Настройка профиля для {selectedGuildName}" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:97 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:96 msgid "Profile customization form" msgstr "Форма настройки профиля" @@ -25775,7 +25733,7 @@ msgid "Profile type" msgstr "Тип профиля" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:77 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:76 msgid "Profile updated" msgstr "Профиль обновлен" @@ -25812,7 +25770,7 @@ msgstr "Оповещать о новых аудиоустройствах" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:142 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:141 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:177 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:160 msgid "Pronouns" @@ -25842,11 +25800,6 @@ msgstr "Укажите ID пользователя или имя пользов msgid "Provide your full legal name for the declaration." msgstr "Укажите ваше полное имя для декларации." -#. Label for an integration provider choice. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 -msgid "Provider" -msgstr "Поставщик" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27626,7 +27579,7 @@ msgid "Reset password" msgstr "Сброс пароля" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:79 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:78 msgid "Reset premium state" msgstr "Сбросить премиум-статус" @@ -27635,7 +27588,7 @@ msgstr "Сбросить премиум-статус" msgid "Reset slider to default value" msgstr "Сбросить ползунок до значения по умолчанию" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:247 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:229 msgid "Reset socket" msgstr "Перезапустить сокет" @@ -27684,7 +27637,7 @@ msgid "Reset zoom" msgstr "Сбросить масштаб" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:112 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:111 msgid "Resetting premium state..." msgstr "Сброс премиум-статуса…" @@ -28315,7 +28268,7 @@ msgid "Run the instance as one community instead of many. This can only be enabl msgstr "Использовать экземпляр как одно сообщество, а не как множество сообществ. Включить это можно только сейчас, во время настройки." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:100 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:99 msgid "Runtime utilities" msgstr "Служебные утилиты" @@ -29103,11 +29056,6 @@ msgstr "Нажата дополнительная кнопка." msgid "Secret" msgstr "Секрет" -#. Label for a CAPTCHA secret key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1020 -msgid "Secret key" -msgstr "Секретный ключ" - #. Settings search entry label. Names the settings search entry in the settings UI. #. Short label in the secrets section. Keep it concise. Keep the tone plain and specific. #: src/features/user/components/modals/tabs/applications_tab/application_detail/SecretsSection.tsx:11 @@ -29925,7 +29873,7 @@ msgid "Set up authenticator app" msgstr "Настроить приложение для аутентификации" #. Option for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:953 +#: src/features/app/components/setup/SetupWizardSteps.tsx:946 msgid "Set up later" msgstr "Настроить позже" @@ -30427,7 +30375,7 @@ msgstr "Показывать список личных чатов" msgid "Show just the typing indicator without avatars" msgstr "Показывать только индикатор набора текста без аватаров" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:308 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:284 msgid "Show keyboard mode intro" msgstr "Показать введение в режим клавиатуры" @@ -30538,7 +30486,7 @@ msgstr "Показывать Неко" msgid "Show new device alerts" msgstr "Показывать оповещения о новых устройствах" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:282 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:264 msgid "Show new device modal" msgstr "Показать модальное окно нового устройства" @@ -30820,7 +30768,7 @@ msgid "Signed-in devices" msgstr "Устройства, с которых выполнен вход" #. Label for Bluesky OAuth signing key ID input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1077 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1051 msgid "Signing key ID" msgstr "ID ключа подписи" @@ -30910,11 +30858,6 @@ msgstr "Одна строка" msgid "Single user (all statuses)" msgstr "Один пользователь (все статусы)" -#. Label for a CAPTCHA site key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 -msgid "Site key" -msgstr "Ключ сайта" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:98 @@ -30964,7 +30907,7 @@ msgid "Skip the system leave notice — nobody gets pinged." msgstr "Пропустить системное сообщение о выходе. Никто не получит уведомление." #. Description for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:957 +#: src/features/app/components/setup/SetupWizardSteps.tsx:950 msgid "Skip this now and configure it from the admin panel." msgstr "Пропустить сейчас и настроить из панели администратора." @@ -31212,17 +31155,17 @@ msgid "SMS verification is unavailable right now. Try again later or contact sup msgstr "Подтверждение по SMS сейчас недоступно. Повторите попытку позже или обратитесь в службу поддержки." #. Success message after validating SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1045 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 msgid "SMTP connection verified." msgstr "Соединение SMTP проверено." #. Label for SMTP host input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1033 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1007 msgid "SMTP host" msgstr "SMTP-сервер" #. Failure message after validating SMTP credentials when the server returns no error detail. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1049 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1023 msgid "SMTP validation failed." msgstr "Не удалось проверить SMTP." @@ -31402,7 +31345,7 @@ msgstr "Что-то пошло не так. Повторите попытку п #. Inline error in the web deep-link prompt when opening the desktop app fails. #. Toast error shown when the mature content check request fails unexpectedly. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:18 -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:580 +#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 #: src/features/auth/flow/DesktopDeepLinkPrompt.tsx:31 msgid "Something went wrong. Try again." msgstr "Что-то пошло не так. Повторите попытку." @@ -32099,6 +32042,11 @@ msgstr "Индексация продолжается — попробуйте msgid "Still Neko" msgstr "Неподвижный Неко" +#. Small toast shown only when an automatic background check before sign-in, sign-up or a similar request takes more than a couple of seconds. No user action needed. Keep it short and calm. +#: src/features/auth/altcha/CaptchaInterceptor.ts:13 +msgid "Still working on it…" +msgstr "Обрабатываем…" + #. Stop-recording button label in the desktop voice message composer. #: src/features/voice/components/VoiceMessageComposerModal.tsx:65 msgid "Stop" @@ -33013,7 +32961,7 @@ msgid "Terms of service" msgstr "Условия использования" #. Label for Bluesky OAuth terms URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1069 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1043 msgid "Terms URL" msgstr "URL-адрес условий" @@ -33023,7 +32971,7 @@ msgid "Terrorism or violent extremism" msgstr "Терроризм или насильственный экстремизм" #. Button that validates SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1041 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1015 msgid "Test SMTP" msgstr "Проверить SMTP" @@ -33800,7 +33748,7 @@ msgid "This clears quick CSS, imported themes, uploaded assets, and local file r msgstr "Это очистит быстрый CSS, импортированные темы, загруженные ресурсы и ссылки на локальные файлы на этом устройстве." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:83 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:82 msgid "This clears your backend premium state entirely, including premium type, billing metadata, and override flags." msgstr "Это полностью сбросит ваш премиум-статус в бэкенде, включая тип подписки, платежные данные и флаги переопределения." @@ -34200,7 +34148,7 @@ msgid "This message no longer exists." msgstr "Этого сообщения больше нет." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:130 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:129 msgid "This nickname will only be visible in this community" msgstr "Этот никнейм будет виден только в этом сообществе" @@ -34277,12 +34225,12 @@ msgid "This removes all custom CSS overrides. Theme files in your library are no msgstr "Это удалит все пользовательские переопределения CSS. Файлы тем в вашей библиотеке не будут затронуты." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:50 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:49 msgid "This removes all previously authorized IP addresses on your account. The next login from any IP will require email verification." msgstr "Это удалит все ранее авторизованные IP-адреса вашего аккаунта. Следующий вход с любого IP-адреса потребует подтверждения по почте." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:67 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:66 msgid "This removes all trusted domains. You will see the external link warning for all domains again." msgstr "Будут удалены все доверенные домены. Предупреждение о внешних ссылках снова будет отображаться для всех доменов." @@ -34949,7 +34897,7 @@ msgstr "Изменения значка в трее применяются то msgid "Trending GIFs" msgstr "Популярные GIF-файлы" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:383 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:359 msgid "Trigger React crash" msgstr "Вызвать сбой React" @@ -35008,7 +34956,7 @@ msgid "Trusted domains" msgstr "Доверенные домены" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:55 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:54 msgid "Trusted domains cleared." msgstr "Доверенные домены очищены." @@ -35054,7 +35002,6 @@ msgid "Try a different variable name or clear the search." msgstr "Попробуйте другое имя переменной или очистите поиск." #. Generic action label for retrying a failed or interrupted operation. -#: src/features/auth/components/AltchaVerification.tsx:53 #: src/features/auth/flow/AuthRouteLoadError.tsx:22 #: src/features/i18n/utils/CommonMessageDescriptors.ts:75 msgid "Try again" @@ -35132,10 +35079,6 @@ msgstr "Попробовать ключ безопасности / ключ до msgid "Try sending your message again." msgstr "Попробуйте отправить сообщение ещё раз." -#: src/features/auth/components/modals/CaptchaModal.tsx:177 -msgid "Try Turnstile instead" -msgstr "Попробовать Turnstile" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:135 msgid "TTS" @@ -36890,7 +36833,7 @@ msgid "Use this when troubleshooting the client or collecting logs. It may add v msgstr "Используйте это при устранении неполадок клиента или сборе логов. Это может добавить подробные сообщения в консоль браузера для текущего клиента." #. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1037 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1011 msgid "Use TLS" msgstr "Использовать TLS" @@ -37056,7 +36999,7 @@ msgstr "Громкость пользователя" #. Generic form-field label for a username. #. Label for SMTP username input. #. Settings search entry label. Also used as a search synonym in the settings search bar. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 #: src/features/i18n/utils/CommonMessageDescriptors.ts:572 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:218 #: src/features/user/components/modals/tabs/my_profile_tab/MyProfileTabUsernameSection.tsx:56 @@ -37337,11 +37280,6 @@ msgstr "Подтвердить номер телефона" msgid "Verify phone number form" msgstr "Форма подтверждения номера телефона" -#. Short label in the authentication captcha modal. Keep the tone plain and specific. -#: src/features/auth/components/modals/CaptchaModal.tsx:17 -msgid "Verify you're human" -msgstr "Подтвердите, что вы не робот" - #. Title of the error modal shown when an unverified account tries to start a DM. #. Title shown when an unverified account cannot start a DM or group DM. #: src/features/app/components/alerts/DmActionErrorModal.tsx:40 @@ -37369,22 +37307,22 @@ msgid "Verify your email before adding an authenticator app." msgstr "Подтвердите почту, прежде чем добавлять приложение-аутентификатор." #. Description text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:117 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:116 msgid "Verify your email before changing your community nickname, avatar, banner, bio, pronouns, or accent color." msgstr "Подтвердите почту, прежде чем менять никнейм в сообществе, аватар, баннер, описание, местоимения или акцентный цвет." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:121 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:120 msgid "Verify your email before changing your username, display name, avatar, banner, bio, pronouns, time zone, or {premiumProductName} badge privacy." msgstr "Подтвердите почту, прежде чем менять имя пользователя, отображаемое имя, аватар, баннер, описание, местоимения, часовой пояс или настройки конфиденциальности значка {premiumProductName}." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:85 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:84 msgid "Verify your email before editing this community profile. You can still preview it here." msgstr "Подтвердите почту, прежде чем редактировать профиль сообщества. Вы всё ещё можете посмотреть его здесь." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:89 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:88 msgid "Verify your email before editing your profile. You can still preview it here." msgstr "Подтвердите почту, прежде чем редактировать профиль. Вы всё ещё можете посмотреть его здесь." @@ -37416,12 +37354,12 @@ msgid "Verify your email to continue using {productName}." msgstr "Подтвердите почту, чтобы продолжить пользоваться {productName}." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:109 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:108 msgid "Verify your email to edit this community profile" msgstr "Подтвердите почту, чтобы изменить профиль сообщества" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:113 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:112 msgid "Verify your email to edit your profile" msgstr "Подтвердите почту, чтобы изменить профиль" @@ -38398,10 +38336,6 @@ msgstr "Мы снизили цену на {premiumProductName} в Бразили msgid "We need one verification step before you continue. This helps protect accounts and keep spam off {productName}." msgstr "Нам нужно выполнить один шаг проверки, прежде чем вы сможете продолжить. Это помогает защитить аккаунты и предотвратить спам в {productName}." -#: src/features/auth/components/modals/CaptchaModal.tsx:128 -msgid "We need to make sure you're not a bot. Complete the verification below." -msgstr "Нам нужно убедиться, что вы не бот. Пройдите проверку ниже." - #. Required-action modal intro text when both email and phone verification are required. #: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:216 msgid "We need two verification steps before you continue. We will show one step at a time." @@ -39256,7 +39190,7 @@ msgid "You can't befriend yourself" msgstr "Нельзя добавить себя в друзья" #. Label in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:134 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:133 msgid "You can't change your nickname here" msgstr "Здесь нельзя изменить ваш никнейм" @@ -39506,7 +39440,7 @@ msgid "You have unsaved changes." msgstr "У вас есть несохраненные изменения." #. Warning text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:81 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:80 msgid "You have unsaved changes. Save or reset before leaving." msgstr "У вас есть несохраненные изменения. Сохраните или сбросьте их, прежде чем уйти." @@ -40031,10 +39965,6 @@ msgstr "Ваше действие не удалось выполнить, так msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Ваша заявка находится на рассмотрении. Вы можете обновить данные объявления или отозвать заявку." -#: src/features/auth/components/AltchaVerification.tsx:50 -msgid "Your browser couldn't finish the check." -msgstr "Ваш браузер не смог завершить проверку." - #. Body of the browser-audio-required modal explaining why the user must click before audio can play. #: src/features/voice/components/modals/AudioPlaybackPermissionModal.tsx:12 msgid "Your browser requires user interaction before audio can be played. Click the button below to enable voice chat." @@ -40386,7 +40316,7 @@ msgid "YouTube enrichment" msgstr "Дополнение ссылок YouTube" #. Setup wizard title for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:977 +#: src/features/app/components/setup/SetupWizardSteps.tsx:970 msgid "YouTube previews" msgstr "Превью YouTube" diff --git a/fluxer_app/src/features/i18n/locales/sv-SE/messages.po b/fluxer_app/src/features/i18n/locales/sv-SE/messages.po index e92f655e4..f06f507c5 100644 --- a/fluxer_app/src/features/i18n/locales/sv-SE/messages.po +++ b/fluxer_app/src/features/i18n/locales/sv-SE/messages.po @@ -2395,11 +2395,6 @@ msgstr "60 sekunder" msgid "7 days" msgstr "7 dagar" -#. Required-action error when the API requires a captcha for phone verification. -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 -msgid "A browser check is required before phone verification. Try again from the sign-in page or contact support." -msgstr "En webbläsarkontroll krävs innan telefonverifiering. Försök igen från inloggningssidan eller kontakta supporten." - #. Hint shown beside in:. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:77 msgid "a channel" @@ -2928,7 +2923,7 @@ msgid "Add a friend to get started." msgstr "Lägg till en vän för att komma igång." #. Setup wizard body for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:973 +#: src/features/app/components/setup/SetupWizardSteps.tsx:966 msgid "Add a Klipy API key to enable GIF search at runtime." msgstr "Lägg till en Klipy-API-nyckel för att aktivera GIF-sökning när instansen körs." @@ -2965,7 +2960,7 @@ msgid "Add a working email" msgstr "Lägg till en fungerande e-postadress" #. Setup wizard body for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:981 +#: src/features/app/components/setup/SetupWizardSteps.tsx:974 msgid "Add a YouTube Data API key to enrich YouTube links." msgstr "Lägg till en YouTube Data API-nyckel för att visa utökade förhandsvisningar av YouTube-länkar." @@ -3011,7 +3006,7 @@ msgid "Add another reaction" msgstr "Lägg till en till reaktion" #. Setup wizard body for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1005 +#: src/features/app/components/setup/SetupWizardSteps.tsx:990 msgid "Add Bluesky OAuth client metadata and a signing key." msgstr "Lägg till Bluesky OAuth-klientmetadata och en signeringsnyckel." @@ -3161,7 +3156,7 @@ msgid "Add shortcut" msgstr "Lägg till genväg" #. Setup wizard body for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:997 +#: src/features/app/components/setup/SetupWizardSteps.tsx:982 msgid "Add SMTP credentials so the instance can send verification and notification email." msgstr "Lägg till SMTP-uppgifter så att instansen kan skicka e-post för verifiering och aviseringar." @@ -3188,7 +3183,7 @@ msgid "Add stream" msgstr "Lägg till sändning" #. Description for configuring an optional setup wizard integration now. -#: src/features/app/components/setup/SetupWizardSteps.tsx:965 +#: src/features/app/components/setup/SetupWizardSteps.tsx:958 msgid "Add the credentials during setup." msgstr "Lägg till uppgifterna under installationen." @@ -3954,7 +3949,7 @@ msgid "An invalid status was provided. You can now close this tab and return to msgstr "En ogiltig status angavs. Du kan nu stänga den här fliken och återgå till appen." #. Short label in the authentication auth form. Keep the tone plain and specific. -#: src/features/auth/hooks/useAuthForm.ts:13 +#: src/features/auth/hooks/useAuthForm.ts:12 msgid "An unexpected error occurred" msgstr "Ett oväntat fel uppstod" @@ -4262,7 +4257,7 @@ msgid "Anyone can request an account, but an administrator must approve it." msgstr "Vem som helst kan begära ett konto, men en administratör måste godkänna det." #. Label for an integration API key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1018 +#: src/features/app/components/setup/SetupWizardSteps.tsx:994 msgid "API key" msgstr "API-nyckel" @@ -4958,7 +4953,7 @@ msgid "Authorized apps" msgstr "Auktoriserade appar" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:38 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:37 msgid "Authorized IPs cleared. New logins will require email verification." msgstr "Auktoriserade IP-adresser har rensats. Nya inloggningar kräver e-postverifiering." @@ -5730,7 +5725,7 @@ msgid "Bluesky connections" msgstr "Bluesky-anslutningar" #. Setup wizard title for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1001 +#: src/features/app/components/setup/SetupWizardSteps.tsx:986 msgid "Bluesky OAuth" msgstr "Bluesky OAuth" @@ -5897,11 +5892,6 @@ msgstr "Botbehörigheter kan inte vara negativa." msgid "Bot profile" msgstr "Botprofil" -#. Setup wizard title for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:985 -msgid "Bot protection" -msgstr "Botskydd" - #. Short label in the authentication OAUTH scopes step. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/OAuthScopesStep.tsx:20 msgid "Bot scope requested" @@ -6554,11 +6544,6 @@ msgstr "Kan inte redigeras" msgid "Cannot delete account" msgstr "Kan inte radera konto" -#. Toast error shown when captcha verification fails inside the auth captcha interceptor. -#: src/features/auth/components/CaptchaInterceptor.tsx:15 -msgid "Captcha verification failed. Try again." -msgstr "Verifiering av captcha misslyckades. Försök igen." - #. Section header in the Linux audio source picker. Lists capture-target options (entire system / specific apps). #: src/features/voice/components/AudioSourcePickerLinux.tsx:50 msgid "Capture" @@ -7398,10 +7383,6 @@ msgstr "Kontrollerar åtkomst..." msgid "Checking screen recording permission..." msgstr "Kontrollerar skärminspelningsbehörigheten…" -#: src/features/auth/components/AltchaVerification.tsx:62 -msgid "Checking your browser. This takes a few seconds." -msgstr "Kontrollerar din webbläsare. Det här tar några sekunder." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -7571,11 +7552,6 @@ msgstr "Välj Arkiv och sedan Lägg till i Dock." msgid "Choose friends to message." msgstr "Välj vänner att skicka meddelanden till." -#. Setup wizard body for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:989 -msgid "Choose hCaptcha or Cloudflare Turnstile for signup challenges." -msgstr "Välj hCaptcha eller Cloudflare Turnstile för kontroller vid registrering." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:455 msgid "Choose how chat moves after you send a message" @@ -7982,17 +7958,17 @@ msgid "Clear selection" msgstr "Rensa markering" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:88 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:87 msgid "Clear trust all setting" msgstr "Rensa inställningen \"lita på alla\"" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:63 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:62 msgid "Clear trusted domains" msgstr "Rensa betrodda domäner" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:96 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:95 msgid "Clear trusted domains ({trustedDomainsCount})" msgstr "Rensa betrodda domäner ({trustedDomainsCount})" @@ -8002,7 +7978,7 @@ msgid "Clearer text" msgstr "Tydligare text" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:108 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:107 msgid "Clearing trusted domains..." msgstr "Rensar betrodda domäner..." @@ -8100,7 +8076,7 @@ msgid "Client" msgstr "Klient" #. Label for Bluesky OAuth client name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1057 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1031 msgid "Client name" msgstr "Klientnamn" @@ -8117,7 +8093,7 @@ msgid "Client secret regenerated. Update any code that uses the old secret." msgstr "En ny klienthemlighet har skapats. Uppdatera all kod som använder den gamla." #. Label for Bluesky OAuth client URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1061 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 msgid "Client URL" msgstr "Klient-URL" @@ -8269,11 +8245,6 @@ msgstr "Stängda DM-konversationer" msgid "Cloud upload" msgstr "Molnuppladdning" -#. Cloudflare Turnstile provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1014 -msgid "Cloudflare Turnstile" -msgstr "Cloudflare Turnstile" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:58 msgid "Coal" @@ -8669,7 +8640,7 @@ msgstr "Namn på community" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:126 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:125 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:113 msgid "Community nickname" msgstr "Smeknamn i communityn" @@ -8722,7 +8693,7 @@ msgid "Community profile" msgstr "Communityprofil" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:73 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:72 msgid "Community profile updated" msgstr "Communityprofilen uppdaterad" @@ -8880,7 +8851,7 @@ msgid "Configure keyboard shortcuts" msgstr "Konfigurera kortkommandon" #. Option for configuring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:961 +#: src/features/app/components/setup/SetupWizardSteps.tsx:954 msgid "Configure now" msgstr "Konfigurera nu" @@ -12341,7 +12312,7 @@ msgstr "Koppla från {channel}" msgid "Disconnect from voice" msgstr "Koppla från röstchatten" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:261 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:243 msgid "Disconnect socket" msgstr "Koppla från socket" @@ -12479,7 +12450,7 @@ msgstr "Visningsläge" #. Short label in the inputs tab. Keep it concise. #. Short label in the my profile tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:22 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:138 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:137 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:61 msgid "Display name" msgstr "Visningsnamn" @@ -12625,7 +12596,7 @@ msgstr "Vill du gå med i {communityName}?" #. Label in the accessibility tab. #. Label in the my profile tab. #: src/features/user/components/modals/tabs/AccessibilityTab.tsx:54 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:146 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:145 msgid "Doc, I'm from the future. I came here in a time machine that you invented. Now, I need your help to get back to the year 1985." msgstr "Doktor, jag är från framtiden. Jag kom hit i en tidsmaskin som du uppfann. Nu behöver jag din hjälp för att komma tillbaka till år 1985." @@ -13262,7 +13233,7 @@ msgid "Edit your messages above or below" msgstr "Redigera dina meddelanden ovanför eller nedanför" #. Button or menu action label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:93 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:92 msgid "Edit your profile appearance and see a live preview" msgstr "Redigera profilens utseende och se en förhandsvisning direkt" @@ -13330,7 +13301,7 @@ msgid "Email changed" msgstr "E-postadress ändrad" #. Setup wizard title for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:993 +#: src/features/app/components/setup/SetupWizardSteps.tsx:978 msgid "Email delivery" msgstr "E-postleverans" @@ -13635,7 +13606,7 @@ msgid "Enable beta feature" msgstr "Aktivera beta-funktion" #. Label for enabling Bluesky OAuth in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1053 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1027 msgid "Enable Bluesky OAuth" msgstr "Aktivera Bluesky OAuth" @@ -13668,7 +13639,7 @@ msgid "Enable developer mode" msgstr "Aktivera utvecklarläge" #. Label for enabling SMTP email delivery in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1021 +#: src/features/app/components/setup/SetupWizardSteps.tsx:995 msgid "Enable email delivery" msgstr "Aktivera e-postleverans" @@ -14705,7 +14676,7 @@ msgid "Failed to ban member. Try again." msgstr "Kunde inte bannlysa medlemmen. Försök igen." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:59 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:58 msgid "Failed to clear trusted domains." msgstr "Kunde inte rensa betrodda domäner." @@ -14762,7 +14733,7 @@ msgid "Failed to enable camera." msgstr "Kunde inte aktivera kameran." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:42 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:41 msgid "Failed to forget authorized IPs. Try again." msgstr "Kunde inte glömma auktoriserade IP-adresser. Försök igen." @@ -14907,7 +14878,7 @@ msgid "Failed to resend verification code. Try again later." msgstr "Det gick inte att skicka verifieringskoden igen. Försök igen senare." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:75 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:74 msgid "Failed to reset premium state." msgstr "Kunde inte återställa premiumstatus." @@ -15581,7 +15552,7 @@ msgstr "Tvinga fram laddningsplatshållare" msgid "Force mature media" msgstr "Tvinga fram medier med vuxet innehåll" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:276 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:258 msgid "Force move to AFK channel" msgstr "Tvinga flytt till AFK-kanal" @@ -15640,7 +15611,7 @@ msgid "Forced off" msgstr "Tvingat av" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:46 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:45 msgid "Forget authorized IPs" msgstr "Glöm auktoriserade IP-adresser" @@ -15650,7 +15621,7 @@ msgid "Forget subscriptions" msgstr "Glöm prenumerationer" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:104 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:103 msgid "Forgetting authorized IPs..." msgstr "Glömmer auktoriserade IP-adresser..." @@ -15907,12 +15878,12 @@ msgid "from <0>{0}" msgstr "från <0>{0}" #. Label for SMTP from email input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1025 +#: src/features/app/components/setup/SetupWizardSteps.tsx:999 msgid "From email" msgstr "Avsändarens e-postadress" #. Label for SMTP from name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1029 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1003 msgid "From name" msgstr "Avsändarnamn" @@ -16204,7 +16175,7 @@ msgid "GIF preview" msgstr "GIF-förhandsvisning" #. Setup wizard title for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:969 +#: src/features/app/components/setup/SetupWizardSteps.tsx:962 msgid "GIF search" msgstr "GIF-sökning" @@ -16853,21 +16824,12 @@ msgstr "Har du en presentkod? Lös in den för att låsa upp {PREMIUM_PRODUCT_NA msgid "Having fun?" msgstr "Har du roligt?" -#: src/features/auth/components/modals/CaptchaModal.tsx:175 -msgid "Having issues? Try hCaptcha instead" -msgstr "Har du problem? Prova hCaptcha istället" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:63 msgctxt "us-state" msgid "Hawaii" msgstr "Hawaii" -#. hCaptcha provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1013 -msgid "hCaptcha" -msgstr "hCaptcha" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:238 msgid "HD" @@ -19768,7 +19730,7 @@ msgid "Logo" msgstr "Logotyp" #. Label for Bluesky OAuth logo URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1065 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1039 msgid "Logo URL" msgstr "Logotyp-URL" @@ -22941,7 +22903,7 @@ msgid "No tokens match \"{searchQuery}\"." msgstr "Inga tokens matchar \"{searchQuery}\"." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:92 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:91 msgid "No trusted domains" msgstr "Inga betrodda domäner" @@ -23696,10 +23658,6 @@ msgstr "Öppna webbläsarväljaren" msgid "Open call view" msgstr "Öppna samtalsvyn" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:288 -msgid "Open captcha modal" -msgstr "Öppna captcha-dialog" - #. Accessible label for the channel header title button in a community channel. #: src/features/channel/components/channel_header/shared.ts:14 msgid "Open channel details for {channelName}" @@ -23712,7 +23670,7 @@ msgstr "Öppna kanalinformation för {channelName}" msgid "Open chat" msgstr "Öppna chatt" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:314 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:290 msgid "Open claim account modal" msgstr "Öppna dialogen för att säkra kontot" @@ -23944,11 +23902,11 @@ msgstr "Öppna klistermärket i webbläsaren" msgid "Open streaming privacy settings" msgstr "Öppna inställningar för sekretess vid sändning" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:327 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:303 msgid "Open sudo verification modal" msgstr "Öppna dialogen för sudo-verifiering" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:342 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:318 msgid "Open system DM" msgstr "Öppna system-DM" @@ -24430,7 +24388,7 @@ msgstr "Lösennycklar kräver ett signerat macOS-paket med ett giltigt app-ID. I #. Generic form-field label for a password. #. Label for SMTP password input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1036 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1010 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:146 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:183 @@ -25212,7 +25170,7 @@ msgid "Popup" msgstr "Popup" #. Label for SMTP port input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1034 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1008 msgid "Port" msgstr "Port" @@ -25338,7 +25296,7 @@ msgid "Premium since date" msgstr "Premium sedan datum" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:71 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:70 msgid "Premium state reset on the backend." msgstr "Premiumstatus återställd på servern." @@ -25608,7 +25566,7 @@ msgid "Privacy settings" msgstr "Sekretessinställningar" #. Label for Bluesky OAuth privacy URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1073 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1047 msgid "Privacy URL" msgstr "URL till integritetspolicyn" @@ -25633,7 +25591,7 @@ msgid "Private details" msgstr "Privata detaljer" #. Label for Bluesky OAuth private key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1081 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1055 msgid "Private key" msgstr "Privat nyckel" @@ -25699,18 +25657,18 @@ msgstr "Profilfärg" #. Settings section label for editing profile appearance and identity. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:105 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:104 #: src/features/user/components/settings_utils/section_registry/GeneralSettingsSections.ts:6 msgid "Profile customization" msgstr "Anpassa profil" #. Label in the my profile tab. Preserve {selectedGuildName}; it is inserted by code. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:101 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:100 msgid "Profile customization for {selectedGuildName}" msgstr "Profilanpassning för {selectedGuildName}" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:97 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:96 msgid "Profile customization form" msgstr "Formulär för profilanpassning" @@ -25775,7 +25733,7 @@ msgid "Profile type" msgstr "Profiltyp" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:77 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:76 msgid "Profile updated" msgstr "Profilen uppdaterad" @@ -25812,7 +25770,7 @@ msgstr "Fråga när nya ljudenheter upptäcks" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:142 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:141 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:177 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:160 msgid "Pronouns" @@ -25842,11 +25800,6 @@ msgstr "Ange antingen ett användar-ID eller ett användarnamn för personen du msgid "Provide your full legal name for the declaration." msgstr "Ange ditt fullständiga juridiska namn för deklarationen." -#. Label for an integration provider choice. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 -msgid "Provider" -msgstr "Leverantör" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27626,7 +27579,7 @@ msgid "Reset password" msgstr "Återställ lösenord" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:79 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:78 msgid "Reset premium state" msgstr "Återställ premiumstatus" @@ -27635,7 +27588,7 @@ msgstr "Återställ premiumstatus" msgid "Reset slider to default value" msgstr "Återställ reglaget till standardvärdet" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:247 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:229 msgid "Reset socket" msgstr "Återställ socket" @@ -27684,7 +27637,7 @@ msgid "Reset zoom" msgstr "Återställ zoom" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:112 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:111 msgid "Resetting premium state..." msgstr "Återställer premiumstatus..." @@ -28315,7 +28268,7 @@ msgid "Run the instance as one community instead of many. This can only be enabl msgstr "Kör instansen som en enda community istället för många. Detta kan bara aktiveras nu, under installationen." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:100 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:99 msgid "Runtime utilities" msgstr "Körningsverktyg" @@ -29103,11 +29056,6 @@ msgstr "Sekundär knapp klickad." msgid "Secret" msgstr "Hemlighet" -#. Label for a CAPTCHA secret key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1020 -msgid "Secret key" -msgstr "Hemlig nyckel" - #. Settings search entry label. Names the settings search entry in the settings UI. #. Short label in the secrets section. Keep it concise. Keep the tone plain and specific. #: src/features/user/components/modals/tabs/applications_tab/application_detail/SecretsSection.tsx:11 @@ -29925,7 +29873,7 @@ msgid "Set up authenticator app" msgstr "Konfigurera autentiseringsapp" #. Option for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:953 +#: src/features/app/components/setup/SetupWizardSteps.tsx:946 msgid "Set up later" msgstr "Konfigurera senare" @@ -30427,7 +30375,7 @@ msgstr "Visa inbäddad DM-lista" msgid "Show just the typing indicator without avatars" msgstr "Visa endast indikatorn för att någon skriver, utan avatarer" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:308 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:284 msgid "Show keyboard mode intro" msgstr "Visa introduktion till tangentbordsläge" @@ -30538,7 +30486,7 @@ msgstr "Visa Neko" msgid "Show new device alerts" msgstr "Visa aviseringar för nya enheter" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:282 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:264 msgid "Show new device modal" msgstr "Visa dialog för ny enhet" @@ -30820,7 +30768,7 @@ msgid "Signed-in devices" msgstr "Inloggade enheter" #. Label for Bluesky OAuth signing key ID input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1077 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1051 msgid "Signing key ID" msgstr "Signeringsnyckel-ID" @@ -30910,11 +30858,6 @@ msgstr "Enkel rad" msgid "Single user (all statuses)" msgstr "En användare (alla statusar)" -#. Label for a CAPTCHA site key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 -msgid "Site key" -msgstr "Webbplatsnyckel" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:98 @@ -30964,7 +30907,7 @@ msgid "Skip the system leave notice — nobody gets pinged." msgstr "Hoppa över systemmeddelandet om att du lämnar – ingen får en avisering." #. Description for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:957 +#: src/features/app/components/setup/SetupWizardSteps.tsx:950 msgid "Skip this now and configure it from the admin panel." msgstr "Hoppa över detta nu och konfigurera det från administrationspanelen." @@ -31212,17 +31155,17 @@ msgid "SMS verification is unavailable right now. Try again later or contact sup msgstr "Sms-verifiering är inte tillgänglig just nu. Försök igen senare eller kontakta supporten." #. Success message after validating SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1045 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 msgid "SMTP connection verified." msgstr "SMTP-anslutning verifierad." #. Label for SMTP host input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1033 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1007 msgid "SMTP host" msgstr "SMTP-värd" #. Failure message after validating SMTP credentials when the server returns no error detail. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1049 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1023 msgid "SMTP validation failed." msgstr "SMTP-valideringen misslyckades." @@ -31402,7 +31345,7 @@ msgstr "Något gick fel. Försök igen senare." #. Inline error in the web deep-link prompt when opening the desktop app fails. #. Toast error shown when the mature content check request fails unexpectedly. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:18 -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:580 +#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 #: src/features/auth/flow/DesktopDeepLinkPrompt.tsx:31 msgid "Something went wrong. Try again." msgstr "Något gick fel. Försök igen." @@ -32099,6 +32042,11 @@ msgstr "Indexerar fortfarande – titta tillbaka om en stund" msgid "Still Neko" msgstr "Stillastående Neko" +#. Small toast shown only when an automatic background check before sign-in, sign-up or a similar request takes more than a couple of seconds. No user action needed. Keep it short and calm. +#: src/features/auth/altcha/CaptchaInterceptor.ts:13 +msgid "Still working on it…" +msgstr "Fortfarande på gång…" + #. Stop-recording button label in the desktop voice message composer. #: src/features/voice/components/VoiceMessageComposerModal.tsx:65 msgid "Stop" @@ -33013,7 +32961,7 @@ msgid "Terms of service" msgstr "Användarvillkor" #. Label for Bluesky OAuth terms URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1069 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1043 msgid "Terms URL" msgstr "URL för villkor" @@ -33023,7 +32971,7 @@ msgid "Terrorism or violent extremism" msgstr "Terrorism eller våldsbejakande extremism" #. Button that validates SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1041 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1015 msgid "Test SMTP" msgstr "Testa SMTP" @@ -33800,7 +33748,7 @@ msgid "This clears quick CSS, imported themes, uploaded assets, and local file r msgstr "Detta rensar snabb-CSS, importerade teman, uppladdade resurser och lokala filreferenser på den här enheten." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:83 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:82 msgid "This clears your backend premium state entirely, including premium type, billing metadata, and override flags." msgstr "Detta rensar hela din premiumstatus på servern, inklusive premiumtyp, faktureringsmetadata och åsidosättningsflaggor." @@ -34200,7 +34148,7 @@ msgid "This message no longer exists." msgstr "Det här meddelandet finns inte längre." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:130 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:129 msgid "This nickname will only be visible in this community" msgstr "Det här smeknamnet syns bara i den här communityn" @@ -34277,12 +34225,12 @@ msgid "This removes all custom CSS overrides. Theme files in your library are no msgstr "Detta tar bort alla anpassade CSS-åsidosättningar. Temafiler i ditt bibliotek påverkas inte." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:50 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:49 msgid "This removes all previously authorized IP addresses on your account. The next login from any IP will require email verification." msgstr "Detta tar bort alla tidigare auktoriserade IP-adresser från ditt konto. Nästa inloggning från valfri IP kräver e-postverifiering." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:67 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:66 msgid "This removes all trusted domains. You will see the external link warning for all domains again." msgstr "Detta tar bort alla betrodda domäner. Du kommer att se varningen för externa länkar för alla domäner igen." @@ -34949,7 +34897,7 @@ msgstr "Ändringar av ikonen i meddelandefältet tillämpas först efter en omst msgid "Trending GIFs" msgstr "Trendande GIF:ar" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:383 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:359 msgid "Trigger React crash" msgstr "Utlös React-krasch" @@ -35008,7 +34956,7 @@ msgid "Trusted domains" msgstr "Betrodda domäner" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:55 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:54 msgid "Trusted domains cleared." msgstr "Betrodda domäner rensade." @@ -35054,7 +35002,6 @@ msgid "Try a different variable name or clear the search." msgstr "Prova ett annat variabelnamn eller rensa sökningen." #. Generic action label for retrying a failed or interrupted operation. -#: src/features/auth/components/AltchaVerification.tsx:53 #: src/features/auth/flow/AuthRouteLoadError.tsx:22 #: src/features/i18n/utils/CommonMessageDescriptors.ts:75 msgid "Try again" @@ -35132,10 +35079,6 @@ msgstr "Prova säkerhetsnyckel/lösennyckel i stället" msgid "Try sending your message again." msgstr "Försök skicka meddelandet igen." -#: src/features/auth/components/modals/CaptchaModal.tsx:177 -msgid "Try Turnstile instead" -msgstr "Prova Turnstile istället" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:135 msgid "TTS" @@ -36890,7 +36833,7 @@ msgid "Use this when troubleshooting the client or collecting logs. It may add v msgstr "Använd detta när du felsöker klienten eller samlar in loggar. Det kan lägga till utförliga meddelanden i webbläsarkonsolen för den aktuella klienten." #. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1037 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1011 msgid "Use TLS" msgstr "Använd TLS" @@ -37056,7 +36999,7 @@ msgstr "Användarvolym" #. Generic form-field label for a username. #. Label for SMTP username input. #. Settings search entry label. Also used as a search synonym in the settings search bar. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 #: src/features/i18n/utils/CommonMessageDescriptors.ts:572 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:218 #: src/features/user/components/modals/tabs/my_profile_tab/MyProfileTabUsernameSection.tsx:56 @@ -37337,11 +37280,6 @@ msgstr "Verifiera telefonnummer" msgid "Verify phone number form" msgstr "Formulär för att verifiera telefonnummer" -#. Short label in the authentication captcha modal. Keep the tone plain and specific. -#: src/features/auth/components/modals/CaptchaModal.tsx:17 -msgid "Verify you're human" -msgstr "Verifiera att du är människa" - #. Title of the error modal shown when an unverified account tries to start a DM. #. Title shown when an unverified account cannot start a DM or group DM. #: src/features/app/components/alerts/DmActionErrorModal.tsx:40 @@ -37369,22 +37307,22 @@ msgid "Verify your email before adding an authenticator app." msgstr "Verifiera din e-postadress innan du lägger till en autentiseringsapp." #. Description text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:117 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:116 msgid "Verify your email before changing your community nickname, avatar, banner, bio, pronouns, or accent color." msgstr "Verifiera din e-postadress innan du ändrar ditt smeknamn, din avatar, banner, presentation, dina pronomen eller din accentfärg i communityn." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:121 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:120 msgid "Verify your email before changing your username, display name, avatar, banner, bio, pronouns, time zone, or {premiumProductName} badge privacy." msgstr "Verifiera din e-postadress innan du ändrar ditt användarnamn, visningsnamn, din avatar, banner, presentation, dina pronomen, din tidszon eller sekretessen för ditt {premiumProductName}-märke." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:85 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:84 msgid "Verify your email before editing this community profile. You can still preview it here." msgstr "Verifiera din e-postadress innan du redigerar den här communityprofilen. Du kan fortfarande förhandsgranska den här." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:89 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:88 msgid "Verify your email before editing your profile. You can still preview it here." msgstr "Verifiera din e-postadress innan du redigerar din profil. Du kan fortfarande förhandsgranska den här." @@ -37416,12 +37354,12 @@ msgid "Verify your email to continue using {productName}." msgstr "Verifiera din e-postadress för att fortsätta använda {productName}." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:109 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:108 msgid "Verify your email to edit this community profile" msgstr "Verifiera din e-postadress för att redigera den här communityprofilen" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:113 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:112 msgid "Verify your email to edit your profile" msgstr "Verifiera din e-postadress för att redigera din profil" @@ -38398,10 +38336,6 @@ msgstr "Vi har sänkt priset på {premiumProductName} i Brasilien. Det kostar nu msgid "We need one verification step before you continue. This helps protect accounts and keep spam off {productName}." msgstr "Vi behöver ett verifieringssteg innan du kan fortsätta. Detta hjälper till att skydda konton och hålla spam borta från {productName}." -#: src/features/auth/components/modals/CaptchaModal.tsx:128 -msgid "We need to make sure you're not a bot. Complete the verification below." -msgstr "Vi behöver säkerställa att du inte är en robot. Slutför verifieringen nedan." - #. Required-action modal intro text when both email and phone verification are required. #: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:216 msgid "We need two verification steps before you continue. We will show one step at a time." @@ -39256,7 +39190,7 @@ msgid "You can't befriend yourself" msgstr "Du kan inte bli vän med dig själv" #. Label in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:134 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:133 msgid "You can't change your nickname here" msgstr "Du kan inte ändra ditt smeknamn här" @@ -39506,7 +39440,7 @@ msgid "You have unsaved changes." msgstr "Du har osparade ändringar." #. Warning text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:81 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:80 msgid "You have unsaved changes. Save or reset before leaving." msgstr "Du har osparade ändringar. Spara eller återställ innan du lämnar." @@ -40031,10 +39965,6 @@ msgstr "Din åtgärd kunde inte slutföras eftersom den flaggades av våra säke msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Din ansökan väntar på granskning. Du kan fortfarande uppdatera listningens uppgifter eller dra tillbaka ansökan." -#: src/features/auth/components/AltchaVerification.tsx:50 -msgid "Your browser couldn't finish the check." -msgstr "Webbläsaren kunde inte slutföra kontrollen." - #. Body of the browser-audio-required modal explaining why the user must click before audio can play. #: src/features/voice/components/modals/AudioPlaybackPermissionModal.tsx:12 msgid "Your browser requires user interaction before audio can be played. Click the button below to enable voice chat." @@ -40386,7 +40316,7 @@ msgid "YouTube enrichment" msgstr "YouTube-berikning" #. Setup wizard title for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:977 +#: src/features/app/components/setup/SetupWizardSteps.tsx:970 msgid "YouTube previews" msgstr "YouTube-förhandsvisningar" diff --git a/fluxer_app/src/features/i18n/locales/th/messages.po b/fluxer_app/src/features/i18n/locales/th/messages.po index 346e733d7..18f197e51 100644 --- a/fluxer_app/src/features/i18n/locales/th/messages.po +++ b/fluxer_app/src/features/i18n/locales/th/messages.po @@ -2395,11 +2395,6 @@ msgstr "60 วินาที" msgid "7 days" msgstr "7 วัน" -#. Required-action error when the API requires a captcha for phone verification. -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 -msgid "A browser check is required before phone verification. Try again from the sign-in page or contact support." -msgstr "ต้องมีการตรวจสอบเบราว์เซอร์ก่อนยืนยันเบอร์โทรศัพท์ ลองอีกครั้งจากหน้าลงชื่อเข้าใช้หรือติดต่อฝ่ายสนับสนุน" - #. Hint shown beside in:. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:77 msgid "a channel" @@ -2928,7 +2923,7 @@ msgid "Add a friend to get started." msgstr "เพิ่มเพื่อนเพื่อเริ่มต้นใช้งาน" #. Setup wizard body for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:973 +#: src/features/app/components/setup/SetupWizardSteps.tsx:966 msgid "Add a Klipy API key to enable GIF search at runtime." msgstr "เพิ่มคีย์ API ของ Klipy เพื่อเปิดใช้งานการค้นหา GIF ขณะใช้งาน" @@ -2965,7 +2960,7 @@ msgid "Add a working email" msgstr "เพิ่มอีเมลที่ใช้งานได้" #. Setup wizard body for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:981 +#: src/features/app/components/setup/SetupWizardSteps.tsx:974 msgid "Add a YouTube Data API key to enrich YouTube links." msgstr "เพิ่มคีย์ YouTube Data API เพื่อปรับปรุงลิงก์ YouTube" @@ -3011,7 +3006,7 @@ msgid "Add another reaction" msgstr "เพิ่มรีแอ็กชันอื่น" #. Setup wizard body for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1005 +#: src/features/app/components/setup/SetupWizardSteps.tsx:990 msgid "Add Bluesky OAuth client metadata and a signing key." msgstr "เพิ่มข้อมูลเมตาไคลเอ็นต์ OAuth ของ Bluesky และคีย์การลงนาม" @@ -3161,7 +3156,7 @@ msgid "Add shortcut" msgstr "เพิ่มปุ่มลัด" #. Setup wizard body for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:997 +#: src/features/app/components/setup/SetupWizardSteps.tsx:982 msgid "Add SMTP credentials so the instance can send verification and notification email." msgstr "เพิ่มข้อมูลประจำตัว SMTP เพื่อให้อินสแตนซ์สามารถส่งอีเมลยืนยันและแจ้งเตือนได้" @@ -3188,7 +3183,7 @@ msgid "Add stream" msgstr "เพิ่มสตรีม" #. Description for configuring an optional setup wizard integration now. -#: src/features/app/components/setup/SetupWizardSteps.tsx:965 +#: src/features/app/components/setup/SetupWizardSteps.tsx:958 msgid "Add the credentials during setup." msgstr "เพิ่มข้อมูลประจำตัวระหว่างการตั้งค่า" @@ -3954,7 +3949,7 @@ msgid "An invalid status was provided. You can now close this tab and return to msgstr "สถานะไม่ถูกต้อง ปิดแท็บนี้แล้วกลับไปที่แอปได้เลย" #. Short label in the authentication auth form. Keep the tone plain and specific. -#: src/features/auth/hooks/useAuthForm.ts:13 +#: src/features/auth/hooks/useAuthForm.ts:12 msgid "An unexpected error occurred" msgstr "เกิดข้อผิดพลาดที่ไม่คาดคิด" @@ -4262,7 +4257,7 @@ msgid "Anyone can request an account, but an administrator must approve it." msgstr "ทุกคนสามารถขอบัญชีได้ แต่ผู้ดูแลระบบต้องอนุมัติ" #. Label for an integration API key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1018 +#: src/features/app/components/setup/SetupWizardSteps.tsx:994 msgid "API key" msgstr "คีย์ API" @@ -4958,7 +4953,7 @@ msgid "Authorized apps" msgstr "แอปที่ได้รับอนุญาต" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:38 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:37 msgid "Authorized IPs cleared. New logins will require email verification." msgstr "ล้าง IP ที่ได้รับอนุญาตแล้ว การเข้าสู่ระบบใหม่จะต้องยืนยันอีเมล" @@ -5730,7 +5725,7 @@ msgid "Bluesky connections" msgstr "การเชื่อมต่อ Bluesky" #. Setup wizard title for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1001 +#: src/features/app/components/setup/SetupWizardSteps.tsx:986 msgid "Bluesky OAuth" msgstr "Bluesky OAuth" @@ -5897,11 +5892,6 @@ msgstr "สิทธิ์ของบอทต้องไม่เป็นค msgid "Bot profile" msgstr "โปรไฟล์บอท" -#. Setup wizard title for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:985 -msgid "Bot protection" -msgstr "การป้องกันบอท" - #. Short label in the authentication OAUTH scopes step. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/OAuthScopesStep.tsx:20 msgid "Bot scope requested" @@ -6554,11 +6544,6 @@ msgstr "แก้ไขไม่ได้" msgid "Cannot delete account" msgstr "ไม่สามารถลบบัญชีได้" -#. Toast error shown when captcha verification fails inside the auth captcha interceptor. -#: src/features/auth/components/CaptchaInterceptor.tsx:15 -msgid "Captcha verification failed. Try again." -msgstr "การยืนยันแคปต์ชาล้มเหลว โปรดลองอีกครั้ง" - #. Section header in the Linux audio source picker. Lists capture-target options (entire system / specific apps). #: src/features/voice/components/AudioSourcePickerLinux.tsx:50 msgid "Capture" @@ -7398,10 +7383,6 @@ msgstr "กำลังตรวจสอบสิทธิ์..." msgid "Checking screen recording permission..." msgstr "กำลังตรวจสอบสิทธิ์การบันทึกหน้าจอ…" -#: src/features/auth/components/AltchaVerification.tsx:62 -msgid "Checking your browser. This takes a few seconds." -msgstr "กำลังตรวจสอบเบราว์เซอร์ของคุณ ใช้เวลาสักครู่" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -7571,11 +7552,6 @@ msgstr "เลือก ไฟล์ แล้วเลือก เพิ่ม msgid "Choose friends to message." msgstr "เลือกเพื่อนเพื่อส่งข้อความ" -#. Setup wizard body for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:989 -msgid "Choose hCaptcha or Cloudflare Turnstile for signup challenges." -msgstr "เลือก hCaptcha หรือ Cloudflare Turnstile สำหรับการยืนยันแคปต์ชาตอนสมัครสมาชิก" - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:455 msgid "Choose how chat moves after you send a message" @@ -7982,17 +7958,17 @@ msgid "Clear selection" msgstr "ล้างการเลือก" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:88 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:87 msgid "Clear trust all setting" msgstr "ล้างการตั้งค่าเชื่อถือทั้งหมด" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:63 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:62 msgid "Clear trusted domains" msgstr "ล้างโดเมนที่เชื่อถือได้" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:96 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:95 msgid "Clear trusted domains ({trustedDomainsCount})" msgstr "ล้างโดเมนที่เชื่อถือได้ ({trustedDomainsCount})" @@ -8002,7 +7978,7 @@ msgid "Clearer text" msgstr "ข้อความชัดเจนขึ้น" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:108 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:107 msgid "Clearing trusted domains..." msgstr "กำลังล้างโดเมนที่เชื่อถือได้..." @@ -8100,7 +8076,7 @@ msgid "Client" msgstr "ไคลเอ็นต์" #. Label for Bluesky OAuth client name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1057 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1031 msgid "Client name" msgstr "ชื่อไคลเอ็นต์" @@ -8117,7 +8093,7 @@ msgid "Client secret regenerated. Update any code that uses the old secret." msgstr "สร้าง Client secret ใหม่แล้ว โปรดอัปเดตโค้ดที่ใช้ secret เก่า" #. Label for Bluesky OAuth client URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1061 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 msgid "Client URL" msgstr "URL ไคลเอ็นต์" @@ -8269,11 +8245,6 @@ msgstr "ข้อความส่วนตัวที่ปิดไปแล msgid "Cloud upload" msgstr "อัปโหลดขึ้นคลาวด์" -#. Cloudflare Turnstile provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1014 -msgid "Cloudflare Turnstile" -msgstr "Cloudflare Turnstile" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:58 msgid "Coal" @@ -8669,7 +8640,7 @@ msgstr "ชื่อคอมมูนิตี้" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:126 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:125 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:113 msgid "Community nickname" msgstr "ชื่อเล่นในคอมมูนิตี้" @@ -8722,7 +8693,7 @@ msgid "Community profile" msgstr "โปรไฟล์คอมมูนิตี้" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:73 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:72 msgid "Community profile updated" msgstr "อัปเดตโปรไฟล์คอมมูนิตี้แล้ว" @@ -8880,7 +8851,7 @@ msgid "Configure keyboard shortcuts" msgstr "ตั้งค่าปุ่มลัด" #. Option for configuring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:961 +#: src/features/app/components/setup/SetupWizardSteps.tsx:954 msgid "Configure now" msgstr "ตั้งค่าเลย" @@ -12341,7 +12312,7 @@ msgstr "ตัดการเชื่อมต่อจาก {channel}" msgid "Disconnect from voice" msgstr "ตัดการเชื่อมต่อจากช่องเสียง" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:261 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:243 msgid "Disconnect socket" msgstr "ตัดการเชื่อมต่อซ็อกเก็ต" @@ -12479,7 +12450,7 @@ msgstr "โหมดการแสดงผล" #. Short label in the inputs tab. Keep it concise. #. Short label in the my profile tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:22 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:138 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:137 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:61 msgid "Display name" msgstr "ชื่อที่แสดง" @@ -12625,7 +12596,7 @@ msgstr "คุณต้องการเข้าร่วม {communityName} #. Label in the accessibility tab. #. Label in the my profile tab. #: src/features/user/components/modals/tabs/AccessibilityTab.tsx:54 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:146 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:145 msgid "Doc, I'm from the future. I came here in a time machine that you invented. Now, I need your help to get back to the year 1985." msgstr "ด็อก ผมมาจากอนาคต ผมมาที่นี่ด้วยไทม์แมชชีนที่คุณเป็นคนประดิษฐ์ขึ้นมา ตอนนี้ผมต้องการความช่วยเหลือจากคุณเพื่อกลับไปยังปี 1985" @@ -13262,7 +13233,7 @@ msgid "Edit your messages above or below" msgstr "แก้ไขข้อความของคุณด้านบนหรือด้านล่าง" #. Button or menu action label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:93 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:92 msgid "Edit your profile appearance and see a live preview" msgstr "แก้ไขรูปลักษณ์โปรไฟล์ของคุณและดูตัวอย่างแบบเรียลไทม์" @@ -13330,7 +13301,7 @@ msgid "Email changed" msgstr "เปลี่ยนอีเมลแล้ว" #. Setup wizard title for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:993 +#: src/features/app/components/setup/SetupWizardSteps.tsx:978 msgid "Email delivery" msgstr "การส่งอีเมล" @@ -13635,7 +13606,7 @@ msgid "Enable beta feature" msgstr "เปิดใช้ฟีเจอร์เบต้า" #. Label for enabling Bluesky OAuth in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1053 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1027 msgid "Enable Bluesky OAuth" msgstr "เปิดใช้งาน Bluesky OAuth" @@ -13668,7 +13639,7 @@ msgid "Enable developer mode" msgstr "เปิดโหมดนักพัฒนา" #. Label for enabling SMTP email delivery in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1021 +#: src/features/app/components/setup/SetupWizardSteps.tsx:995 msgid "Enable email delivery" msgstr "เปิดใช้งานการส่งอีเมล" @@ -14705,7 +14676,7 @@ msgid "Failed to ban member. Try again." msgstr "แบนสมาชิกไม่สำเร็จ ลองอีกครั้ง" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:59 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:58 msgid "Failed to clear trusted domains." msgstr "ล้างโดเมนที่เชื่อถือแล้วไม่สำเร็จ" @@ -14762,7 +14733,7 @@ msgid "Failed to enable camera." msgstr "ไม่สามารถเปิดกล้องได้" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:42 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:41 msgid "Failed to forget authorized IPs. Try again." msgstr "ลบ IP ที่ได้รับอนุญาตไม่สำเร็จ ลองอีกครั้ง" @@ -14907,7 +14878,7 @@ msgid "Failed to resend verification code. Try again later." msgstr "ส่งรหัสยืนยันอีกครั้งไม่สำเร็จ โปรดลองอีกครั้งในภายหลัง" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:75 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:74 msgid "Failed to reset premium state." msgstr "รีเซ็ตสถานะพรีเมียมไม่สำเร็จ" @@ -15581,7 +15552,7 @@ msgstr "บังคับโครงร่างขณะโหลด" msgid "Force mature media" msgstr "บังคับสื่อสำหรับผู้ใหญ่" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:276 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:258 msgid "Force move to AFK channel" msgstr "บังคับย้ายไปช่อง AFK" @@ -15640,7 +15611,7 @@ msgid "Forced off" msgstr "บังคับปิด" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:46 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:45 msgid "Forget authorized IPs" msgstr "ลบ IP ที่ได้รับอนุญาต" @@ -15650,7 +15621,7 @@ msgid "Forget subscriptions" msgstr "ลบการสมัครรับการแจ้งเตือน" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:104 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:103 msgid "Forgetting authorized IPs..." msgstr "กำลังลบ IP ที่ได้รับอนุญาต..." @@ -15907,12 +15878,12 @@ msgid "from <0>{0}" msgstr "จาก <0>{0}" #. Label for SMTP from email input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1025 +#: src/features/app/components/setup/SetupWizardSteps.tsx:999 msgid "From email" msgstr "อีเมลผู้ส่ง" #. Label for SMTP from name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1029 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1003 msgid "From name" msgstr "ชื่อผู้ส่ง" @@ -16204,7 +16175,7 @@ msgid "GIF preview" msgstr "ตัวอย่าง GIF" #. Setup wizard title for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:969 +#: src/features/app/components/setup/SetupWizardSteps.tsx:962 msgid "GIF search" msgstr "ค้นหา GIF" @@ -16853,21 +16824,12 @@ msgstr "มีรหัสของขวัญไหม? ใช้แลกร msgid "Having fun?" msgstr "สนุกอยู่ไหม?" -#: src/features/auth/components/modals/CaptchaModal.tsx:175 -msgid "Having issues? Try hCaptcha instead" -msgstr "มีปัญหาใช่ไหม? ลองใช้ hCaptcha แทน" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:63 msgctxt "us-state" msgid "Hawaii" msgstr "ฮาวาย" -#. hCaptcha provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1013 -msgid "hCaptcha" -msgstr "hCaptcha" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:238 msgid "HD" @@ -19768,7 +19730,7 @@ msgid "Logo" msgstr "โลโก้" #. Label for Bluesky OAuth logo URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1065 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1039 msgid "Logo URL" msgstr "URL โลโก้" @@ -22941,7 +22903,7 @@ msgid "No tokens match \"{searchQuery}\"." msgstr "ไม่มีโทเค็นที่ตรงกับ \"{searchQuery}\"" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:92 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:91 msgid "No trusted domains" msgstr "ไม่มีโดเมนที่เชื่อถือได้" @@ -23696,10 +23658,6 @@ msgstr "เปิดตัวเลือกเบราว์เซอร์" msgid "Open call view" msgstr "เปิดหน้าจอการโทร" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:288 -msgid "Open captcha modal" -msgstr "เปิดหน้าต่างแคปต์ชา" - #. Accessible label for the channel header title button in a community channel. #: src/features/channel/components/channel_header/shared.ts:14 msgid "Open channel details for {channelName}" @@ -23712,7 +23670,7 @@ msgstr "เปิดรายละเอียดช่อง {channelName}" msgid "Open chat" msgstr "เปิดแชท" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:314 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:290 msgid "Open claim account modal" msgstr "เปิดหน้าต่างยืนยันบัญชี" @@ -23944,11 +23902,11 @@ msgstr "เปิดสติกเกอร์ในเบราว์เซอ msgid "Open streaming privacy settings" msgstr "เปิดการตั้งค่าความเป็นส่วนตัวของการสตรีม" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:327 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:303 msgid "Open sudo verification modal" msgstr "เปิดหน้าต่างยืนยันตัวตน" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:342 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:318 msgid "Open system DM" msgstr "เปิดข้อความส่วนตัวของระบบ" @@ -24430,7 +24388,7 @@ msgstr "พาสคีย์ต้องใช้บันเดิล macOS #. Generic form-field label for a password. #. Label for SMTP password input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1036 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1010 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:146 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:183 @@ -25212,7 +25170,7 @@ msgid "Popup" msgstr "ป๊อปอัป" #. Label for SMTP port input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1034 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1008 msgid "Port" msgstr "พอร์ต" @@ -25338,7 +25296,7 @@ msgid "Premium since date" msgstr "พรีเมียมตั้งแต่วันที่" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:71 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:70 msgid "Premium state reset on the backend." msgstr "รีเซ็ตสถานะพรีเมียมในระบบหลังบ้านแล้ว" @@ -25608,7 +25566,7 @@ msgid "Privacy settings" msgstr "การตั้งค่าความเป็นส่วนตัว" #. Label for Bluesky OAuth privacy URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1073 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1047 msgid "Privacy URL" msgstr "URL ความเป็นส่วนตัว" @@ -25633,7 +25591,7 @@ msgid "Private details" msgstr "ข้อมูลส่วนตัว" #. Label for Bluesky OAuth private key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1081 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1055 msgid "Private key" msgstr "คีย์ส่วนตัว" @@ -25699,18 +25657,18 @@ msgstr "สีโปรไฟล์" #. Settings section label for editing profile appearance and identity. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:105 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:104 #: src/features/user/components/settings_utils/section_registry/GeneralSettingsSections.ts:6 msgid "Profile customization" msgstr "ปรับแต่งโปรไฟล์" #. Label in the my profile tab. Preserve {selectedGuildName}; it is inserted by code. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:101 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:100 msgid "Profile customization for {selectedGuildName}" msgstr "การปรับแต่งโปรไฟล์สำหรับ {selectedGuildName}" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:97 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:96 msgid "Profile customization form" msgstr "แบบฟอร์มปรับแต่งโปรไฟล์" @@ -25775,7 +25733,7 @@ msgid "Profile type" msgstr "ประเภทโปรไฟล์" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:77 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:76 msgid "Profile updated" msgstr "อัปเดตโปรไฟล์แล้ว" @@ -25812,7 +25770,7 @@ msgstr "แจ้งเตือนเมื่อมีอุปกรณ์เ #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:142 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:141 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:177 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:160 msgid "Pronouns" @@ -25842,11 +25800,6 @@ msgstr "ระบุ ID ผู้ใช้ หรือชื่อผู้ใ msgid "Provide your full legal name for the declaration." msgstr "ระบุชื่อ-นามสกุลตามกฎหมายของคุณสำหรับคำรับรองนี้" -#. Label for an integration provider choice. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 -msgid "Provider" -msgstr "ผู้ให้บริการ" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27626,7 +27579,7 @@ msgid "Reset password" msgstr "รีเซ็ตรหัสผ่าน" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:79 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:78 msgid "Reset premium state" msgstr "รีเซ็ตสถานะพรีเมียม" @@ -27635,7 +27588,7 @@ msgstr "รีเซ็ตสถานะพรีเมียม" msgid "Reset slider to default value" msgstr "รีเซ็ตแถบเลื่อนเป็นค่าเริ่มต้น" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:247 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:229 msgid "Reset socket" msgstr "รีเซ็ตซ็อกเก็ต" @@ -27684,7 +27637,7 @@ msgid "Reset zoom" msgstr "รีเซ็ตการซูม" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:112 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:111 msgid "Resetting premium state..." msgstr "กำลังรีเซ็ตสถานะพรีเมียม..." @@ -28315,7 +28268,7 @@ msgid "Run the instance as one community instead of many. This can only be enabl msgstr "เรียกใช้อินสแตนซ์เป็นคอมมูนิตี้เดียวแทนที่จะเป็นหลายคอมมูนิตี้ เปิดใช้งานได้เฉพาะตอนนี้ระหว่างการตั้งค่าเท่านั้น" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:100 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:99 msgid "Runtime utilities" msgstr "เครื่องมือยูทิลิตีรันไทม์" @@ -29103,11 +29056,6 @@ msgstr "คลิกปุ่มรองแล้ว" msgid "Secret" msgstr "รหัสลับ" -#. Label for a CAPTCHA secret key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1020 -msgid "Secret key" -msgstr "คีย์ลับ" - #. Settings search entry label. Names the settings search entry in the settings UI. #. Short label in the secrets section. Keep it concise. Keep the tone plain and specific. #: src/features/user/components/modals/tabs/applications_tab/application_detail/SecretsSection.tsx:11 @@ -29925,7 +29873,7 @@ msgid "Set up authenticator app" msgstr "ตั้งค่าแอปยืนยันตัวตน" #. Option for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:953 +#: src/features/app/components/setup/SetupWizardSteps.tsx:946 msgid "Set up later" msgstr "ตั้งค่าทีหลัง" @@ -30427,7 +30375,7 @@ msgstr "แสดงรายการข้อความส่วนตัว msgid "Show just the typing indicator without avatars" msgstr "แสดงเฉพาะสถานะกำลังพิมพ์ ไม่แสดงรูปโปรไฟล์" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:308 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:284 msgid "Show keyboard mode intro" msgstr "แสดงหน้าแนะนำโหมดแป้นพิมพ์" @@ -30538,7 +30486,7 @@ msgstr "แสดง Neko" msgid "Show new device alerts" msgstr "แสดงการแจ้งเตือนอุปกรณ์ใหม่" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:282 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:264 msgid "Show new device modal" msgstr "แสดงโมดัลอุปกรณ์ใหม่" @@ -30820,7 +30768,7 @@ msgid "Signed-in devices" msgstr "อุปกรณ์ที่ลงชื่อเข้าใช้" #. Label for Bluesky OAuth signing key ID input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1077 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1051 msgid "Signing key ID" msgstr "ID คีย์การลงนาม" @@ -30910,11 +30858,6 @@ msgstr "บรรทัดเดียว" msgid "Single user (all statuses)" msgstr "ผู้ใช้คนเดียว (ทุกสถานะ)" -#. Label for a CAPTCHA site key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 -msgid "Site key" -msgstr "คีย์ไซต์" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:98 @@ -30964,7 +30907,7 @@ msgid "Skip the system leave notice — nobody gets pinged." msgstr "ข้ามข้อความระบบแจ้งการออกจากกลุ่ม ไม่มีใครได้รับการแจ้งเตือน" #. Description for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:957 +#: src/features/app/components/setup/SetupWizardSteps.tsx:950 msgid "Skip this now and configure it from the admin panel." msgstr "ข้ามตอนนี้และกำหนดค่าจากแผงผู้ดูแลระบบ" @@ -31212,17 +31155,17 @@ msgid "SMS verification is unavailable right now. Try again later or contact sup msgstr "ไม่สามารถยืนยัน SMS ได้ในขณะนี้ โปรดลองอีกครั้งในภายหลังหรือติดต่อฝ่ายสนับสนุน" #. Success message after validating SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1045 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 msgid "SMTP connection verified." msgstr "ยืนยันการเชื่อมต่อ SMTP แล้ว" #. Label for SMTP host input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1033 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1007 msgid "SMTP host" msgstr "โฮสต์ SMTP" #. Failure message after validating SMTP credentials when the server returns no error detail. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1049 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1023 msgid "SMTP validation failed." msgstr "ตรวจสอบ SMTP ไม่สำเร็จ" @@ -31402,7 +31345,7 @@ msgstr "เกิดข้อผิดพลาด โปรดลองอี #. Inline error in the web deep-link prompt when opening the desktop app fails. #. Toast error shown when the mature content check request fails unexpectedly. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:18 -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:580 +#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 #: src/features/auth/flow/DesktopDeepLinkPrompt.tsx:31 msgid "Something went wrong. Try again." msgstr "เกิดข้อผิดพลาด โปรดลองอีกครั้ง" @@ -32099,6 +32042,11 @@ msgstr "ยังจัดทำดัชนีอยู่ กลับมา msgid "Still Neko" msgstr "เนโกะอยู่นิ่ง" +#. Small toast shown only when an automatic background check before sign-in, sign-up or a similar request takes more than a couple of seconds. No user action needed. Keep it short and calm. +#: src/features/auth/altcha/CaptchaInterceptor.ts:13 +msgid "Still working on it…" +msgstr "กำลังดำเนินการอยู่…" + #. Stop-recording button label in the desktop voice message composer. #: src/features/voice/components/VoiceMessageComposerModal.tsx:65 msgid "Stop" @@ -33013,7 +32961,7 @@ msgid "Terms of service" msgstr "ข้อกำหนดในการให้บริการ" #. Label for Bluesky OAuth terms URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1069 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1043 msgid "Terms URL" msgstr "URL ข้อกำหนด" @@ -33023,7 +32971,7 @@ msgid "Terrorism or violent extremism" msgstr "การก่อการร้ายหรือแนวคิดสุดโต่งที่ใช้ความรุนแรง" #. Button that validates SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1041 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1015 msgid "Test SMTP" msgstr "ทดสอบ SMTP" @@ -33800,7 +33748,7 @@ msgid "This clears quick CSS, imported themes, uploaded assets, and local file r msgstr "การดำเนินการนี้จะล้าง CSS ด่วน ธีมที่นำเข้า เนื้อหาที่อัปโหลด และการอ้างอิงไฟล์ในเครื่องบนอุปกรณ์นี้" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:83 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:82 msgid "This clears your backend premium state entirely, including premium type, billing metadata, and override flags." msgstr "การดำเนินการนี้จะล้างสถานะพรีเมียมในส่วนแบ็กเอนด์ของคุณทั้งหมด รวมถึงประเภทพรีเมียม ข้อมูลเมตาสำหรับการเรียกเก็บเงิน และแฟล็กการแทนที่" @@ -34200,7 +34148,7 @@ msgid "This message no longer exists." msgstr "ข้อความนี้ไม่มีอยู่อีกต่อไปแล้ว" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:130 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:129 msgid "This nickname will only be visible in this community" msgstr "ชื่อเล่นนี้จะแสดงในคอมมูนิตี้นี้เท่านั้น" @@ -34277,12 +34225,12 @@ msgid "This removes all custom CSS overrides. Theme files in your library are no msgstr "การดำเนินการนี้จะลบการปรับแต่ง CSS ทั้งหมด ไฟล์ธีมในคลังของคุณจะไม่ได้รับผลกระทบ" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:50 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:49 msgid "This removes all previously authorized IP addresses on your account. The next login from any IP will require email verification." msgstr "การดำเนินการนี้จะลบที่อยู่ IP ที่เคยได้รับอนุญาตทั้งหมดในบัญชีของคุณ การเข้าสู่ระบบครั้งถัดไปจาก IP ใดๆ จะต้องมีการยืนยันทางอีเมล" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:67 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:66 msgid "This removes all trusted domains. You will see the external link warning for all domains again." msgstr "การดำเนินการนี้จะลบโดเมนที่เชื่อถือได้ทั้งหมด คุณจะเห็นคำเตือนลิงก์ภายนอกสำหรับทุกโดเมนอีกครั้ง" @@ -34949,7 +34897,7 @@ msgstr "การเปลี่ยนแปลงไอคอนถาดระ msgid "Trending GIFs" msgstr "GIF ยอดนิยม" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:383 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:359 msgid "Trigger React crash" msgstr "ทำให้ React หยุดทำงาน" @@ -35008,7 +34956,7 @@ msgid "Trusted domains" msgstr "โดเมนที่เชื่อถือได้" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:55 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:54 msgid "Trusted domains cleared." msgstr "ล้างโดเมนที่เชื่อถือได้แล้ว" @@ -35054,7 +35002,6 @@ msgid "Try a different variable name or clear the search." msgstr "ลองใช้ชื่อตัวแปรอื่นหรือล้างการค้นหา" #. Generic action label for retrying a failed or interrupted operation. -#: src/features/auth/components/AltchaVerification.tsx:53 #: src/features/auth/flow/AuthRouteLoadError.tsx:22 #: src/features/i18n/utils/CommonMessageDescriptors.ts:75 msgid "Try again" @@ -35132,10 +35079,6 @@ msgstr "ลองใช้คีย์ความปลอดภัย/พา msgid "Try sending your message again." msgstr "ลองส่งข้อความของคุณอีกครั้ง" -#: src/features/auth/components/modals/CaptchaModal.tsx:177 -msgid "Try Turnstile instead" -msgstr "ลองใช้ Turnstile แทน" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:135 msgid "TTS" @@ -36890,7 +36833,7 @@ msgid "Use this when troubleshooting the client or collecting logs. It may add v msgstr "ใช้เมื่อแก้ไขปัญหาไคลเอ็นต์หรือรวบรวมบันทึก อาจเพิ่มข้อความที่ละเอียดลงในคอนโซลเบราว์เซอร์สำหรับไคลเอ็นต์ปัจจุบัน" #. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1037 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1011 msgid "Use TLS" msgstr "ใช้ TLS" @@ -37056,7 +36999,7 @@ msgstr "ระดับเสียงของผู้ใช้" #. Generic form-field label for a username. #. Label for SMTP username input. #. Settings search entry label. Also used as a search synonym in the settings search bar. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 #: src/features/i18n/utils/CommonMessageDescriptors.ts:572 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:218 #: src/features/user/components/modals/tabs/my_profile_tab/MyProfileTabUsernameSection.tsx:56 @@ -37337,11 +37280,6 @@ msgstr "ยืนยันเบอร์โทรศัพท์" msgid "Verify phone number form" msgstr "แบบฟอร์มยืนยันเบอร์โทรศัพท์" -#. Short label in the authentication captcha modal. Keep the tone plain and specific. -#: src/features/auth/components/modals/CaptchaModal.tsx:17 -msgid "Verify you're human" -msgstr "ยืนยันว่าคุณไม่ใช่หุ่นยนต์" - #. Title of the error modal shown when an unverified account tries to start a DM. #. Title shown when an unverified account cannot start a DM or group DM. #: src/features/app/components/alerts/DmActionErrorModal.tsx:40 @@ -37369,22 +37307,22 @@ msgid "Verify your email before adding an authenticator app." msgstr "ยืนยันอีเมลของคุณก่อนเพิ่มแอปยืนยันตัวตน" #. Description text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:117 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:116 msgid "Verify your email before changing your community nickname, avatar, banner, bio, pronouns, or accent color." msgstr "ยืนยันอีเมลของคุณก่อนเปลี่ยนชื่อเล่นในคอมมูนิตี้ รูปโปรไฟล์ แบนเนอร์ ประวัติส่วนตัว คำสรรพนาม หรือสีเน้น" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:121 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:120 msgid "Verify your email before changing your username, display name, avatar, banner, bio, pronouns, time zone, or {premiumProductName} badge privacy." msgstr "ยืนยันอีเมลของคุณก่อนเปลี่ยนชื่อผู้ใช้ ชื่อที่แสดง รูปโปรไฟล์ แบนเนอร์ ประวัติส่วนตัว คำสรรพนาม เขตเวลา หรือความเป็นส่วนตัวของป้าย {premiumProductName}" #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:85 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:84 msgid "Verify your email before editing this community profile. You can still preview it here." msgstr "ยืนยันอีเมลของคุณก่อนแก้ไขโปรไฟล์คอมมูนิตี้นี้ คุณยังดูตัวอย่างได้ที่นี่" #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:89 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:88 msgid "Verify your email before editing your profile. You can still preview it here." msgstr "ยืนยันอีเมลของคุณก่อนแก้ไขโปรไฟล์ คุณยังดูตัวอย่างได้ที่นี่" @@ -37416,12 +37354,12 @@ msgid "Verify your email to continue using {productName}." msgstr "ยืนยันอีเมลของคุณเพื่อใช้งาน {productName} ต่อไป" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:109 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:108 msgid "Verify your email to edit this community profile" msgstr "ยืนยันอีเมลเพื่อแก้ไขโปรไฟล์คอมมูนิตี้นี้" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:113 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:112 msgid "Verify your email to edit your profile" msgstr "ยืนยันอีเมลเพื่อแก้ไขโปรไฟล์" @@ -38398,10 +38336,6 @@ msgstr "เราได้ลดราคา {premiumProductName} ในบร msgid "We need one verification step before you continue. This helps protect accounts and keep spam off {productName}." msgstr "เราต้องการขั้นตอนการยืนยันหนึ่งขั้นตอนก่อนที่คุณจะดำเนินการต่อ ซึ่งจะช่วยปกป้องบัญชีและป้องกันสแปมบน {productName}" -#: src/features/auth/components/modals/CaptchaModal.tsx:128 -msgid "We need to make sure you're not a bot. Complete the verification below." -msgstr "เราต้องตรวจสอบให้แน่ใจว่าคุณไม่ใช่บอท โปรดทำการยืนยันด้านล่าง" - #. Required-action modal intro text when both email and phone verification are required. #: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:216 msgid "We need two verification steps before you continue. We will show one step at a time." @@ -39256,7 +39190,7 @@ msgid "You can't befriend yourself" msgstr "คุณไม่สามารถเป็นเพื่อนกับตัวเองได้" #. Label in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:134 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:133 msgid "You can't change your nickname here" msgstr "คุณเปลี่ยนชื่อเล่นที่นี่ไม่ได้" @@ -39506,7 +39440,7 @@ msgid "You have unsaved changes." msgstr "คุณมีการเปลี่ยนแปลงที่ยังไม่ได้บันทึก" #. Warning text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:81 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:80 msgid "You have unsaved changes. Save or reset before leaving." msgstr "คุณมีการเปลี่ยนแปลงที่ยังไม่ได้บันทึก บันทึกหรือรีเซ็ตก่อนออกจากหน้านี้" @@ -40031,10 +39965,6 @@ msgstr "ดำเนินการไม่สำเร็จเนื่อง msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "ใบสมัครของคุณอยู่ระหว่างการตรวจสอบ คุณยังสามารถอัปเดตรายละเอียดประกาศหรือถอนใบสมัครได้" -#: src/features/auth/components/AltchaVerification.tsx:50 -msgid "Your browser couldn't finish the check." -msgstr "เบราว์เซอร์ของคุณไม่สามารถดำเนินการตรวจสอบให้เสร็จสิ้นได้" - #. Body of the browser-audio-required modal explaining why the user must click before audio can play. #: src/features/voice/components/modals/AudioPlaybackPermissionModal.tsx:12 msgid "Your browser requires user interaction before audio can be played. Click the button below to enable voice chat." @@ -40386,7 +40316,7 @@ msgid "YouTube enrichment" msgstr "การเสริมข้อมูล YouTube" #. Setup wizard title for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:977 +#: src/features/app/components/setup/SetupWizardSteps.tsx:970 msgid "YouTube previews" msgstr "ตัวอย่าง YouTube" diff --git a/fluxer_app/src/features/i18n/locales/tr/messages.po b/fluxer_app/src/features/i18n/locales/tr/messages.po index 4e1073461..2cffd9220 100644 --- a/fluxer_app/src/features/i18n/locales/tr/messages.po +++ b/fluxer_app/src/features/i18n/locales/tr/messages.po @@ -2395,11 +2395,6 @@ msgstr "60 saniye" msgid "7 days" msgstr "7 gün" -#. Required-action error when the API requires a captcha for phone verification. -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 -msgid "A browser check is required before phone verification. Try again from the sign-in page or contact support." -msgstr "Telefon doğrulamasından önce tarayıcı kontrolü gerekiyor. Giriş sayfasından tekrar deneyin veya destekle iletişime geçin." - #. Hint shown beside in:. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:77 msgid "a channel" @@ -2928,7 +2923,7 @@ msgid "Add a friend to get started." msgstr "Başlamak için bir arkadaş ekleyin." #. Setup wizard body for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:973 +#: src/features/app/components/setup/SetupWizardSteps.tsx:966 msgid "Add a Klipy API key to enable GIF search at runtime." msgstr "Çalışma zamanında GIF aramayı etkinleştirmek için bir Klipy API anahtarı ekleyin." @@ -2965,7 +2960,7 @@ msgid "Add a working email" msgstr "Çalışan bir e-posta adresi ekleyin" #. Setup wizard body for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:981 +#: src/features/app/components/setup/SetupWizardSteps.tsx:974 msgid "Add a YouTube Data API key to enrich YouTube links." msgstr "YouTube bağlantılarını zenginleştirmek için bir YouTube Data API anahtarı ekleyin." @@ -3011,7 +3006,7 @@ msgid "Add another reaction" msgstr "Başka bir tepki ekle" #. Setup wizard body for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1005 +#: src/features/app/components/setup/SetupWizardSteps.tsx:990 msgid "Add Bluesky OAuth client metadata and a signing key." msgstr "Bluesky OAuth istemci meta verilerini ve bir imzalama anahtarını ekleyin." @@ -3161,7 +3156,7 @@ msgid "Add shortcut" msgstr "Kısayol ekle" #. Setup wizard body for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:997 +#: src/features/app/components/setup/SetupWizardSteps.tsx:982 msgid "Add SMTP credentials so the instance can send verification and notification email." msgstr "Kurulumun doğrulama ve bildirim e-postaları gönderebilmesi için SMTP kimlik bilgilerini ekleyin." @@ -3188,7 +3183,7 @@ msgid "Add stream" msgstr "Yayın ekle" #. Description for configuring an optional setup wizard integration now. -#: src/features/app/components/setup/SetupWizardSteps.tsx:965 +#: src/features/app/components/setup/SetupWizardSteps.tsx:958 msgid "Add the credentials during setup." msgstr "Kurulum sırasında kimlik bilgilerini ekleyin." @@ -3954,7 +3949,7 @@ msgid "An invalid status was provided. You can now close this tab and return to msgstr "Geçersiz bir durum sağlandı. Bu sekmeyi kapatıp uygulamaya geri dönebilirsiniz." #. Short label in the authentication auth form. Keep the tone plain and specific. -#: src/features/auth/hooks/useAuthForm.ts:13 +#: src/features/auth/hooks/useAuthForm.ts:12 msgid "An unexpected error occurred" msgstr "Beklenmedik bir hata oluştu" @@ -4262,7 +4257,7 @@ msgid "Anyone can request an account, but an administrator must approve it." msgstr "Herkes hesap isteyebilir ancak bir yönetici onaylamalıdır." #. Label for an integration API key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1018 +#: src/features/app/components/setup/SetupWizardSteps.tsx:994 msgid "API key" msgstr "API anahtarı" @@ -4958,7 +4953,7 @@ msgid "Authorized apps" msgstr "Yetkili uygulamalar" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:38 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:37 msgid "Authorized IPs cleared. New logins will require email verification." msgstr "Yetkili IP'ler temizlendi. Yeni girişler e-posta doğrulaması gerektirecek." @@ -5730,7 +5725,7 @@ msgid "Bluesky connections" msgstr "Bluesky bağlantıları" #. Setup wizard title for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1001 +#: src/features/app/components/setup/SetupWizardSteps.tsx:986 msgid "Bluesky OAuth" msgstr "Bluesky OAuth" @@ -5897,11 +5892,6 @@ msgstr "Bot izinleri negatif olamaz." msgid "Bot profile" msgstr "Bot profili" -#. Setup wizard title for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:985 -msgid "Bot protection" -msgstr "Bot koruması" - #. Short label in the authentication OAUTH scopes step. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/OAuthScopesStep.tsx:20 msgid "Bot scope requested" @@ -6554,11 +6544,6 @@ msgstr "Düzenlenemez" msgid "Cannot delete account" msgstr "Hesap silinemiyor" -#. Toast error shown when captcha verification fails inside the auth captcha interceptor. -#: src/features/auth/components/CaptchaInterceptor.tsx:15 -msgid "Captcha verification failed. Try again." -msgstr "Captcha doğrulaması başarısız oldu. Tekrar deneyin." - #. Section header in the Linux audio source picker. Lists capture-target options (entire system / specific apps). #: src/features/voice/components/AudioSourcePickerLinux.tsx:50 msgid "Capture" @@ -7398,10 +7383,6 @@ msgstr "Erişim kontrol ediliyor..." msgid "Checking screen recording permission..." msgstr "Ekran kaydı izni kontrol ediliyor..." -#: src/features/auth/components/AltchaVerification.tsx:62 -msgid "Checking your browser. This takes a few seconds." -msgstr "Tarayıcınız kontrol ediliyor. Bu birkaç saniye sürecektir." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -7571,11 +7552,6 @@ msgstr "Dosya'yı seçin, ardından Dock'a Ekle'yi seçin." msgid "Choose friends to message." msgstr "Mesaj göndermek için arkadaş seçin." -#. Setup wizard body for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:989 -msgid "Choose hCaptcha or Cloudflare Turnstile for signup challenges." -msgstr "Kayıt doğrulamaları için hCaptcha veya Cloudflare Turnstile seçin." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:455 msgid "Choose how chat moves after you send a message" @@ -7982,17 +7958,17 @@ msgid "Clear selection" msgstr "Seçimi temizle" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:88 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:87 msgid "Clear trust all setting" msgstr "Tümüne güven ayarını temizle" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:63 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:62 msgid "Clear trusted domains" msgstr "Güvenilen alan adlarını temizle" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:96 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:95 msgid "Clear trusted domains ({trustedDomainsCount})" msgstr "Güvenilen alan adlarını temizle ({trustedDomainsCount})" @@ -8002,7 +7978,7 @@ msgid "Clearer text" msgstr "Daha net metin" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:108 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:107 msgid "Clearing trusted domains..." msgstr "Güvenilen alan adları temizleniyor..." @@ -8100,7 +8076,7 @@ msgid "Client" msgstr "İstemci" #. Label for Bluesky OAuth client name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1057 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1031 msgid "Client name" msgstr "İstemci adı" @@ -8117,7 +8093,7 @@ msgid "Client secret regenerated. Update any code that uses the old secret." msgstr "İstemci gizli anahtarı yeniden oluşturuldu. Eski gizli anahtarı kullanan tüm kodları güncelleyin." #. Label for Bluesky OAuth client URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1061 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 msgid "Client URL" msgstr "İstemci URL'si" @@ -8269,11 +8245,6 @@ msgstr "Kapatılan DM'ler" msgid "Cloud upload" msgstr "Buluta yükle" -#. Cloudflare Turnstile provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1014 -msgid "Cloudflare Turnstile" -msgstr "Cloudflare Turnstile" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:58 msgid "Coal" @@ -8669,7 +8640,7 @@ msgstr "Topluluk adı" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:126 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:125 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:113 msgid "Community nickname" msgstr "Topluluk takma adı" @@ -8722,7 +8693,7 @@ msgid "Community profile" msgstr "Topluluk profili" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:73 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:72 msgid "Community profile updated" msgstr "Topluluk profili güncellendi" @@ -8880,7 +8851,7 @@ msgid "Configure keyboard shortcuts" msgstr "Klavye kısayollarını yapılandır" #. Option for configuring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:961 +#: src/features/app/components/setup/SetupWizardSteps.tsx:954 msgid "Configure now" msgstr "Şimdi yapılandır" @@ -12341,7 +12312,7 @@ msgstr "{channel} kanalından ayrıl" msgid "Disconnect from voice" msgstr "Sesten ayrıl" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:261 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:243 msgid "Disconnect socket" msgstr "Soket bağlantısını kes" @@ -12479,7 +12450,7 @@ msgstr "Görüntüleme modu" #. Short label in the inputs tab. Keep it concise. #. Short label in the my profile tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:22 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:138 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:137 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:61 msgid "Display name" msgstr "Görünen ad" @@ -12625,7 +12596,7 @@ msgstr "{communityName} topluluğuna katılmak ister misin?" #. Label in the accessibility tab. #. Label in the my profile tab. #: src/features/user/components/modals/tabs/AccessibilityTab.tsx:54 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:146 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:145 msgid "Doc, I'm from the future. I came here in a time machine that you invented. Now, I need your help to get back to the year 1985." msgstr "Doktor, ben gelecekten geliyorum. Senin icat ettiğin bir zaman makinesiyle buraya geldim. Şimdi, 1985 yılına geri dönmek için yardımına ihtiyacım var." @@ -13262,7 +13233,7 @@ msgid "Edit your messages above or below" msgstr "Yukarıdaki veya aşağıdaki mesajlarını düzenle" #. Button or menu action label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:93 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:92 msgid "Edit your profile appearance and see a live preview" msgstr "Profil görünümünüzü düzenleyin ve canlı önizlemesini görün" @@ -13330,7 +13301,7 @@ msgid "Email changed" msgstr "E-posta değiştirildi" #. Setup wizard title for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:993 +#: src/features/app/components/setup/SetupWizardSteps.tsx:978 msgid "Email delivery" msgstr "E-posta gönderimi" @@ -13635,7 +13606,7 @@ msgid "Enable beta feature" msgstr "Beta özelliğini etkinleştir" #. Label for enabling Bluesky OAuth in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1053 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1027 msgid "Enable Bluesky OAuth" msgstr "Bluesky OAuth'u etkinleştir" @@ -13668,7 +13639,7 @@ msgid "Enable developer mode" msgstr "Geliştirici modunu etkinleştir" #. Label for enabling SMTP email delivery in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1021 +#: src/features/app/components/setup/SetupWizardSteps.tsx:995 msgid "Enable email delivery" msgstr "E-posta gönderimini etkinleştir" @@ -14705,7 +14676,7 @@ msgid "Failed to ban member. Try again." msgstr "Üye yasaklanamadı. Tekrar deneyin." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:59 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:58 msgid "Failed to clear trusted domains." msgstr "Güvenilen alan adları temizlenemedi." @@ -14762,7 +14733,7 @@ msgid "Failed to enable camera." msgstr "Kamera etkinleştirilemedi." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:42 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:41 msgid "Failed to forget authorized IPs. Try again." msgstr "Yetkili IP'ler unutulamadı. Tekrar deneyin." @@ -14907,7 +14878,7 @@ msgid "Failed to resend verification code. Try again later." msgstr "Doğrulama kodu yeniden gönderilemedi. Daha sonra tekrar deneyin." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:75 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:74 msgid "Failed to reset premium state." msgstr "Premium durumu sıfırlanamadı." @@ -15581,7 +15552,7 @@ msgstr "Yükleme iskeletini zorla" msgid "Force mature media" msgstr "Yetişkin medyayı zorla" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:276 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:258 msgid "Force move to AFK channel" msgstr "AFK kanalına taşımayı zorla" @@ -15640,7 +15611,7 @@ msgid "Forced off" msgstr "Zorla kapalı" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:46 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:45 msgid "Forget authorized IPs" msgstr "Yetkili IP'leri unut" @@ -15650,7 +15621,7 @@ msgid "Forget subscriptions" msgstr "Abonelikleri unut" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:104 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:103 msgid "Forgetting authorized IPs..." msgstr "Yetkili IP'ler unutuluyor..." @@ -15907,12 +15878,12 @@ msgid "from <0>{0}" msgstr "<0>{0} kaynağından" #. Label for SMTP from email input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1025 +#: src/features/app/components/setup/SetupWizardSteps.tsx:999 msgid "From email" msgstr "Gönderen e-posta adresi" #. Label for SMTP from name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1029 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1003 msgid "From name" msgstr "Gönderen adı" @@ -16204,7 +16175,7 @@ msgid "GIF preview" msgstr "GIF önizlemesi" #. Setup wizard title for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:969 +#: src/features/app/components/setup/SetupWizardSteps.tsx:962 msgid "GIF search" msgstr "GIF araması" @@ -16853,21 +16824,12 @@ msgstr "Hediye kodun mu var? {PREMIUM_PRODUCT_NAME}'ın kilidini açmak için ku msgid "Having fun?" msgstr "Eğleniyor musun?" -#: src/features/auth/components/modals/CaptchaModal.tsx:175 -msgid "Having issues? Try hCaptcha instead" -msgstr "Sorun mu yaşıyorsunuz? Bunun yerine hCaptcha'yı deneyin" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:63 msgctxt "us-state" msgid "Hawaii" msgstr "Hawaii" -#. hCaptcha provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1013 -msgid "hCaptcha" -msgstr "hCaptcha" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:238 msgid "HD" @@ -19768,7 +19730,7 @@ msgid "Logo" msgstr "Logo" #. Label for Bluesky OAuth logo URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1065 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1039 msgid "Logo URL" msgstr "Logo URL'si" @@ -22941,7 +22903,7 @@ msgid "No tokens match \"{searchQuery}\"." msgstr "\"{searchQuery}\" ile eşleşen belirteç yok." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:92 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:91 msgid "No trusted domains" msgstr "Güvenilen alan adı yok" @@ -23696,10 +23658,6 @@ msgstr "Tarayıcı seçiciyi aç" msgid "Open call view" msgstr "Arama görünümünü aç" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:288 -msgid "Open captcha modal" -msgstr "Captcha modalını aç" - #. Accessible label for the channel header title button in a community channel. #: src/features/channel/components/channel_header/shared.ts:14 msgid "Open channel details for {channelName}" @@ -23712,7 +23670,7 @@ msgstr "{channelName} için kanal ayrıntılarını aç" msgid "Open chat" msgstr "Sohbeti aç" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:314 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:290 msgid "Open claim account modal" msgstr "Hesap sahiplenme modalını aç" @@ -23944,11 +23902,11 @@ msgstr "Çıkartmayı tarayıcıda aç" msgid "Open streaming privacy settings" msgstr "Yayın gizliliği ayarlarını aç" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:327 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:303 msgid "Open sudo verification modal" msgstr "Sudo doğrulama modalını aç" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:342 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:318 msgid "Open system DM" msgstr "Sistem DM'ini aç" @@ -24430,7 +24388,7 @@ msgstr "Geçiş anahtarları, geçerli bir uygulama tanımlayıcısına sahip im #. Generic form-field label for a password. #. Label for SMTP password input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1036 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1010 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:146 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:183 @@ -25212,7 +25170,7 @@ msgid "Popup" msgstr "Açılır pencere" #. Label for SMTP port input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1034 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1008 msgid "Port" msgstr "Port" @@ -25338,7 +25296,7 @@ msgid "Premium since date" msgstr "Premium başlangıç tarihi" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:71 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:70 msgid "Premium state reset on the backend." msgstr "Arka uçta premium durum sıfırlandı." @@ -25608,7 +25566,7 @@ msgid "Privacy settings" msgstr "Gizlilik ayarları" #. Label for Bluesky OAuth privacy URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1073 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1047 msgid "Privacy URL" msgstr "Gizlilik URL'si" @@ -25633,7 +25591,7 @@ msgid "Private details" msgstr "Kişisel bilgiler" #. Label for Bluesky OAuth private key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1081 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1055 msgid "Private key" msgstr "Özel anahtar" @@ -25699,18 +25657,18 @@ msgstr "Profil rengi" #. Settings section label for editing profile appearance and identity. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:105 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:104 #: src/features/user/components/settings_utils/section_registry/GeneralSettingsSections.ts:6 msgid "Profile customization" msgstr "Profil özelleştirme" #. Label in the my profile tab. Preserve {selectedGuildName}; it is inserted by code. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:101 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:100 msgid "Profile customization for {selectedGuildName}" msgstr "{selectedGuildName} için profil özelleştirmesi" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:97 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:96 msgid "Profile customization form" msgstr "Profil özelleştirme formu" @@ -25775,7 +25733,7 @@ msgid "Profile type" msgstr "Profil türü" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:77 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:76 msgid "Profile updated" msgstr "Profil güncellendi" @@ -25812,7 +25770,7 @@ msgstr "Yeni ses cihazı bağlandığında sor" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:142 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:141 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:177 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:160 msgid "Pronouns" @@ -25842,11 +25800,6 @@ msgstr "Bildirdiğiniz kişinin kullanıcı kimliğini veya kullanıcı adını msgid "Provide your full legal name for the declaration." msgstr "Beyan için tam yasal adınızı girin." -#. Label for an integration provider choice. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 -msgid "Provider" -msgstr "Sağlayıcı" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27626,7 +27579,7 @@ msgid "Reset password" msgstr "Parolayı sıfırla" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:79 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:78 msgid "Reset premium state" msgstr "Premium durumunu sıfırla" @@ -27635,7 +27588,7 @@ msgstr "Premium durumunu sıfırla" msgid "Reset slider to default value" msgstr "Kaydırıcıyı varsayılan değere sıfırla" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:247 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:229 msgid "Reset socket" msgstr "Soketi sıfırla" @@ -27684,7 +27637,7 @@ msgid "Reset zoom" msgstr "Yakınlaştırmayı sıfırla" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:112 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:111 msgid "Resetting premium state..." msgstr "Premium durumu sıfırlanıyor..." @@ -28315,7 +28268,7 @@ msgid "Run the instance as one community instead of many. This can only be enabl msgstr "Kurulumu birden fazla topluluk yerine tek bir topluluk olarak çalıştırın. Bu yalnızca şimdi, kurulum sırasında etkinleştirilebilir." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:100 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:99 msgid "Runtime utilities" msgstr "Çalışma zamanı araçları" @@ -29103,11 +29056,6 @@ msgstr "İkincil düğmeye tıklandı." msgid "Secret" msgstr "Gizli" -#. Label for a CAPTCHA secret key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1020 -msgid "Secret key" -msgstr "Gizli anahtar" - #. Settings search entry label. Names the settings search entry in the settings UI. #. Short label in the secrets section. Keep it concise. Keep the tone plain and specific. #: src/features/user/components/modals/tabs/applications_tab/application_detail/SecretsSection.tsx:11 @@ -29925,7 +29873,7 @@ msgid "Set up authenticator app" msgstr "Kimlik doğrulayıcı uygulamasını ayarla" #. Option for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:953 +#: src/features/app/components/setup/SetupWizardSteps.tsx:946 msgid "Set up later" msgstr "Daha sonra ayarla" @@ -30427,7 +30375,7 @@ msgstr "DM listesini göster" msgid "Show just the typing indicator without avatars" msgstr "Yalnızca yazıyor göstergesini göster (avatarsız)" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:308 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:284 msgid "Show keyboard mode intro" msgstr "Klavye modu tanıtımını göster" @@ -30538,7 +30486,7 @@ msgstr "Neko'yu göster" msgid "Show new device alerts" msgstr "Yeni cihaz uyarılarını göster" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:282 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:264 msgid "Show new device modal" msgstr "Yeni cihaz modalını göster" @@ -30820,7 +30768,7 @@ msgid "Signed-in devices" msgstr "Oturum açmış cihazlar" #. Label for Bluesky OAuth signing key ID input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1077 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1051 msgid "Signing key ID" msgstr "İmzalama anahtarı kimliği" @@ -30910,11 +30858,6 @@ msgstr "Tek satır" msgid "Single user (all statuses)" msgstr "Tek kullanıcı (tüm durumlar)" -#. Label for a CAPTCHA site key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 -msgid "Site key" -msgstr "Site anahtarı" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:98 @@ -30964,7 +30907,7 @@ msgid "Skip the system leave notice — nobody gets pinged." msgstr "Sistem ayrılma mesajını atla. Kimseye bildirim gitmez." #. Description for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:957 +#: src/features/app/components/setup/SetupWizardSteps.tsx:950 msgid "Skip this now and configure it from the admin panel." msgstr "Şimdi atla ve yönetici panelinden yapılandır." @@ -31212,17 +31155,17 @@ msgid "SMS verification is unavailable right now. Try again later or contact sup msgstr "SMS doğrulaması şu anda kullanılamıyor. Daha sonra tekrar deneyin veya destekle iletişime geçin." #. Success message after validating SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1045 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 msgid "SMTP connection verified." msgstr "SMTP bağlantısı doğrulandı." #. Label for SMTP host input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1033 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1007 msgid "SMTP host" msgstr "SMTP sunucusu" #. Failure message after validating SMTP credentials when the server returns no error detail. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1049 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1023 msgid "SMTP validation failed." msgstr "SMTP doğrulaması başarısız oldu." @@ -31402,7 +31345,7 @@ msgstr "Bir sorun oluştu. Lütfen daha sonra tekrar deneyin." #. Inline error in the web deep-link prompt when opening the desktop app fails. #. Toast error shown when the mature content check request fails unexpectedly. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:18 -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:580 +#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 #: src/features/auth/flow/DesktopDeepLinkPrompt.tsx:31 msgid "Something went wrong. Try again." msgstr "Bir şeyler ters gitti. Tekrar deneyin." @@ -32099,6 +32042,11 @@ msgstr "Dizin oluşturma sürüyor, birazdan tekrar kontrol edin" msgid "Still Neko" msgstr "Sabit Neko" +#. Small toast shown only when an automatic background check before sign-in, sign-up or a similar request takes more than a couple of seconds. No user action needed. Keep it short and calm. +#: src/features/auth/altcha/CaptchaInterceptor.ts:13 +msgid "Still working on it…" +msgstr "Hâlâ çalışıyor…" + #. Stop-recording button label in the desktop voice message composer. #: src/features/voice/components/VoiceMessageComposerModal.tsx:65 msgid "Stop" @@ -33013,7 +32961,7 @@ msgid "Terms of service" msgstr "Hizmet Şartları" #. Label for Bluesky OAuth terms URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1069 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1043 msgid "Terms URL" msgstr "Şartlar URL'si" @@ -33023,7 +32971,7 @@ msgid "Terrorism or violent extremism" msgstr "Terörizm veya şiddet içeren aşırıcılık" #. Button that validates SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1041 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1015 msgid "Test SMTP" msgstr "SMTP'yi test et" @@ -33800,7 +33748,7 @@ msgid "This clears quick CSS, imported themes, uploaded assets, and local file r msgstr "Bu işlem, bu cihazdaki hızlı CSS'i, içe aktarılan temaları, yüklenen öğeleri ve yerel dosya referanslarını temizler." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:83 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:82 msgid "This clears your backend premium state entirely, including premium type, billing metadata, and override flags." msgstr "Bu işlem, premium türü, faturalandırma meta verileri ve geçersiz kılma işaretleri dahil olmak üzere arka uç premium durumunuzu tamamen temizler." @@ -34200,7 +34148,7 @@ msgid "This message no longer exists." msgstr "Bu mesaj artık mevcut değil." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:130 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:129 msgid "This nickname will only be visible in this community" msgstr "Bu takma ad yalnızca bu toplulukta görünür olacak" @@ -34277,12 +34225,12 @@ msgid "This removes all custom CSS overrides. Theme files in your library are no msgstr "Bu işlem tüm özel CSS geçersiz kılmalarını kaldırır. Kütüphanenizdeki tema dosyaları etkilenmez." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:50 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:49 msgid "This removes all previously authorized IP addresses on your account. The next login from any IP will require email verification." msgstr "Bu işlem, hesabınızdaki önceden yetkilendirilmiş tüm IP adreslerini kaldırır. Herhangi bir IP'den yapılacak bir sonraki oturum açma işlemi e-posta doğrulaması gerektirecek." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:67 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:66 msgid "This removes all trusted domains. You will see the external link warning for all domains again." msgstr "Bu işlem tüm güvenilen alan adlarını kaldırır. Tüm alan adları için harici bağlantı uyarısını tekrar göreceksiniz." @@ -34949,7 +34897,7 @@ msgstr "Tepsi simgesi değişiklikleri yalnızca Linux'ta yeniden başlattıktan msgid "Trending GIFs" msgstr "Popüler GIF'ler" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:383 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:359 msgid "Trigger React crash" msgstr "React çökmesini tetikle" @@ -35008,7 +34956,7 @@ msgid "Trusted domains" msgstr "Güvenilen alan adları" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:55 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:54 msgid "Trusted domains cleared." msgstr "Güvenilen alan adları temizlendi." @@ -35054,7 +35002,6 @@ msgid "Try a different variable name or clear the search." msgstr "Farklı bir değişken adı deneyin veya aramayı temizleyin." #. Generic action label for retrying a failed or interrupted operation. -#: src/features/auth/components/AltchaVerification.tsx:53 #: src/features/auth/flow/AuthRouteLoadError.tsx:22 #: src/features/i18n/utils/CommonMessageDescriptors.ts:75 msgid "Try again" @@ -35132,10 +35079,6 @@ msgstr "Bunun yerine güvenlik anahtarını/geçiş anahtarını dene" msgid "Try sending your message again." msgstr "Mesajınızı tekrar göndermeyi deneyin." -#: src/features/auth/components/modals/CaptchaModal.tsx:177 -msgid "Try Turnstile instead" -msgstr "Bunun yerine Turnstile'ı dene" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:135 msgid "TTS" @@ -36890,7 +36833,7 @@ msgid "Use this when troubleshooting the client or collecting logs. It may add v msgstr "Bunu istemci sorunlarını giderirken veya günlükleri toplarken kullanın. Geçerli istemci için tarayıcı konsoluna ayrıntılı mesajlar ekleyebilir." #. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1037 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1011 msgid "Use TLS" msgstr "TLS kullan" @@ -37056,7 +36999,7 @@ msgstr "Kullanıcı sesi" #. Generic form-field label for a username. #. Label for SMTP username input. #. Settings search entry label. Also used as a search synonym in the settings search bar. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 #: src/features/i18n/utils/CommonMessageDescriptors.ts:572 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:218 #: src/features/user/components/modals/tabs/my_profile_tab/MyProfileTabUsernameSection.tsx:56 @@ -37337,11 +37280,6 @@ msgstr "Telefon numarasını doğrula" msgid "Verify phone number form" msgstr "Telefon numarası doğrulama formu" -#. Short label in the authentication captcha modal. Keep the tone plain and specific. -#: src/features/auth/components/modals/CaptchaModal.tsx:17 -msgid "Verify you're human" -msgstr "İnsan olduğunuzu doğrulayın" - #. Title of the error modal shown when an unverified account tries to start a DM. #. Title shown when an unverified account cannot start a DM or group DM. #: src/features/app/components/alerts/DmActionErrorModal.tsx:40 @@ -37369,22 +37307,22 @@ msgid "Verify your email before adding an authenticator app." msgstr "Bir kimlik doğrulayıcı uygulaması eklemeden önce e-postanızı doğrulayın." #. Description text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:117 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:116 msgid "Verify your email before changing your community nickname, avatar, banner, bio, pronouns, or accent color." msgstr "Topluluk takma adınızı, avatarınızı, banner'ınızı, biyografinizi, zamirlerinizi veya vurgu renginizi değiştirmeden önce e-postanızı doğrulayın." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:121 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:120 msgid "Verify your email before changing your username, display name, avatar, banner, bio, pronouns, time zone, or {premiumProductName} badge privacy." msgstr "Kullanıcı adınızı, görünen adınızı, avatarınızı, banner'ınızı, biyografinizi, zamirlerinizi, saat diliminizi veya {premiumProductName} rozeti gizliliğinizi değiştirmeden önce e-postanızı doğrulayın." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:85 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:84 msgid "Verify your email before editing this community profile. You can still preview it here." msgstr "Bu topluluk profilini düzenlemeden önce e-postanızı doğrulayın. Yine de buradan önizleyebilirsiniz." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:89 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:88 msgid "Verify your email before editing your profile. You can still preview it here." msgstr "Profilinizi düzenlemeden önce e-postanızı doğrulayın. Yine de buradan önizleyebilirsiniz." @@ -37416,12 +37354,12 @@ msgid "Verify your email to continue using {productName}." msgstr "{productName} uygulamasını kullanmaya devam etmek için e-postanızı doğrulayın." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:109 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:108 msgid "Verify your email to edit this community profile" msgstr "Bu topluluk profilini düzenlemek için e-postanızı doğrulayın" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:113 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:112 msgid "Verify your email to edit your profile" msgstr "Profilinizi düzenlemek için e-postanızı doğrulayın" @@ -38398,10 +38336,6 @@ msgstr "Brezilya'daki {premiumProductName} fiyatını düşürdük. Artık ayda msgid "We need one verification step before you continue. This helps protect accounts and keep spam off {productName}." msgstr "Devam etmeden önce bir doğrulama adımına ihtiyacımız var. Bu, hesapları korumaya ve {productName} platformunu spam'den uzak tutmaya yardımcı olur." -#: src/features/auth/components/modals/CaptchaModal.tsx:128 -msgid "We need to make sure you're not a bot. Complete the verification below." -msgstr "Bot olmadığınızdan emin olmamız gerekiyor. Lütfen aşağıdaki doğrulamayı tamamlayın." - #. Required-action modal intro text when both email and phone verification are required. #: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:216 msgid "We need two verification steps before you continue. We will show one step at a time." @@ -39256,7 +39190,7 @@ msgid "You can't befriend yourself" msgstr "Kendinizle arkadaş olamazsınız" #. Label in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:134 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:133 msgid "You can't change your nickname here" msgstr "Takma adınızı buradan değiştiremezsiniz" @@ -39506,7 +39440,7 @@ msgid "You have unsaved changes." msgstr "Kaydedilmemiş değişiklikleriniz var." #. Warning text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:81 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:80 msgid "You have unsaved changes. Save or reset before leaving." msgstr "Kaydedilmemiş değişiklikleriniz var. Ayrılmadan önce kaydedin veya sıfırlayın." @@ -40031,10 +39965,6 @@ msgstr "İşleminiz güvenlik sistemlerimiz tarafından işaretlendiği için ta msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Başvurunuz incelenmeyi bekliyor. İlan ayrıntılarınızı yine de güncelleyebilir veya başvuruyu geri çekebilirsiniz." -#: src/features/auth/components/AltchaVerification.tsx:50 -msgid "Your browser couldn't finish the check." -msgstr "Tarayıcınız kontrolü tamamlayamadı." - #. Body of the browser-audio-required modal explaining why the user must click before audio can play. #: src/features/voice/components/modals/AudioPlaybackPermissionModal.tsx:12 msgid "Your browser requires user interaction before audio can be played. Click the button below to enable voice chat." @@ -40386,7 +40316,7 @@ msgid "YouTube enrichment" msgstr "YouTube zenginleştirmesi" #. Setup wizard title for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:977 +#: src/features/app/components/setup/SetupWizardSteps.tsx:970 msgid "YouTube previews" msgstr "YouTube önizlemeleri" diff --git a/fluxer_app/src/features/i18n/locales/uk/messages.po b/fluxer_app/src/features/i18n/locales/uk/messages.po index 3b5601bd5..accd57778 100644 --- a/fluxer_app/src/features/i18n/locales/uk/messages.po +++ b/fluxer_app/src/features/i18n/locales/uk/messages.po @@ -2395,11 +2395,6 @@ msgstr "60 секунд" msgid "7 days" msgstr "7 днів" -#. Required-action error when the API requires a captcha for phone verification. -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 -msgid "A browser check is required before phone verification. Try again from the sign-in page or contact support." -msgstr "Перед підтвердженням номера телефону потрібна перевірка в браузері. Спробуйте ще раз зі сторінки входу або зверніться до служби підтримки." - #. Hint shown beside in:. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:77 msgid "a channel" @@ -2928,7 +2923,7 @@ msgid "Add a friend to get started." msgstr "Додайте друга, щоб почати." #. Setup wizard body for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:973 +#: src/features/app/components/setup/SetupWizardSteps.tsx:966 msgid "Add a Klipy API key to enable GIF search at runtime." msgstr "Додайте ключ API Klipy, щоб увімкнути пошук GIF під час роботи." @@ -2965,7 +2960,7 @@ msgid "Add a working email" msgstr "Додайте дієву електронну адресу" #. Setup wizard body for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:981 +#: src/features/app/components/setup/SetupWizardSteps.tsx:974 msgid "Add a YouTube Data API key to enrich YouTube links." msgstr "Додайте ключ API YouTube Data, щоб доповнювати посилання на YouTube." @@ -3011,7 +3006,7 @@ msgid "Add another reaction" msgstr "Додати ще одну реакцію" #. Setup wizard body for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1005 +#: src/features/app/components/setup/SetupWizardSteps.tsx:990 msgid "Add Bluesky OAuth client metadata and a signing key." msgstr "Додайте метадані клієнта OAuth Bluesky та ключ підпису." @@ -3161,7 +3156,7 @@ msgid "Add shortcut" msgstr "Додати комбінацію клавіш" #. Setup wizard body for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:997 +#: src/features/app/components/setup/SetupWizardSteps.tsx:982 msgid "Add SMTP credentials so the instance can send verification and notification email." msgstr "Додайте облікові дані SMTP, щоб екземпляр міг надсилати електронні листи для підтвердження та сповіщень." @@ -3188,7 +3183,7 @@ msgid "Add stream" msgstr "Додати трансляцію" #. Description for configuring an optional setup wizard integration now. -#: src/features/app/components/setup/SetupWizardSteps.tsx:965 +#: src/features/app/components/setup/SetupWizardSteps.tsx:958 msgid "Add the credentials during setup." msgstr "Додайте облікові дані під час налаштування." @@ -3954,7 +3949,7 @@ msgid "An invalid status was provided. You can now close this tab and return to msgstr "Надано недійсний статус. Тепер ви можете закрити цю вкладку та повернутися до застосунку." #. Short label in the authentication auth form. Keep the tone plain and specific. -#: src/features/auth/hooks/useAuthForm.ts:13 +#: src/features/auth/hooks/useAuthForm.ts:12 msgid "An unexpected error occurred" msgstr "Сталася неочікувана помилка" @@ -4262,7 +4257,7 @@ msgid "Anyone can request an account, but an administrator must approve it." msgstr "Будь-хто може подати запит на обліковий запис, але адміністратор має його схвалити." #. Label for an integration API key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1018 +#: src/features/app/components/setup/SetupWizardSteps.tsx:994 msgid "API key" msgstr "Ключ API" @@ -4958,7 +4953,7 @@ msgid "Authorized apps" msgstr "Авторизовані застосунки" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:38 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:37 msgid "Authorized IPs cleared. New logins will require email verification." msgstr "Авторизовані IP-адреси очищено. Для нових входів знадобиться підтвердження електронною поштою." @@ -5730,7 +5725,7 @@ msgid "Bluesky connections" msgstr "Підключення до Bluesky" #. Setup wizard title for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1001 +#: src/features/app/components/setup/SetupWizardSteps.tsx:986 msgid "Bluesky OAuth" msgstr "OAuth Bluesky" @@ -5897,11 +5892,6 @@ msgstr "Дозволи бота не можуть бути від'ємними." msgid "Bot profile" msgstr "Профіль бота" -#. Setup wizard title for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:985 -msgid "Bot protection" -msgstr "Захист від ботів" - #. Short label in the authentication OAUTH scopes step. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/OAuthScopesStep.tsx:20 msgid "Bot scope requested" @@ -6554,11 +6544,6 @@ msgstr "Неможливо редагувати" msgid "Cannot delete account" msgstr "Неможливо видалити обліковий запис" -#. Toast error shown when captcha verification fails inside the auth captcha interceptor. -#: src/features/auth/components/CaptchaInterceptor.tsx:15 -msgid "Captcha verification failed. Try again." -msgstr "Перевірка капчі не вдалася. Спробуйте ще раз." - #. Section header in the Linux audio source picker. Lists capture-target options (entire system / specific apps). #: src/features/voice/components/AudioSourcePickerLinux.tsx:50 msgid "Capture" @@ -7398,10 +7383,6 @@ msgstr "Перевірка доступу..." msgid "Checking screen recording permission..." msgstr "Перевіряємо дозвіл на запис екрана…" -#: src/features/auth/components/AltchaVerification.tsx:62 -msgid "Checking your browser. This takes a few seconds." -msgstr "Перевіряємо ваш браузер. Це займе кілька секунд." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -7571,11 +7552,6 @@ msgstr "Виберіть «Файл», а потім «Додати в Dock»." msgid "Choose friends to message." msgstr "Виберіть друзів для листування." -#. Setup wizard body for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:989 -msgid "Choose hCaptcha or Cloudflare Turnstile for signup challenges." -msgstr "Виберіть hCaptcha або Cloudflare Turnstile для завдань під час реєстрації." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:455 msgid "Choose how chat moves after you send a message" @@ -7982,17 +7958,17 @@ msgid "Clear selection" msgstr "Очистити вибір" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:88 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:87 msgid "Clear trust all setting" msgstr "Очистити налаштування «довіряти всім»" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:63 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:62 msgid "Clear trusted domains" msgstr "Очистити довірені домени" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:96 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:95 msgid "Clear trusted domains ({trustedDomainsCount})" msgstr "Очистити довірені домени ({trustedDomainsCount})" @@ -8002,7 +7978,7 @@ msgid "Clearer text" msgstr "Чіткіший текст" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:108 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:107 msgid "Clearing trusted domains..." msgstr "Очищення довірених доменів..." @@ -8100,7 +8076,7 @@ msgid "Client" msgstr "Клієнт" #. Label for Bluesky OAuth client name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1057 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1031 msgid "Client name" msgstr "Назва клієнта" @@ -8117,7 +8093,7 @@ msgid "Client secret regenerated. Update any code that uses the old secret." msgstr "Секрет клієнта оновлено. Оновіть весь код, що використовує старий секрет." #. Label for Bluesky OAuth client URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1061 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 msgid "Client URL" msgstr "URL клієнта" @@ -8269,11 +8245,6 @@ msgstr "Закриті приватні чати" msgid "Cloud upload" msgstr "Завантаження в хмару" -#. Cloudflare Turnstile provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1014 -msgid "Cloudflare Turnstile" -msgstr "Cloudflare Turnstile" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:58 msgid "Coal" @@ -8669,7 +8640,7 @@ msgstr "Назва спільноти" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:126 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:125 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:113 msgid "Community nickname" msgstr "Псевдонім у спільноті" @@ -8722,7 +8693,7 @@ msgid "Community profile" msgstr "Профіль спільноти" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:73 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:72 msgid "Community profile updated" msgstr "Профіль спільноти оновлено" @@ -8880,7 +8851,7 @@ msgid "Configure keyboard shortcuts" msgstr "Налаштувати комбінації клавіш" #. Option for configuring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:961 +#: src/features/app/components/setup/SetupWizardSteps.tsx:954 msgid "Configure now" msgstr "Налаштувати зараз" @@ -12341,7 +12312,7 @@ msgstr "Від'єднатися від {channel}" msgid "Disconnect from voice" msgstr "Від'єднатися від голосового чату" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:261 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:243 msgid "Disconnect socket" msgstr "Від'єднати сокет" @@ -12479,7 +12450,7 @@ msgstr "Режим відображення" #. Short label in the inputs tab. Keep it concise. #. Short label in the my profile tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:22 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:138 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:137 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:61 msgid "Display name" msgstr "Ім'я для відображення" @@ -12625,7 +12596,7 @@ msgstr "Ви хочете приєднатися до {communityName}?" #. Label in the accessibility tab. #. Label in the my profile tab. #: src/features/user/components/modals/tabs/AccessibilityTab.tsx:54 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:146 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:145 msgid "Doc, I'm from the future. I came here in a time machine that you invented. Now, I need your help to get back to the year 1985." msgstr "Док, я з майбутнього. Я прибув сюди на машині часу, яку ви винайшли. Тепер мені потрібна ваша допомога, щоб повернутися в 1985 рік." @@ -13262,7 +13233,7 @@ msgid "Edit your messages above or below" msgstr "Редагувати свої повідомлення вище або нижче" #. Button or menu action label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:93 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:92 msgid "Edit your profile appearance and see a live preview" msgstr "Редагуйте вигляд свого профілю й одразу переглядайте результат" @@ -13330,7 +13301,7 @@ msgid "Email changed" msgstr "Електронну пошту змінено" #. Setup wizard title for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:993 +#: src/features/app/components/setup/SetupWizardSteps.tsx:978 msgid "Email delivery" msgstr "Доставка електронної пошти" @@ -13635,7 +13606,7 @@ msgid "Enable beta feature" msgstr "Увімкнути бета-функцію" #. Label for enabling Bluesky OAuth in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1053 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1027 msgid "Enable Bluesky OAuth" msgstr "Увімкнути OAuth для Bluesky" @@ -13668,7 +13639,7 @@ msgid "Enable developer mode" msgstr "Увімкнути режим розробника" #. Label for enabling SMTP email delivery in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1021 +#: src/features/app/components/setup/SetupWizardSteps.tsx:995 msgid "Enable email delivery" msgstr "Увімкнути доставку електронної пошти" @@ -14705,7 +14676,7 @@ msgid "Failed to ban member. Try again." msgstr "Не вдалося заблокувати учасника. Спробуйте ще раз." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:59 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:58 msgid "Failed to clear trusted domains." msgstr "Не вдалося очистити довірені домени." @@ -14762,7 +14733,7 @@ msgid "Failed to enable camera." msgstr "Не вдалося ввімкнути камеру." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:42 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:41 msgid "Failed to forget authorized IPs. Try again." msgstr "Не вдалося забути авторизовані IP-адреси. Спробуйте ще раз." @@ -14907,7 +14878,7 @@ msgid "Failed to resend verification code. Try again later." msgstr "Не вдалося повторно надіслати код підтвердження. Спробуйте пізніше." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:75 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:74 msgid "Failed to reset premium state." msgstr "Не вдалося скинути преміум-статус." @@ -15581,7 +15552,7 @@ msgstr "Примусово показувати скелет завантаже msgid "Force mature media" msgstr "Примусово показувати медіа для дорослих" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:276 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:258 msgid "Force move to AFK channel" msgstr "Примусово перемістити до каналу AFK" @@ -15640,7 +15611,7 @@ msgid "Forced off" msgstr "Примусово вимкнено" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:46 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:45 msgid "Forget authorized IPs" msgstr "Забути авторизовані IP-адреси" @@ -15650,7 +15621,7 @@ msgid "Forget subscriptions" msgstr "Забути підписки" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:104 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:103 msgid "Forgetting authorized IPs..." msgstr "Забуваємо авторизовані IP-адреси..." @@ -15907,12 +15878,12 @@ msgid "from <0>{0}" msgstr "зі спільноти <0>{0}" #. Label for SMTP from email input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1025 +#: src/features/app/components/setup/SetupWizardSteps.tsx:999 msgid "From email" msgstr "Від кого (електронна адреса)" #. Label for SMTP from name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1029 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1003 msgid "From name" msgstr "Від кого (ім'я)" @@ -16204,7 +16175,7 @@ msgid "GIF preview" msgstr "Попередній перегляд GIF" #. Setup wizard title for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:969 +#: src/features/app/components/setup/SetupWizardSteps.tsx:962 msgid "GIF search" msgstr "Пошук GIF" @@ -16853,21 +16824,12 @@ msgstr "Є подарунковий код? Активуйте його, щоб msgid "Having fun?" msgstr "Весело проводите час?" -#: src/features/auth/components/modals/CaptchaModal.tsx:175 -msgid "Having issues? Try hCaptcha instead" -msgstr "Виникли проблеми? Спробуйте hCaptcha" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:63 msgctxt "us-state" msgid "Hawaii" msgstr "Гаваї" -#. hCaptcha provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1013 -msgid "hCaptcha" -msgstr "hCaptcha" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:238 msgid "HD" @@ -19768,7 +19730,7 @@ msgid "Logo" msgstr "Логотип" #. Label for Bluesky OAuth logo URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1065 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1039 msgid "Logo URL" msgstr "URL логотипу" @@ -22941,7 +22903,7 @@ msgid "No tokens match \"{searchQuery}\"." msgstr "Немає токенів, що відповідають запиту «{searchQuery}»." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:92 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:91 msgid "No trusted domains" msgstr "Немає довірених доменів" @@ -23696,10 +23658,6 @@ msgstr "Відкрити вікно вибору браузера" msgid "Open call view" msgstr "Відкрити вікно дзвінка" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:288 -msgid "Open captcha modal" -msgstr "Відкрити модальне вікно капчі" - #. Accessible label for the channel header title button in a community channel. #: src/features/channel/components/channel_header/shared.ts:14 msgid "Open channel details for {channelName}" @@ -23712,7 +23670,7 @@ msgstr "Відкрити деталі каналу «{channelName}»" msgid "Open chat" msgstr "Відкрити чат" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:314 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:290 msgid "Open claim account modal" msgstr "Відкрити модальне вікно реєстрації облікового запису" @@ -23944,11 +23902,11 @@ msgstr "Відкрити стікер у браузері" msgid "Open streaming privacy settings" msgstr "Відкрити налаштування конфіденційності трансляції" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:327 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:303 msgid "Open sudo verification modal" msgstr "Відкрити модальне вікно перевірки sudo" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:342 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:318 msgid "Open system DM" msgstr "Відкрити системний приватний чат" @@ -24430,7 +24388,7 @@ msgstr "Для ключів доступу потрібен підписаний #. Generic form-field label for a password. #. Label for SMTP password input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1036 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1010 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:146 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:183 @@ -25212,7 +25170,7 @@ msgid "Popup" msgstr "Спливаюче вікно" #. Label for SMTP port input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1034 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1008 msgid "Port" msgstr "Порт" @@ -25338,7 +25296,7 @@ msgid "Premium since date" msgstr "Дата початку преміуму" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:71 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:70 msgid "Premium state reset on the backend." msgstr "Стан преміуму скинуто на бекенді." @@ -25608,7 +25566,7 @@ msgid "Privacy settings" msgstr "Налаштування приватності" #. Label for Bluesky OAuth privacy URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1073 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1047 msgid "Privacy URL" msgstr "URL політики конфіденційності" @@ -25633,7 +25591,7 @@ msgid "Private details" msgstr "Приватні дані" #. Label for Bluesky OAuth private key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1081 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1055 msgid "Private key" msgstr "Приватний ключ" @@ -25699,18 +25657,18 @@ msgstr "Колір профілю" #. Settings section label for editing profile appearance and identity. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:105 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:104 #: src/features/user/components/settings_utils/section_registry/GeneralSettingsSections.ts:6 msgid "Profile customization" msgstr "Налаштування профілю" #. Label in the my profile tab. Preserve {selectedGuildName}; it is inserted by code. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:101 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:100 msgid "Profile customization for {selectedGuildName}" msgstr "Налаштування профілю для {selectedGuildName}" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:97 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:96 msgid "Profile customization form" msgstr "Форма налаштування профілю" @@ -25775,7 +25733,7 @@ msgid "Profile type" msgstr "Тип профілю" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:77 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:76 msgid "Profile updated" msgstr "Профіль оновлено" @@ -25812,7 +25770,7 @@ msgstr "Запитувати про нові аудіопристрої" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:142 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:141 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:177 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:160 msgid "Pronouns" @@ -25842,11 +25800,6 @@ msgstr "Введіть ID користувача або ім'я користув msgid "Provide your full legal name for the declaration." msgstr "Вкажіть своє повне ім'я за документами для декларації." -#. Label for an integration provider choice. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 -msgid "Provider" -msgstr "Постачальник" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27626,7 +27579,7 @@ msgid "Reset password" msgstr "Скинути пароль" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:79 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:78 msgid "Reset premium state" msgstr "Скинути преміум-статус" @@ -27635,7 +27588,7 @@ msgstr "Скинути преміум-статус" msgid "Reset slider to default value" msgstr "Скинути повзунок до значення за замовчуванням" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:247 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:229 msgid "Reset socket" msgstr "Скинути сокет" @@ -27684,7 +27637,7 @@ msgid "Reset zoom" msgstr "Скинути масштаб" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:112 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:111 msgid "Resetting premium state..." msgstr "Скидання преміум-статусу..." @@ -28315,7 +28268,7 @@ msgid "Run the instance as one community instead of many. This can only be enabl msgstr "Запустіть екземпляр як одну спільноту замість багатьох. Це можна увімкнути лише зараз, під час налаштування." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:100 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:99 msgid "Runtime utilities" msgstr "Утиліти середовища виконання" @@ -29103,11 +29056,6 @@ msgstr "Натиснуто додаткову кнопку." msgid "Secret" msgstr "Секрет" -#. Label for a CAPTCHA secret key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1020 -msgid "Secret key" -msgstr "Секретний ключ" - #. Settings search entry label. Names the settings search entry in the settings UI. #. Short label in the secrets section. Keep it concise. Keep the tone plain and specific. #: src/features/user/components/modals/tabs/applications_tab/application_detail/SecretsSection.tsx:11 @@ -29925,7 +29873,7 @@ msgid "Set up authenticator app" msgstr "Налаштувати застосунок автентифікації" #. Option for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:953 +#: src/features/app/components/setup/SetupWizardSteps.tsx:946 msgid "Set up later" msgstr "Налаштувати пізніше" @@ -30427,7 +30375,7 @@ msgstr "Показувати список приватних чатів" msgid "Show just the typing indicator without avatars" msgstr "Показувати лише індикатор набору тексту без аватарів" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:308 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:284 msgid "Show keyboard mode intro" msgstr "Показати вступ до режиму клавіатури" @@ -30538,7 +30486,7 @@ msgstr "Показувати Неко" msgid "Show new device alerts" msgstr "Показувати сповіщення про нові пристрої" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:282 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:264 msgid "Show new device modal" msgstr "Показати модальне вікно нового пристрою" @@ -30820,7 +30768,7 @@ msgid "Signed-in devices" msgstr "Підключені пристрої" #. Label for Bluesky OAuth signing key ID input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1077 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1051 msgid "Signing key ID" msgstr "Ідентифікатор ключа підпису" @@ -30910,11 +30858,6 @@ msgstr "Один рядок" msgid "Single user (all statuses)" msgstr "Один користувач (усі статуси)" -#. Label for a CAPTCHA site key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 -msgid "Site key" -msgstr "Ключ сайту" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:98 @@ -30964,7 +30907,7 @@ msgid "Skip the system leave notice — nobody gets pinged." msgstr "Пропустити системне повідомлення про вихід — ніхто не отримає сповіщення." #. Description for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:957 +#: src/features/app/components/setup/SetupWizardSteps.tsx:950 msgid "Skip this now and configure it from the admin panel." msgstr "Пропустити зараз і налаштувати з панелі адміністратора." @@ -31212,17 +31155,17 @@ msgid "SMS verification is unavailable right now. Try again later or contact sup msgstr "Підтвердження через SMS наразі недоступне. Спробуйте пізніше або зверніться до служби підтримки." #. Success message after validating SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1045 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 msgid "SMTP connection verified." msgstr "З'єднання SMTP перевірено." #. Label for SMTP host input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1033 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1007 msgid "SMTP host" msgstr "SMTP-сервер" #. Failure message after validating SMTP credentials when the server returns no error detail. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1049 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1023 msgid "SMTP validation failed." msgstr "Не вдалося перевірити SMTP." @@ -31402,7 +31345,7 @@ msgstr "Щось пішло не так. Спробуйте пізніше." #. Inline error in the web deep-link prompt when opening the desktop app fails. #. Toast error shown when the mature content check request fails unexpectedly. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:18 -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:580 +#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 #: src/features/auth/flow/DesktopDeepLinkPrompt.tsx:31 msgid "Something went wrong. Try again." msgstr "Щось пішло не так. Спробуйте ще раз." @@ -32099,6 +32042,11 @@ msgstr "Триває індексування — зачекайте" msgid "Still Neko" msgstr "Нерухомий Неко" +#. Small toast shown only when an automatic background check before sign-in, sign-up or a similar request takes more than a couple of seconds. No user action needed. Keep it short and calm. +#: src/features/auth/altcha/CaptchaInterceptor.ts:13 +msgid "Still working on it…" +msgstr "Триває обробка…" + #. Stop-recording button label in the desktop voice message composer. #: src/features/voice/components/VoiceMessageComposerModal.tsx:65 msgid "Stop" @@ -33013,7 +32961,7 @@ msgid "Terms of service" msgstr "Умови використання" #. Label for Bluesky OAuth terms URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1069 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1043 msgid "Terms URL" msgstr "URL-адреса умов" @@ -33023,7 +32971,7 @@ msgid "Terrorism or violent extremism" msgstr "Тероризм або насильницький екстремізм" #. Button that validates SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1041 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1015 msgid "Test SMTP" msgstr "Перевірити SMTP" @@ -33800,7 +33748,7 @@ msgid "This clears quick CSS, imported themes, uploaded assets, and local file r msgstr "Це очищає швидкий CSS, імпортовані теми, завантажені ресурси та посилання на локальні файли на цьому пристрої." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:83 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:82 msgid "This clears your backend premium state entirely, including premium type, billing metadata, and override flags." msgstr "Це повністю очищає ваш преміум-статус у бекенді, включно з типом преміуму, платіжними метаданими та прапорцями перевизначення." @@ -34200,7 +34148,7 @@ msgid "This message no longer exists." msgstr "Цього повідомлення більше не існує." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:130 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:129 msgid "This nickname will only be visible in this community" msgstr "Цей псевдонім буде видно лише в цій спільноті" @@ -34277,12 +34225,12 @@ msgid "This removes all custom CSS overrides. Theme files in your library are no msgstr "Це видаляє всі власні перевизначення CSS. Файли тем у вашій бібліотеці залишаються без змін." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:50 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:49 msgid "This removes all previously authorized IP addresses on your account. The next login from any IP will require email verification." msgstr "Це видаляє всі раніше авторизовані IP-адреси з вашого облікового запису. Наступний вхід з будь-якої IP-адреси вимагатиме підтвердження електронною поштою." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:67 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:66 msgid "This removes all trusted domains. You will see the external link warning for all domains again." msgstr "Це видаляє всі довірені домени. Ви знову бачитимете попередження про зовнішні посилання для всіх доменів." @@ -34949,7 +34897,7 @@ msgstr "Зміни іконки в треї застосовуються лиш msgid "Trending GIFs" msgstr "Популярні GIF-файли" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:383 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:359 msgid "Trigger React crash" msgstr "Спричинити збій React" @@ -35008,7 +34956,7 @@ msgid "Trusted domains" msgstr "Довірені домени" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:55 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:54 msgid "Trusted domains cleared." msgstr "Довірені домени очищено." @@ -35054,7 +35002,6 @@ msgid "Try a different variable name or clear the search." msgstr "Спробуйте іншу назву змінної або очистіть пошук." #. Generic action label for retrying a failed or interrupted operation. -#: src/features/auth/components/AltchaVerification.tsx:53 #: src/features/auth/flow/AuthRouteLoadError.tsx:22 #: src/features/i18n/utils/CommonMessageDescriptors.ts:75 msgid "Try again" @@ -35132,10 +35079,6 @@ msgstr "Спробувати ключ безпеки / ключ доступу" msgid "Try sending your message again." msgstr "Спробуйте надіслати повідомлення ще раз." -#: src/features/auth/components/modals/CaptchaModal.tsx:177 -msgid "Try Turnstile instead" -msgstr "Спробуйте Turnstile" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:135 msgid "TTS" @@ -36890,7 +36833,7 @@ msgid "Use this when troubleshooting the client or collecting logs. It may add v msgstr "Використовуйте це для виправлення неполадок клієнта або збору журналів. Це може додати докладні повідомлення до консолі браузера для поточного клієнта." #. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1037 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1011 msgid "Use TLS" msgstr "Використовувати TLS" @@ -37056,7 +36999,7 @@ msgstr "Гучність користувача" #. Generic form-field label for a username. #. Label for SMTP username input. #. Settings search entry label. Also used as a search synonym in the settings search bar. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 #: src/features/i18n/utils/CommonMessageDescriptors.ts:572 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:218 #: src/features/user/components/modals/tabs/my_profile_tab/MyProfileTabUsernameSection.tsx:56 @@ -37337,11 +37280,6 @@ msgstr "Підтвердити номер телефону" msgid "Verify phone number form" msgstr "Форма підтвердження номера телефону" -#. Short label in the authentication captcha modal. Keep the tone plain and specific. -#: src/features/auth/components/modals/CaptchaModal.tsx:17 -msgid "Verify you're human" -msgstr "Підтвердьте, що ви не робот" - #. Title of the error modal shown when an unverified account tries to start a DM. #. Title shown when an unverified account cannot start a DM or group DM. #: src/features/app/components/alerts/DmActionErrorModal.tsx:40 @@ -37369,22 +37307,22 @@ msgid "Verify your email before adding an authenticator app." msgstr "Підтвердьте свою електронну пошту, перш ніж додавати застосунок автентифікації." #. Description text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:117 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:116 msgid "Verify your email before changing your community nickname, avatar, banner, bio, pronouns, or accent color." msgstr "Підтвердьте свою електронну пошту, перш ніж змінювати псевдонім у спільноті, аватар, банер, біографію, займенники або акцентний колір." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:121 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:120 msgid "Verify your email before changing your username, display name, avatar, banner, bio, pronouns, time zone, or {premiumProductName} badge privacy." msgstr "Підтвердьте свою електронну пошту, перш ніж змінювати ім'я користувача, ім'я для відображення, аватар, банер, біографію, займенники, часовий пояс або конфіденційність значка {premiumProductName}." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:85 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:84 msgid "Verify your email before editing this community profile. You can still preview it here." msgstr "Підтвердьте свою електронну пошту, перш ніж редагувати цей профіль спільноти. Ви все одно можете переглянути його тут." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:89 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:88 msgid "Verify your email before editing your profile. You can still preview it here." msgstr "Підтвердьте свою електронну пошту, перш ніж редагувати профіль. Ви все одно можете переглянути його тут." @@ -37416,12 +37354,12 @@ msgid "Verify your email to continue using {productName}." msgstr "Підтвердьте свою електронну пошту, щоб продовжити користуватися {productName}." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:109 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:108 msgid "Verify your email to edit this community profile" msgstr "Підтвердьте свою електронну пошту, щоб редагувати цей профіль спільноти" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:113 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:112 msgid "Verify your email to edit your profile" msgstr "Підтвердьте свою електронну пошту, щоб редагувати профіль" @@ -38398,10 +38336,6 @@ msgstr "Ми знизили ціну на {premiumProductName} у Бразилі msgid "We need one verification step before you continue. This helps protect accounts and keep spam off {productName}." msgstr "Нам потрібен один крок перевірки, перш ніж ви зможете продовжити. Це допомагає захистити облікові записи та запобігти спаму в {productName}." -#: src/features/auth/components/modals/CaptchaModal.tsx:128 -msgid "We need to make sure you're not a bot. Complete the verification below." -msgstr "Нам потрібно переконатися, що ви не робот. Пройдіть перевірку нижче." - #. Required-action modal intro text when both email and phone verification are required. #: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:216 msgid "We need two verification steps before you continue. We will show one step at a time." @@ -39256,7 +39190,7 @@ msgid "You can't befriend yourself" msgstr "Ви не можете додати себе в друзі" #. Label in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:134 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:133 msgid "You can't change your nickname here" msgstr "Тут не можна змінити свій псевдонім" @@ -39506,7 +39440,7 @@ msgid "You have unsaved changes." msgstr "У вас є незбережені зміни." #. Warning text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:81 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:80 msgid "You have unsaved changes. Save or reset before leaving." msgstr "У вас є незбережені зміни. Збережіть або скиньте їх, перш ніж вийти." @@ -40031,10 +39965,6 @@ msgstr "Вашу дію не вдалося виконати, оскільки msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Ваша заявка очікує на розгляд. Ви все ще можете оновити деталі оголошення або відкликати заявку." -#: src/features/auth/components/AltchaVerification.tsx:50 -msgid "Your browser couldn't finish the check." -msgstr "Ваш браузер не зміг завершити перевірку." - #. Body of the browser-audio-required modal explaining why the user must click before audio can play. #: src/features/voice/components/modals/AudioPlaybackPermissionModal.tsx:12 msgid "Your browser requires user interaction before audio can be played. Click the button below to enable voice chat." @@ -40386,7 +40316,7 @@ msgid "YouTube enrichment" msgstr "Доповнення посилань YouTube" #. Setup wizard title for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:977 +#: src/features/app/components/setup/SetupWizardSteps.tsx:970 msgid "YouTube previews" msgstr "Попередній перегляд YouTube" diff --git a/fluxer_app/src/features/i18n/locales/vi/messages.po b/fluxer_app/src/features/i18n/locales/vi/messages.po index 4d93e3356..09a447b42 100644 --- a/fluxer_app/src/features/i18n/locales/vi/messages.po +++ b/fluxer_app/src/features/i18n/locales/vi/messages.po @@ -2395,11 +2395,6 @@ msgstr "60 giây" msgid "7 days" msgstr "7 ngày" -#. Required-action error when the API requires a captcha for phone verification. -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 -msgid "A browser check is required before phone verification. Try again from the sign-in page or contact support." -msgstr "Cần xác minh trình duyệt trước khi xác minh số điện thoại. Hãy thử lại từ trang đăng nhập hoặc liên hệ bộ phận hỗ trợ." - #. Hint shown beside in:. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:77 msgid "a channel" @@ -2928,7 +2923,7 @@ msgid "Add a friend to get started." msgstr "Thêm bạn bè để bắt đầu." #. Setup wizard body for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:973 +#: src/features/app/components/setup/SetupWizardSteps.tsx:966 msgid "Add a Klipy API key to enable GIF search at runtime." msgstr "Thêm khóa API Klipy để cho phép tìm kiếm GIF trong thời gian chạy." @@ -2965,7 +2960,7 @@ msgid "Add a working email" msgstr "Thêm email còn hoạt động" #. Setup wizard body for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:981 +#: src/features/app/components/setup/SetupWizardSteps.tsx:974 msgid "Add a YouTube Data API key to enrich YouTube links." msgstr "Thêm khóa YouTube Data API để bổ sung thông tin cho các liên kết YouTube." @@ -3011,7 +3006,7 @@ msgid "Add another reaction" msgstr "Thêm cảm xúc khác" #. Setup wizard body for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1005 +#: src/features/app/components/setup/SetupWizardSteps.tsx:990 msgid "Add Bluesky OAuth client metadata and a signing key." msgstr "Thêm siêu dữ liệu ứng dụng OAuth Bluesky và khóa ký." @@ -3161,7 +3156,7 @@ msgid "Add shortcut" msgstr "Thêm phím tắt" #. Setup wizard body for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:997 +#: src/features/app/components/setup/SetupWizardSteps.tsx:982 msgid "Add SMTP credentials so the instance can send verification and notification email." msgstr "Thêm thông tin xác thực SMTP để máy chủ có thể gửi email xác minh và thông báo." @@ -3188,7 +3183,7 @@ msgid "Add stream" msgstr "Thêm luồng phát" #. Description for configuring an optional setup wizard integration now. -#: src/features/app/components/setup/SetupWizardSteps.tsx:965 +#: src/features/app/components/setup/SetupWizardSteps.tsx:958 msgid "Add the credentials during setup." msgstr "Thêm thông tin xác thực trong quá trình thiết lập." @@ -3954,7 +3949,7 @@ msgid "An invalid status was provided. You can now close this tab and return to msgstr "Trạng thái không hợp lệ. Giờ bạn có thể đóng tab này và quay lại ứng dụng." #. Short label in the authentication auth form. Keep the tone plain and specific. -#: src/features/auth/hooks/useAuthForm.ts:13 +#: src/features/auth/hooks/useAuthForm.ts:12 msgid "An unexpected error occurred" msgstr "Đã xảy ra lỗi không mong muốn" @@ -4262,7 +4257,7 @@ msgid "Anyone can request an account, but an administrator must approve it." msgstr "Bất kỳ ai cũng có thể yêu cầu tài khoản, nhưng quản trị viên phải phê duyệt." #. Label for an integration API key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1018 +#: src/features/app/components/setup/SetupWizardSteps.tsx:994 msgid "API key" msgstr "Khóa API" @@ -4958,7 +4953,7 @@ msgid "Authorized apps" msgstr "Ứng dụng được ủy quyền" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:38 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:37 msgid "Authorized IPs cleared. New logins will require email verification." msgstr "Đã xóa IP được ủy quyền. Đăng nhập mới sẽ yêu cầu xác minh email." @@ -5730,7 +5725,7 @@ msgid "Bluesky connections" msgstr "Kết nối Bluesky" #. Setup wizard title for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1001 +#: src/features/app/components/setup/SetupWizardSteps.tsx:986 msgid "Bluesky OAuth" msgstr "OAuth Bluesky" @@ -5897,11 +5892,6 @@ msgstr "Quyền của bot không thể là số âm." msgid "Bot profile" msgstr "Hồ sơ bot" -#. Setup wizard title for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:985 -msgid "Bot protection" -msgstr "Chống bot" - #. Short label in the authentication OAUTH scopes step. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/OAuthScopesStep.tsx:20 msgid "Bot scope requested" @@ -6554,11 +6544,6 @@ msgstr "Không thể chỉnh sửa" msgid "Cannot delete account" msgstr "Không thể xóa tài khoản" -#. Toast error shown when captcha verification fails inside the auth captcha interceptor. -#: src/features/auth/components/CaptchaInterceptor.tsx:15 -msgid "Captcha verification failed. Try again." -msgstr "Xác minh CAPTCHA không thành công. Hãy thử lại." - #. Section header in the Linux audio source picker. Lists capture-target options (entire system / specific apps). #: src/features/voice/components/AudioSourcePickerLinux.tsx:50 msgid "Capture" @@ -7398,10 +7383,6 @@ msgstr "Đang kiểm tra quyền truy cập..." msgid "Checking screen recording permission..." msgstr "Đang kiểm tra quyền ghi màn hình..." -#: src/features/auth/components/AltchaVerification.tsx:62 -msgid "Checking your browser. This takes a few seconds." -msgstr "Đang kiểm tra trình duyệt của bạn. Việc này sẽ mất vài giây." - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -7571,11 +7552,6 @@ msgstr "Chọn Tệp, sau đó chọn Thêm vào Dock." msgid "Choose friends to message." msgstr "Chọn bạn bè để nhắn tin." -#. Setup wizard body for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:989 -msgid "Choose hCaptcha or Cloudflare Turnstile for signup challenges." -msgstr "Chọn hCaptcha hoặc Cloudflare Turnstile cho các thử thách đăng ký." - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:455 msgid "Choose how chat moves after you send a message" @@ -7982,17 +7958,17 @@ msgid "Clear selection" msgstr "Bỏ chọn" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:88 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:87 msgid "Clear trust all setting" msgstr "Xóa cài đặt tin cậy tất cả" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:63 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:62 msgid "Clear trusted domains" msgstr "Xóa miền đáng tin cậy" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:96 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:95 msgid "Clear trusted domains ({trustedDomainsCount})" msgstr "Xóa miền đáng tin cậy ({trustedDomainsCount})" @@ -8002,7 +7978,7 @@ msgid "Clearer text" msgstr "Văn bản rõ ràng hơn" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:108 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:107 msgid "Clearing trusted domains..." msgstr "Đang xóa các miền đáng tin cậy..." @@ -8100,7 +8076,7 @@ msgid "Client" msgstr "Ứng dụng khách" #. Label for Bluesky OAuth client name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1057 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1031 msgid "Client name" msgstr "Tên ứng dụng khách" @@ -8117,7 +8093,7 @@ msgid "Client secret regenerated. Update any code that uses the old secret." msgstr "Đã tạo lại mã bí mật của máy khách. Hãy cập nhật bất kỳ mã nào đang sử dụng mã bí mật cũ." #. Label for Bluesky OAuth client URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1061 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 msgid "Client URL" msgstr "URL ứng dụng khách" @@ -8269,11 +8245,6 @@ msgstr "Tin nhắn trực tiếp đã đóng" msgid "Cloud upload" msgstr "Tải lên đám mây" -#. Cloudflare Turnstile provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1014 -msgid "Cloudflare Turnstile" -msgstr "Cloudflare Turnstile" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:58 msgid "Coal" @@ -8669,7 +8640,7 @@ msgstr "Tên cộng đồng" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:126 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:125 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:113 msgid "Community nickname" msgstr "Biệt danh cộng đồng" @@ -8722,7 +8693,7 @@ msgid "Community profile" msgstr "Hồ sơ cộng đồng" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:73 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:72 msgid "Community profile updated" msgstr "Đã cập nhật hồ sơ cộng đồng" @@ -8880,7 +8851,7 @@ msgid "Configure keyboard shortcuts" msgstr "Cấu hình phím tắt" #. Option for configuring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:961 +#: src/features/app/components/setup/SetupWizardSteps.tsx:954 msgid "Configure now" msgstr "Cấu hình ngay" @@ -12341,7 +12312,7 @@ msgstr "Ngắt kết nối khỏi {channel}" msgid "Disconnect from voice" msgstr "Ngắt kết nối thoại" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:261 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:243 msgid "Disconnect socket" msgstr "Ngắt kết nối socket" @@ -12479,7 +12450,7 @@ msgstr "Chế độ hiển thị" #. Short label in the inputs tab. Keep it concise. #. Short label in the my profile tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:22 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:138 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:137 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:61 msgid "Display name" msgstr "Tên hiển thị" @@ -12625,7 +12596,7 @@ msgstr "Bạn có muốn tham gia {communityName} không?" #. Label in the accessibility tab. #. Label in the my profile tab. #: src/features/user/components/modals/tabs/AccessibilityTab.tsx:54 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:146 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:145 msgid "Doc, I'm from the future. I came here in a time machine that you invented. Now, I need your help to get back to the year 1985." msgstr "Bác sĩ, tôi đến từ tương lai. Tôi đến đây bằng cỗ máy thời gian do chính bác sĩ phát minh. Giờ thì tôi cần bác sĩ giúp để quay về năm 1985." @@ -13262,7 +13233,7 @@ msgid "Edit your messages above or below" msgstr "Chỉnh sửa tin nhắn của bạn ở trên hoặc dưới" #. Button or menu action label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:93 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:92 msgid "Edit your profile appearance and see a live preview" msgstr "Chỉnh sửa giao diện hồ sơ và xem trước trực tiếp" @@ -13330,7 +13301,7 @@ msgid "Email changed" msgstr "Đã đổi email" #. Setup wizard title for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:993 +#: src/features/app/components/setup/SetupWizardSteps.tsx:978 msgid "Email delivery" msgstr "Gửi email" @@ -13635,7 +13606,7 @@ msgid "Enable beta feature" msgstr "Bật tính năng thử nghiệm" #. Label for enabling Bluesky OAuth in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1053 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1027 msgid "Enable Bluesky OAuth" msgstr "Bật OAuth của Bluesky" @@ -13668,7 +13639,7 @@ msgid "Enable developer mode" msgstr "Bật chế độ nhà phát triển" #. Label for enabling SMTP email delivery in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1021 +#: src/features/app/components/setup/SetupWizardSteps.tsx:995 msgid "Enable email delivery" msgstr "Bật gửi email" @@ -14705,7 +14676,7 @@ msgid "Failed to ban member. Try again." msgstr "Không thể cấm thành viên. Vui lòng thử lại." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:59 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:58 msgid "Failed to clear trusted domains." msgstr "Không thể xóa các miền đáng tin cậy." @@ -14762,7 +14733,7 @@ msgid "Failed to enable camera." msgstr "Không thể bật camera." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:42 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:41 msgid "Failed to forget authorized IPs. Try again." msgstr "Không thể quên các IP được ủy quyền. Thử lại." @@ -14907,7 +14878,7 @@ msgid "Failed to resend verification code. Try again later." msgstr "Không gửi lại được mã xác minh. Vui lòng thử lại sau." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:75 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:74 msgid "Failed to reset premium state." msgstr "Không thể đặt lại trạng thái premium." @@ -15581,7 +15552,7 @@ msgstr "Buộc hiển thị khung tải" msgid "Force mature media" msgstr "Buộc hiển thị nội dung người lớn" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:276 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:258 msgid "Force move to AFK channel" msgstr "Buộc chuyển sang kênh AFK" @@ -15640,7 +15611,7 @@ msgid "Forced off" msgstr "Buộc tắt" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:46 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:45 msgid "Forget authorized IPs" msgstr "Quên các IP được ủy quyền" @@ -15650,7 +15621,7 @@ msgid "Forget subscriptions" msgstr "Xóa đăng ký thông báo đẩy" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:104 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:103 msgid "Forgetting authorized IPs..." msgstr "Đang quên các IP được ủy quyền..." @@ -15907,12 +15878,12 @@ msgid "from <0>{0}" msgstr "từ <0>{0}" #. Label for SMTP from email input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1025 +#: src/features/app/components/setup/SetupWizardSteps.tsx:999 msgid "From email" msgstr "Địa chỉ email người gửi" #. Label for SMTP from name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1029 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1003 msgid "From name" msgstr "Tên người gửi" @@ -16204,7 +16175,7 @@ msgid "GIF preview" msgstr "Xem trước GIF" #. Setup wizard title for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:969 +#: src/features/app/components/setup/SetupWizardSteps.tsx:962 msgid "GIF search" msgstr "Tìm kiếm GIF" @@ -16853,21 +16824,12 @@ msgstr "Có mã quà tặng? Hãy đổi mã để mở khóa {PREMIUM_PRODUCT_N msgid "Having fun?" msgstr "Đang vui chứ?" -#: src/features/auth/components/modals/CaptchaModal.tsx:175 -msgid "Having issues? Try hCaptcha instead" -msgstr "Gặp sự cố? Thử dùng hCaptcha" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:63 msgctxt "us-state" msgid "Hawaii" msgstr "Hawaii" -#. hCaptcha provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1013 -msgid "hCaptcha" -msgstr "hCaptcha" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:238 msgid "HD" @@ -19768,7 +19730,7 @@ msgid "Logo" msgstr "Logo" #. Label for Bluesky OAuth logo URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1065 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1039 msgid "Logo URL" msgstr "URL logo" @@ -22941,7 +22903,7 @@ msgid "No tokens match \"{searchQuery}\"." msgstr "Không có token nào khớp với \"{searchQuery}\"." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:92 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:91 msgid "No trusted domains" msgstr "Không có miền đáng tin cậy" @@ -23696,10 +23658,6 @@ msgstr "Mở trình chọn của trình duyệt" msgid "Open call view" msgstr "Mở màn hình cuộc gọi" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:288 -msgid "Open captcha modal" -msgstr "Mở hộp thoại CAPTCHA" - #. Accessible label for the channel header title button in a community channel. #: src/features/channel/components/channel_header/shared.ts:14 msgid "Open channel details for {channelName}" @@ -23712,7 +23670,7 @@ msgstr "Mở chi tiết kênh {channelName}" msgid "Open chat" msgstr "Mở trò chuyện" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:314 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:290 msgid "Open claim account modal" msgstr "Mở hộp thoại xác nhận tài khoản" @@ -23944,11 +23902,11 @@ msgstr "Mở nhãn dán trong trình duyệt" msgid "Open streaming privacy settings" msgstr "Mở cài đặt quyền riêng tư phát trực tuyến" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:327 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:303 msgid "Open sudo verification modal" msgstr "Mở hộp thoại xác minh sudo" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:342 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:318 msgid "Open system DM" msgstr "Mở tin nhắn trực tiếp của hệ thống" @@ -24430,7 +24388,7 @@ msgstr "Khóa truy cập yêu cầu gói macOS đã ký có mã định danh ứ #. Generic form-field label for a password. #. Label for SMTP password input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1036 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1010 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:146 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:183 @@ -25212,7 +25170,7 @@ msgid "Popup" msgstr "Cửa sổ bật lên" #. Label for SMTP port input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1034 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1008 msgid "Port" msgstr "Cổng" @@ -25338,7 +25296,7 @@ msgid "Premium since date" msgstr "Premium từ ngày" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:71 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:70 msgid "Premium state reset on the backend." msgstr "Đã đặt lại trạng thái Premium ở backend." @@ -25608,7 +25566,7 @@ msgid "Privacy settings" msgstr "Cài đặt quyền riêng tư" #. Label for Bluesky OAuth privacy URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1073 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1047 msgid "Privacy URL" msgstr "URL quyền riêng tư" @@ -25633,7 +25591,7 @@ msgid "Private details" msgstr "Thông tin riêng tư" #. Label for Bluesky OAuth private key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1081 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1055 msgid "Private key" msgstr "Khóa riêng" @@ -25699,18 +25657,18 @@ msgstr "Màu sắc hồ sơ" #. Settings section label for editing profile appearance and identity. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:105 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:104 #: src/features/user/components/settings_utils/section_registry/GeneralSettingsSections.ts:6 msgid "Profile customization" msgstr "Tùy chỉnh hồ sơ" #. Label in the my profile tab. Preserve {selectedGuildName}; it is inserted by code. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:101 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:100 msgid "Profile customization for {selectedGuildName}" msgstr "Tùy chỉnh hồ sơ cho {selectedGuildName}" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:97 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:96 msgid "Profile customization form" msgstr "Biểu mẫu tùy chỉnh hồ sơ" @@ -25775,7 +25733,7 @@ msgid "Profile type" msgstr "Loại hồ sơ" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:77 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:76 msgid "Profile updated" msgstr "Đã cập nhật hồ sơ" @@ -25812,7 +25770,7 @@ msgstr "Hỏi khi phát hiện thiết bị âm thanh mới" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:142 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:141 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:177 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:160 msgid "Pronouns" @@ -25842,11 +25800,6 @@ msgstr "Cung cấp ID người dùng hoặc tên người dùng của người b msgid "Provide your full legal name for the declaration." msgstr "Cung cấp họ tên đầy đủ của bạn để khai báo." -#. Label for an integration provider choice. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 -msgid "Provider" -msgstr "Nhà cung cấp" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27626,7 +27579,7 @@ msgid "Reset password" msgstr "Đặt lại mật khẩu" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:79 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:78 msgid "Reset premium state" msgstr "Đặt lại trạng thái premium" @@ -27635,7 +27588,7 @@ msgstr "Đặt lại trạng thái premium" msgid "Reset slider to default value" msgstr "Đặt lại thanh trượt về giá trị mặc định" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:247 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:229 msgid "Reset socket" msgstr "Đặt lại socket" @@ -27684,7 +27637,7 @@ msgid "Reset zoom" msgstr "Đặt lại thu phóng" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:112 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:111 msgid "Resetting premium state..." msgstr "Đang đặt lại trạng thái premium..." @@ -28315,7 +28268,7 @@ msgid "Run the instance as one community instead of many. This can only be enabl msgstr "Chạy máy chủ dưới dạng một cộng đồng thay vì nhiều cộng đồng. Tùy chọn này chỉ có thể bật bây giờ, trong quá trình thiết lập." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:100 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:99 msgid "Runtime utilities" msgstr "Tiện ích thời gian chạy" @@ -29103,11 +29056,6 @@ msgstr "Đã nhấp vào nút phụ." msgid "Secret" msgstr "Bí mật" -#. Label for a CAPTCHA secret key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1020 -msgid "Secret key" -msgstr "Khóa bí mật" - #. Settings search entry label. Names the settings search entry in the settings UI. #. Short label in the secrets section. Keep it concise. Keep the tone plain and specific. #: src/features/user/components/modals/tabs/applications_tab/application_detail/SecretsSection.tsx:11 @@ -29925,7 +29873,7 @@ msgid "Set up authenticator app" msgstr "Thiết lập ứng dụng xác thực" #. Option for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:953 +#: src/features/app/components/setup/SetupWizardSteps.tsx:946 msgid "Set up later" msgstr "Thiết lập sau" @@ -30427,7 +30375,7 @@ msgstr "Hiện danh sách tin nhắn trực tiếp" msgid "Show just the typing indicator without avatars" msgstr "Chỉ hiển thị trạng thái đang nhập, không hiển thị ảnh đại diện" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:308 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:284 msgid "Show keyboard mode intro" msgstr "Hiện giới thiệu chế độ bàn phím" @@ -30538,7 +30486,7 @@ msgstr "Hiện Neko" msgid "Show new device alerts" msgstr "Hiển thị cảnh báo thiết bị mới" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:282 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:264 msgid "Show new device modal" msgstr "Hiện cửa sổ bật lên thiết bị mới" @@ -30820,7 +30768,7 @@ msgid "Signed-in devices" msgstr "Thiết bị đã đăng nhập" #. Label for Bluesky OAuth signing key ID input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1077 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1051 msgid "Signing key ID" msgstr "ID khóa ký" @@ -30910,11 +30858,6 @@ msgstr "Một dòng" msgid "Single user (all statuses)" msgstr "Một người dùng (tất cả trạng thái)" -#. Label for a CAPTCHA site key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 -msgid "Site key" -msgstr "Khóa trang" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:98 @@ -30964,7 +30907,7 @@ msgid "Skip the system leave notice — nobody gets pinged." msgstr "Bỏ qua thông báo rời nhóm của hệ thống, không ai bị làm phiền." #. Description for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:957 +#: src/features/app/components/setup/SetupWizardSteps.tsx:950 msgid "Skip this now and configure it from the admin panel." msgstr "Bỏ qua bây giờ và cấu hình từ bảng quản trị." @@ -31212,17 +31155,17 @@ msgid "SMS verification is unavailable right now. Try again later or contact sup msgstr "Xác minh SMS hiện không khả dụng. Vui lòng thử lại sau hoặc liên hệ với bộ phận hỗ trợ." #. Success message after validating SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1045 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 msgid "SMTP connection verified." msgstr "Đã xác minh kết nối SMTP." #. Label for SMTP host input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1033 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1007 msgid "SMTP host" msgstr "Máy chủ SMTP" #. Failure message after validating SMTP credentials when the server returns no error detail. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1049 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1023 msgid "SMTP validation failed." msgstr "Xác minh SMTP không thành công." @@ -31402,7 +31345,7 @@ msgstr "Đã xảy ra lỗi. Vui lòng thử lại sau." #. Inline error in the web deep-link prompt when opening the desktop app fails. #. Toast error shown when the mature content check request fails unexpectedly. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:18 -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:580 +#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 #: src/features/auth/flow/DesktopDeepLinkPrompt.tsx:31 msgid "Something went wrong. Try again." msgstr "Đã xảy ra lỗi. Vui lòng thử lại." @@ -32099,6 +32042,11 @@ msgstr "Đang lập chỉ mục — vui lòng thử lại sau giây lát" msgid "Still Neko" msgstr "Neko đứng yên" +#. Small toast shown only when an automatic background check before sign-in, sign-up or a similar request takes more than a couple of seconds. No user action needed. Keep it short and calm. +#: src/features/auth/altcha/CaptchaInterceptor.ts:13 +msgid "Still working on it…" +msgstr "Vẫn đang xử lý…" + #. Stop-recording button label in the desktop voice message composer. #: src/features/voice/components/VoiceMessageComposerModal.tsx:65 msgid "Stop" @@ -33013,7 +32961,7 @@ msgid "Terms of service" msgstr "Điều khoản dịch vụ" #. Label for Bluesky OAuth terms URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1069 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1043 msgid "Terms URL" msgstr "URL điều khoản" @@ -33023,7 +32971,7 @@ msgid "Terrorism or violent extremism" msgstr "Khủng bố hoặc chủ nghĩa cực đoan bạo lực" #. Button that validates SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1041 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1015 msgid "Test SMTP" msgstr "Kiểm tra SMTP" @@ -33800,7 +33748,7 @@ msgid "This clears quick CSS, imported themes, uploaded assets, and local file r msgstr "Thao tác này sẽ xóa CSS nhanh, chủ đề đã nhập, nội dung đã tải lên và tham chiếu tệp cục bộ trên thiết bị này." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:83 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:82 msgid "This clears your backend premium state entirely, including premium type, billing metadata, and override flags." msgstr "Thao tác này sẽ xóa hoàn toàn trạng thái premium của bạn trên backend, bao gồm loại premium, siêu dữ liệu thanh toán và cờ ghi đè." @@ -34200,7 +34148,7 @@ msgid "This message no longer exists." msgstr "Tin nhắn này không còn tồn tại." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:130 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:129 msgid "This nickname will only be visible in this community" msgstr "Biệt danh này sẽ chỉ hiển thị trong cộng đồng này" @@ -34277,12 +34225,12 @@ msgid "This removes all custom CSS overrides. Theme files in your library are no msgstr "Thao tác này sẽ xóa tất cả các tùy chỉnh CSS. Các tệp chủ đề trong thư viện của bạn sẽ không bị ảnh hưởng." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:50 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:49 msgid "This removes all previously authorized IP addresses on your account. The next login from any IP will require email verification." msgstr "Thao tác này sẽ xóa tất cả địa chỉ IP đã được ủy quyền trước đó trên tài khoản của bạn. Lần đăng nhập tiếp theo từ bất kỳ IP nào cũng sẽ yêu cầu xác minh email." #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:67 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:66 msgid "This removes all trusted domains. You will see the external link warning for all domains again." msgstr "Thao tác này sẽ xóa tất cả các miền đáng tin cậy. Bạn sẽ thấy lại cảnh báo liên kết ngoài cho tất cả các miền." @@ -34949,7 +34897,7 @@ msgstr "Các thay đổi đối với biểu tượng khay chỉ áp dụng sau msgid "Trending GIFs" msgstr "GIF thịnh hành" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:383 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:359 msgid "Trigger React crash" msgstr "Kích hoạt lỗi React" @@ -35008,7 +34956,7 @@ msgid "Trusted domains" msgstr "Miền tin cậy" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:55 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:54 msgid "Trusted domains cleared." msgstr "Đã xóa các miền tin cậy." @@ -35054,7 +35002,6 @@ msgid "Try a different variable name or clear the search." msgstr "Thử một tên biến khác hoặc xóa tìm kiếm." #. Generic action label for retrying a failed or interrupted operation. -#: src/features/auth/components/AltchaVerification.tsx:53 #: src/features/auth/flow/AuthRouteLoadError.tsx:22 #: src/features/i18n/utils/CommonMessageDescriptors.ts:75 msgid "Try again" @@ -35132,10 +35079,6 @@ msgstr "Thử dùng khóa bảo mật / khóa truy cập" msgid "Try sending your message again." msgstr "Thử gửi lại tin nhắn của bạn." -#: src/features/auth/components/modals/CaptchaModal.tsx:177 -msgid "Try Turnstile instead" -msgstr "Thử dùng Turnstile" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:135 msgid "TTS" @@ -36890,7 +36833,7 @@ msgid "Use this when troubleshooting the client or collecting logs. It may add v msgstr "Dùng khi khắc phục sự cố ứng dụng hoặc thu thập nhật ký. Thao tác này có thể thêm các thông báo chi tiết vào bảng điều khiển của trình duyệt cho ứng dụng hiện tại." #. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1037 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1011 msgid "Use TLS" msgstr "Sử dụng TLS" @@ -37056,7 +36999,7 @@ msgstr "Âm lượng người dùng" #. Generic form-field label for a username. #. Label for SMTP username input. #. Settings search entry label. Also used as a search synonym in the settings search bar. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 #: src/features/i18n/utils/CommonMessageDescriptors.ts:572 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:218 #: src/features/user/components/modals/tabs/my_profile_tab/MyProfileTabUsernameSection.tsx:56 @@ -37337,11 +37280,6 @@ msgstr "Xác minh số điện thoại" msgid "Verify phone number form" msgstr "Biểu mẫu xác minh số điện thoại" -#. Short label in the authentication captcha modal. Keep the tone plain and specific. -#: src/features/auth/components/modals/CaptchaModal.tsx:17 -msgid "Verify you're human" -msgstr "Xác minh bạn không phải robot" - #. Title of the error modal shown when an unverified account tries to start a DM. #. Title shown when an unverified account cannot start a DM or group DM. #: src/features/app/components/alerts/DmActionErrorModal.tsx:40 @@ -37369,22 +37307,22 @@ msgid "Verify your email before adding an authenticator app." msgstr "Xác minh email của bạn trước khi thêm ứng dụng xác thực." #. Description text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:117 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:116 msgid "Verify your email before changing your community nickname, avatar, banner, bio, pronouns, or accent color." msgstr "Xác minh email của bạn trước khi thay đổi biệt danh cộng đồng, ảnh đại diện, ảnh bìa, tiểu sử, đại từ hoặc màu nhấn." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:121 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:120 msgid "Verify your email before changing your username, display name, avatar, banner, bio, pronouns, time zone, or {premiumProductName} badge privacy." msgstr "Xác minh email của bạn trước khi thay đổi tên người dùng, tên hiển thị, ảnh đại diện, ảnh bìa, tiểu sử, đại từ, múi giờ hoặc quyền riêng tư huy hiệu {premiumProductName} của bạn." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:85 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:84 msgid "Verify your email before editing this community profile. You can still preview it here." msgstr "Xác minh email của bạn trước khi chỉnh sửa hồ sơ cộng đồng này. Bạn vẫn có thể xem trước tại đây." #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:89 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:88 msgid "Verify your email before editing your profile. You can still preview it here." msgstr "Xác minh email trước khi chỉnh sửa hồ sơ. Bạn vẫn có thể xem trước tại đây." @@ -37416,12 +37354,12 @@ msgid "Verify your email to continue using {productName}." msgstr "Xác minh email của bạn để tiếp tục sử dụng {productName}." #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:109 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:108 msgid "Verify your email to edit this community profile" msgstr "Xác minh email để chỉnh sửa hồ sơ cộng đồng này" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:113 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:112 msgid "Verify your email to edit your profile" msgstr "Xác minh email để chỉnh sửa hồ sơ" @@ -38398,10 +38336,6 @@ msgstr "Chúng tôi đã giảm giá {premiumProductName} tại Brazil. Giá hi msgid "We need one verification step before you continue. This helps protect accounts and keep spam off {productName}." msgstr "Chúng tôi cần một bước xác minh trước khi bạn tiếp tục. Điều này giúp bảo vệ tài khoản và ngăn spam trên {productName}." -#: src/features/auth/components/modals/CaptchaModal.tsx:128 -msgid "We need to make sure you're not a bot. Complete the verification below." -msgstr "Chúng tôi cần xác minh bạn không phải là bot. Vui lòng hoàn tất xác minh bên dưới." - #. Required-action modal intro text when both email and phone verification are required. #: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:216 msgid "We need two verification steps before you continue. We will show one step at a time." @@ -39256,7 +39190,7 @@ msgid "You can't befriend yourself" msgstr "Bạn không thể kết bạn với chính mình" #. Label in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:134 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:133 msgid "You can't change your nickname here" msgstr "Bạn không thể thay đổi biệt danh của mình tại đây" @@ -39506,7 +39440,7 @@ msgid "You have unsaved changes." msgstr "Bạn có thay đổi chưa lưu." #. Warning text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:81 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:80 msgid "You have unsaved changes. Save or reset before leaving." msgstr "Bạn có thay đổi chưa lưu. Hãy lưu hoặc đặt lại trước khi rời đi." @@ -40031,10 +39965,6 @@ msgstr "Hành động của bạn không thể hoàn tất vì đã bị hệ th msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "Đơn đăng ký của bạn đang chờ xét duyệt. Bạn vẫn có thể cập nhật chi tiết hoặc rút lại đơn đăng ký." -#: src/features/auth/components/AltchaVerification.tsx:50 -msgid "Your browser couldn't finish the check." -msgstr "Trình duyệt của bạn không thể hoàn tất kiểm tra." - #. Body of the browser-audio-required modal explaining why the user must click before audio can play. #: src/features/voice/components/modals/AudioPlaybackPermissionModal.tsx:12 msgid "Your browser requires user interaction before audio can be played. Click the button below to enable voice chat." @@ -40386,7 +40316,7 @@ msgid "YouTube enrichment" msgstr "Bổ sung thông tin YouTube" #. Setup wizard title for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:977 +#: src/features/app/components/setup/SetupWizardSteps.tsx:970 msgid "YouTube previews" msgstr "Xem trước YouTube" diff --git a/fluxer_app/src/features/i18n/locales/zh-CN/messages.po b/fluxer_app/src/features/i18n/locales/zh-CN/messages.po index faa10ea79..694988269 100644 --- a/fluxer_app/src/features/i18n/locales/zh-CN/messages.po +++ b/fluxer_app/src/features/i18n/locales/zh-CN/messages.po @@ -2395,11 +2395,6 @@ msgstr "60 秒" msgid "7 days" msgstr "7 天" -#. Required-action error when the API requires a captcha for phone verification. -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 -msgid "A browser check is required before phone verification. Try again from the sign-in page or contact support." -msgstr "电话验证前需要进行浏览器检查。请从登录页面重试,或联系支持团队。" - #. Hint shown beside in:. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:77 msgid "a channel" @@ -2928,7 +2923,7 @@ msgid "Add a friend to get started." msgstr "添加好友以开始聊天。" #. Setup wizard body for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:973 +#: src/features/app/components/setup/SetupWizardSteps.tsx:966 msgid "Add a Klipy API key to enable GIF search at runtime." msgstr "添加 Klipy API 密钥,以在运行时启用 GIF 搜索。" @@ -2965,7 +2960,7 @@ msgid "Add a working email" msgstr "添加有效的邮箱地址" #. Setup wizard body for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:981 +#: src/features/app/components/setup/SetupWizardSteps.tsx:974 msgid "Add a YouTube Data API key to enrich YouTube links." msgstr "添加 YouTube Data API 密钥,以丰富 YouTube 链接的信息。" @@ -3011,7 +3006,7 @@ msgid "Add another reaction" msgstr "添加其他反应" #. Setup wizard body for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1005 +#: src/features/app/components/setup/SetupWizardSteps.tsx:990 msgid "Add Bluesky OAuth client metadata and a signing key." msgstr "添加 Bluesky OAuth 客户端元数据和签名密钥。" @@ -3161,7 +3156,7 @@ msgid "Add shortcut" msgstr "添加快捷键" #. Setup wizard body for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:997 +#: src/features/app/components/setup/SetupWizardSteps.tsx:982 msgid "Add SMTP credentials so the instance can send verification and notification email." msgstr "添加 SMTP 凭据,以便实例可以发送验证和通知电子邮件。" @@ -3188,7 +3183,7 @@ msgid "Add stream" msgstr "添加直播" #. Description for configuring an optional setup wizard integration now. -#: src/features/app/components/setup/SetupWizardSteps.tsx:965 +#: src/features/app/components/setup/SetupWizardSteps.tsx:958 msgid "Add the credentials during setup." msgstr "在设置过程中添加凭据。" @@ -3954,7 +3949,7 @@ msgid "An invalid status was provided. You can now close this tab and return to msgstr "提供的状态无效。你现在可以关闭此标签页并返回应用。" #. Short label in the authentication auth form. Keep the tone plain and specific. -#: src/features/auth/hooks/useAuthForm.ts:13 +#: src/features/auth/hooks/useAuthForm.ts:12 msgid "An unexpected error occurred" msgstr "发生意外错误" @@ -4262,7 +4257,7 @@ msgid "Anyone can request an account, but an administrator must approve it." msgstr "任何人都可以申请账号,但需要管理员批准。" #. Label for an integration API key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1018 +#: src/features/app/components/setup/SetupWizardSteps.tsx:994 msgid "API key" msgstr "API 密钥" @@ -4958,7 +4953,7 @@ msgid "Authorized apps" msgstr "已授权应用" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:38 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:37 msgid "Authorized IPs cleared. New logins will require email verification." msgstr "已清除授权 IP。后续登录需要邮箱验证。" @@ -5730,7 +5725,7 @@ msgid "Bluesky connections" msgstr "Bluesky 连接" #. Setup wizard title for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1001 +#: src/features/app/components/setup/SetupWizardSteps.tsx:986 msgid "Bluesky OAuth" msgstr "Bluesky OAuth" @@ -5897,11 +5892,6 @@ msgstr "机器人权限不能为负数。" msgid "Bot profile" msgstr "机器人资料" -#. Setup wizard title for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:985 -msgid "Bot protection" -msgstr "机器人防护" - #. Short label in the authentication OAUTH scopes step. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/OAuthScopesStep.tsx:20 msgid "Bot scope requested" @@ -6554,11 +6544,6 @@ msgstr "无法编辑" msgid "Cannot delete account" msgstr "无法删除账号" -#. Toast error shown when captcha verification fails inside the auth captcha interceptor. -#: src/features/auth/components/CaptchaInterceptor.tsx:15 -msgid "Captcha verification failed. Try again." -msgstr "验证码校验失败。请重试。" - #. Section header in the Linux audio source picker. Lists capture-target options (entire system / specific apps). #: src/features/voice/components/AudioSourcePickerLinux.tsx:50 msgid "Capture" @@ -7398,10 +7383,6 @@ msgstr "正在检查访问权限..." msgid "Checking screen recording permission..." msgstr "正在检查屏幕录制权限..." -#: src/features/auth/components/AltchaVerification.tsx:62 -msgid "Checking your browser. This takes a few seconds." -msgstr "正在检查您的浏览器。这需要几秒钟。" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -7571,11 +7552,6 @@ msgstr "选择“文件”,然后选择“添加到程序坞”。" msgid "Choose friends to message." msgstr "选择要发消息的好友。" -#. Setup wizard body for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:989 -msgid "Choose hCaptcha or Cloudflare Turnstile for signup challenges." -msgstr "选择 hCaptcha 或 Cloudflare Turnstile 用于注册时的人机验证。" - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:455 msgid "Choose how chat moves after you send a message" @@ -7982,17 +7958,17 @@ msgid "Clear selection" msgstr "清除选择" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:88 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:87 msgid "Clear trust all setting" msgstr "清除“全部信任”设置" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:63 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:62 msgid "Clear trusted domains" msgstr "清除受信任的域名" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:96 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:95 msgid "Clear trusted domains ({trustedDomainsCount})" msgstr "清除受信任的域名({trustedDomainsCount})" @@ -8002,7 +7978,7 @@ msgid "Clearer text" msgstr "更清晰的文字" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:108 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:107 msgid "Clearing trusted domains..." msgstr "正在清除受信任的域名…" @@ -8100,7 +8076,7 @@ msgid "Client" msgstr "客户端" #. Label for Bluesky OAuth client name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1057 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1031 msgid "Client name" msgstr "客户端名称" @@ -8117,7 +8093,7 @@ msgid "Client secret regenerated. Update any code that uses the old secret." msgstr "客户端密钥已重新生成。请更新所有使用旧密钥的代码。" #. Label for Bluesky OAuth client URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1061 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 msgid "Client URL" msgstr "客户端网址" @@ -8269,11 +8245,6 @@ msgstr "已关闭的私信" msgid "Cloud upload" msgstr "云端上传" -#. Cloudflare Turnstile provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1014 -msgid "Cloudflare Turnstile" -msgstr "Cloudflare Turnstile" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:58 msgid "Coal" @@ -8669,7 +8640,7 @@ msgstr "社区名称" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:126 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:125 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:113 msgid "Community nickname" msgstr "社区昵称" @@ -8722,7 +8693,7 @@ msgid "Community profile" msgstr "社区资料" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:73 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:72 msgid "Community profile updated" msgstr "社区资料已更新" @@ -8880,7 +8851,7 @@ msgid "Configure keyboard shortcuts" msgstr "配置键盘快捷键" #. Option for configuring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:961 +#: src/features/app/components/setup/SetupWizardSteps.tsx:954 msgid "Configure now" msgstr "立即配置" @@ -12341,7 +12312,7 @@ msgstr "从 {channel} 断开连接" msgid "Disconnect from voice" msgstr "断开语音连接" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:261 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:243 msgid "Disconnect socket" msgstr "断开 socket 连接" @@ -12479,7 +12450,7 @@ msgstr "显示模式" #. Short label in the inputs tab. Keep it concise. #. Short label in the my profile tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:22 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:138 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:137 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:61 msgid "Display name" msgstr "显示名称" @@ -12625,7 +12596,7 @@ msgstr "您想加入 {communityName} 吗?" #. Label in the accessibility tab. #. Label in the my profile tab. #: src/features/user/components/modals/tabs/AccessibilityTab.tsx:54 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:146 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:145 msgid "Doc, I'm from the future. I came here in a time machine that you invented. Now, I need your help to get back to the year 1985." msgstr "博士,我来自未来。我乘坐你发明的时光机来到这里。现在,我需要你的帮助才能回到 1985 年。" @@ -13262,7 +13233,7 @@ msgid "Edit your messages above or below" msgstr "编辑上方或下方的消息" #. Button or menu action label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:93 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:92 msgid "Edit your profile appearance and see a live preview" msgstr "编辑个人资料外观并实时预览" @@ -13330,7 +13301,7 @@ msgid "Email changed" msgstr "邮箱已更改" #. Setup wizard title for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:993 +#: src/features/app/components/setup/SetupWizardSteps.tsx:978 msgid "Email delivery" msgstr "邮件发送" @@ -13635,7 +13606,7 @@ msgid "Enable beta feature" msgstr "启用测试功能" #. Label for enabling Bluesky OAuth in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1053 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1027 msgid "Enable Bluesky OAuth" msgstr "启用 Bluesky OAuth" @@ -13668,7 +13639,7 @@ msgid "Enable developer mode" msgstr "启用开发者模式" #. Label for enabling SMTP email delivery in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1021 +#: src/features/app/components/setup/SetupWizardSteps.tsx:995 msgid "Enable email delivery" msgstr "启用邮件发送" @@ -14705,7 +14676,7 @@ msgid "Failed to ban member. Try again." msgstr "封禁成员失败。请重试。" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:59 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:58 msgid "Failed to clear trusted domains." msgstr "清除受信任的域名失败。" @@ -14762,7 +14733,7 @@ msgid "Failed to enable camera." msgstr "启用摄像头失败。" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:42 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:41 msgid "Failed to forget authorized IPs. Try again." msgstr "忘记已授权的 IP 失败。请重试。" @@ -14907,7 +14878,7 @@ msgid "Failed to resend verification code. Try again later." msgstr "重新发送验证码失败。请稍后重试。" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:75 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:74 msgid "Failed to reset premium state." msgstr "重置会员状态失败。" @@ -15581,7 +15552,7 @@ msgstr "强制显示加载骨架屏" msgid "Force mature media" msgstr "强制成人媒体" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:276 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:258 msgid "Force move to AFK channel" msgstr "强制移至 AFK 频道" @@ -15640,7 +15611,7 @@ msgid "Forced off" msgstr "已强制关闭" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:46 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:45 msgid "Forget authorized IPs" msgstr "忘记已授权的 IP" @@ -15650,7 +15621,7 @@ msgid "Forget subscriptions" msgstr "清除推送订阅" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:104 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:103 msgid "Forgetting authorized IPs..." msgstr "正在忘记已授权的 IP…" @@ -15907,12 +15878,12 @@ msgid "from <0>{0}" msgstr "来自 <0>{0}" #. Label for SMTP from email input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1025 +#: src/features/app/components/setup/SetupWizardSteps.tsx:999 msgid "From email" msgstr "发件人邮箱" #. Label for SMTP from name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1029 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1003 msgid "From name" msgstr "发件人名称" @@ -16204,7 +16175,7 @@ msgid "GIF preview" msgstr "GIF 预览" #. Setup wizard title for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:969 +#: src/features/app/components/setup/SetupWizardSteps.tsx:962 msgid "GIF search" msgstr "GIF 搜索" @@ -16853,21 +16824,12 @@ msgstr "有兑换码?兑换它以解锁 {PREMIUM_PRODUCT_NAME}。" msgid "Having fun?" msgstr "玩得开心吗?" -#: src/features/auth/components/modals/CaptchaModal.tsx:175 -msgid "Having issues? Try hCaptcha instead" -msgstr "遇到问题?试试 hCaptcha" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:63 msgctxt "us-state" msgid "Hawaii" msgstr "夏威夷州" -#. hCaptcha provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1013 -msgid "hCaptcha" -msgstr "hCaptcha" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:238 msgid "HD" @@ -19768,7 +19730,7 @@ msgid "Logo" msgstr "Logo" #. Label for Bluesky OAuth logo URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1065 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1039 msgid "Logo URL" msgstr "Logo 网址" @@ -22941,7 +22903,7 @@ msgid "No tokens match \"{searchQuery}\"." msgstr "没有与“{searchQuery}”匹配的令牌。" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:92 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:91 msgid "No trusted domains" msgstr "无受信任域名" @@ -23696,10 +23658,6 @@ msgstr "打开浏览器选择器" msgid "Open call view" msgstr "打开通话界面" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:288 -msgid "Open captcha modal" -msgstr "打开人机验证弹窗" - #. Accessible label for the channel header title button in a community channel. #: src/features/channel/components/channel_header/shared.ts:14 msgid "Open channel details for {channelName}" @@ -23712,7 +23670,7 @@ msgstr "打开“{channelName}”的频道详情" msgid "Open chat" msgstr "打开聊天" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:314 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:290 msgid "Open claim account modal" msgstr "打开认领账号弹窗" @@ -23944,11 +23902,11 @@ msgstr "在浏览器中打开贴纸" msgid "Open streaming privacy settings" msgstr "打开直播隐私设置" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:327 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:303 msgid "Open sudo verification modal" msgstr "打开 sudo 验证弹窗" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:342 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:318 msgid "Open system DM" msgstr "打开系统私信" @@ -24430,7 +24388,7 @@ msgstr "通行密钥需要带有有效应用标识符的已签名 macOS 软件 #. Generic form-field label for a password. #. Label for SMTP password input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1036 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1010 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:146 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:183 @@ -25212,7 +25170,7 @@ msgid "Popup" msgstr "弹窗" #. Label for SMTP port input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1034 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1008 msgid "Port" msgstr "端口" @@ -25338,7 +25296,7 @@ msgid "Premium since date" msgstr "会员开通日期" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:71 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:70 msgid "Premium state reset on the backend." msgstr "后端已重置会员状态。" @@ -25608,7 +25566,7 @@ msgid "Privacy settings" msgstr "隐私设置" #. Label for Bluesky OAuth privacy URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1073 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1047 msgid "Privacy URL" msgstr "隐私网址" @@ -25633,7 +25591,7 @@ msgid "Private details" msgstr "个人信息" #. Label for Bluesky OAuth private key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1081 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1055 msgid "Private key" msgstr "私钥" @@ -25699,18 +25657,18 @@ msgstr "个人资料颜色" #. Settings section label for editing profile appearance and identity. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:105 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:104 #: src/features/user/components/settings_utils/section_registry/GeneralSettingsSections.ts:6 msgid "Profile customization" msgstr "个人资料自定义" #. Label in the my profile tab. Preserve {selectedGuildName}; it is inserted by code. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:101 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:100 msgid "Profile customization for {selectedGuildName}" msgstr "“{selectedGuildName}”的个人资料自定义" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:97 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:96 msgid "Profile customization form" msgstr "个人资料自定义表单" @@ -25775,7 +25733,7 @@ msgid "Profile type" msgstr "个人资料类型" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:77 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:76 msgid "Profile updated" msgstr "个人资料已更新" @@ -25812,7 +25770,7 @@ msgstr "连接新音频设备时提示" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:142 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:141 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:177 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:160 msgid "Pronouns" @@ -25842,11 +25800,6 @@ msgstr "请提供被举报用户的 ID 或用户名。" msgid "Provide your full legal name for the declaration." msgstr "请提供你的完整法定姓名,用于此声明。" -#. Label for an integration provider choice. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 -msgid "Provider" -msgstr "提供商" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27626,7 +27579,7 @@ msgid "Reset password" msgstr "重置密码" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:79 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:78 msgid "Reset premium state" msgstr "重置会员状态" @@ -27635,7 +27588,7 @@ msgstr "重置会员状态" msgid "Reset slider to default value" msgstr "将滑块重置为默认值" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:247 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:229 msgid "Reset socket" msgstr "重置连接" @@ -27684,7 +27637,7 @@ msgid "Reset zoom" msgstr "重置缩放" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:112 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:111 msgid "Resetting premium state..." msgstr "正在重置会员状态…" @@ -28315,7 +28268,7 @@ msgid "Run the instance as one community instead of many. This can only be enabl msgstr "将实例作为一个社区运行,而不是多个。此选项只能在当前的初始设置过程中启用。" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:100 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:99 msgid "Runtime utilities" msgstr "运行时工具" @@ -29103,11 +29056,6 @@ msgstr "点击了次要按钮。" msgid "Secret" msgstr "密钥" -#. Label for a CAPTCHA secret key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1020 -msgid "Secret key" -msgstr "密钥" - #. Settings search entry label. Names the settings search entry in the settings UI. #. Short label in the secrets section. Keep it concise. Keep the tone plain and specific. #: src/features/user/components/modals/tabs/applications_tab/application_detail/SecretsSection.tsx:11 @@ -29925,7 +29873,7 @@ msgid "Set up authenticator app" msgstr "设置身份验证器应用" #. Option for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:953 +#: src/features/app/components/setup/SetupWizardSteps.tsx:946 msgid "Set up later" msgstr "稍后设置" @@ -30427,7 +30375,7 @@ msgstr "显示内嵌私信列表" msgid "Show just the typing indicator without avatars" msgstr "只显示正在输入状态,不显示头像" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:308 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:284 msgid "Show keyboard mode intro" msgstr "显示键盘模式介绍" @@ -30538,7 +30486,7 @@ msgstr "显示 Neko" msgid "Show new device alerts" msgstr "显示新设备提醒" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:282 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:264 msgid "Show new device modal" msgstr "显示新设备弹窗" @@ -30820,7 +30768,7 @@ msgid "Signed-in devices" msgstr "已登录的设备" #. Label for Bluesky OAuth signing key ID input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1077 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1051 msgid "Signing key ID" msgstr "签名密钥 ID" @@ -30910,11 +30858,6 @@ msgstr "单行" msgid "Single user (all statuses)" msgstr "单个用户(所有状态)" -#. Label for a CAPTCHA site key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 -msgid "Site key" -msgstr "站点密钥" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:98 @@ -30964,7 +30907,7 @@ msgid "Skip the system leave notice — nobody gets pinged." msgstr "不发送系统退群通知,也不会有人收到提醒。" #. Description for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:957 +#: src/features/app/components/setup/SetupWizardSteps.tsx:950 msgid "Skip this now and configure it from the admin panel." msgstr "现在跳过,稍后从管理面板配置。" @@ -31212,17 +31155,17 @@ msgid "SMS verification is unavailable right now. Try again later or contact sup msgstr "短信验证暂时不可用。请稍后重试或联系支持团队。" #. Success message after validating SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1045 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 msgid "SMTP connection verified." msgstr "SMTP 连接已验证。" #. Label for SMTP host input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1033 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1007 msgid "SMTP host" msgstr "SMTP 主机" #. Failure message after validating SMTP credentials when the server returns no error detail. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1049 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1023 msgid "SMTP validation failed." msgstr "SMTP 验证失败。" @@ -31402,7 +31345,7 @@ msgstr "出错了。请稍后重试。" #. Inline error in the web deep-link prompt when opening the desktop app fails. #. Toast error shown when the mature content check request fails unexpectedly. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:18 -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:580 +#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 #: src/features/auth/flow/DesktopDeepLinkPrompt.tsx:31 msgid "Something went wrong. Try again." msgstr "出错了。请重试。" @@ -32099,6 +32042,11 @@ msgstr "仍在建立索引,请稍后再查看" msgid "Still Neko" msgstr "静止 Neko" +#. Small toast shown only when an automatic background check before sign-in, sign-up or a similar request takes more than a couple of seconds. No user action needed. Keep it short and calm. +#: src/features/auth/altcha/CaptchaInterceptor.ts:13 +msgid "Still working on it…" +msgstr "仍在处理中…" + #. Stop-recording button label in the desktop voice message composer. #: src/features/voice/components/VoiceMessageComposerModal.tsx:65 msgid "Stop" @@ -33013,7 +32961,7 @@ msgid "Terms of service" msgstr "服务条款" #. Label for Bluesky OAuth terms URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1069 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1043 msgid "Terms URL" msgstr "条款网址" @@ -33023,7 +32971,7 @@ msgid "Terrorism or violent extremism" msgstr "恐怖主义或暴力极端主义" #. Button that validates SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1041 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1015 msgid "Test SMTP" msgstr "测试 SMTP" @@ -33800,7 +33748,7 @@ msgid "This clears quick CSS, imported themes, uploaded assets, and local file r msgstr "这将清除此设备上的快速 CSS、已导入的主题、已上传的素材和本地文件引用。" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:83 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:82 msgid "This clears your backend premium state entirely, including premium type, billing metadata, and override flags." msgstr "这将完全清除你在后端的会员状态,包括会员类型、账单元数据和覆盖标记。" @@ -34200,7 +34148,7 @@ msgid "This message no longer exists." msgstr "此消息已不存在。" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:130 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:129 msgid "This nickname will only be visible in this community" msgstr "此昵称仅在此社区内可见" @@ -34277,12 +34225,12 @@ msgid "This removes all custom CSS overrides. Theme files in your library are no msgstr "此操作会移除所有自定义 CSS 覆盖。主题库中的主题文件不受影响。" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:50 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:49 msgid "This removes all previously authorized IP addresses on your account. The next login from any IP will require email verification." msgstr "此操作将移除你账号中所有先前授权的 IP 地址。下次从任何 IP 登录时都需要进行邮箱验证。" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:67 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:66 msgid "This removes all trusted domains. You will see the external link warning for all domains again." msgstr "这会移除所有受信任的域名。你将再次看到所有域名的外部链接警告。" @@ -34949,7 +34897,7 @@ msgstr "Linux 系统托盘协议无法可靠地让应用在运行时添加或移 msgid "Trending GIFs" msgstr "热门 GIF" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:383 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:359 msgid "Trigger React crash" msgstr "触发 React 崩溃" @@ -35008,7 +34956,7 @@ msgid "Trusted domains" msgstr "信任的域名" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:55 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:54 msgid "Trusted domains cleared." msgstr "已清除受信任域名。" @@ -35054,7 +35002,6 @@ msgid "Try a different variable name or clear the search." msgstr "尝试其他变量名或清除搜索。" #. Generic action label for retrying a failed or interrupted operation. -#: src/features/auth/components/AltchaVerification.tsx:53 #: src/features/auth/flow/AuthRouteLoadError.tsx:22 #: src/features/i18n/utils/CommonMessageDescriptors.ts:75 msgid "Try again" @@ -35132,10 +35079,6 @@ msgstr "改用安全密钥/通行密钥" msgid "Try sending your message again." msgstr "请再发一次消息。" -#: src/features/auth/components/modals/CaptchaModal.tsx:177 -msgid "Try Turnstile instead" -msgstr "改用 Turnstile" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:135 msgid "TTS" @@ -36890,7 +36833,7 @@ msgid "Use this when troubleshooting the client or collecting logs. It may add v msgstr "在排查客户端问题或收集日志时使用此选项。它可能会在当前客户端的浏览器控制台中输出详细消息。" #. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1037 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1011 msgid "Use TLS" msgstr "使用 TLS" @@ -37056,7 +36999,7 @@ msgstr "用户音量" #. Generic form-field label for a username. #. Label for SMTP username input. #. Settings search entry label. Also used as a search synonym in the settings search bar. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 #: src/features/i18n/utils/CommonMessageDescriptors.ts:572 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:218 #: src/features/user/components/modals/tabs/my_profile_tab/MyProfileTabUsernameSection.tsx:56 @@ -37337,11 +37280,6 @@ msgstr "验证手机号" msgid "Verify phone number form" msgstr "验证手机号表单" -#. Short label in the authentication captcha modal. Keep the tone plain and specific. -#: src/features/auth/components/modals/CaptchaModal.tsx:17 -msgid "Verify you're human" -msgstr "验证你不是机器人" - #. Title of the error modal shown when an unverified account tries to start a DM. #. Title shown when an unverified account cannot start a DM or group DM. #: src/features/app/components/alerts/DmActionErrorModal.tsx:40 @@ -37369,22 +37307,22 @@ msgid "Verify your email before adding an authenticator app." msgstr "请先验证你的邮箱,然后再添加身份验证器应用。" #. Description text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:117 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:116 msgid "Verify your email before changing your community nickname, avatar, banner, bio, pronouns, or accent color." msgstr "请先验证邮箱,再修改社区昵称、头像、横幅、个人简介、代词或主题色。" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:121 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:120 msgid "Verify your email before changing your username, display name, avatar, banner, bio, pronouns, time zone, or {premiumProductName} badge privacy." msgstr "请先验证你的邮箱,然后才能更改用户名、显示名称、头像、横幅、个人简介、代词、时区或 {premiumProductName} 徽章隐私设置。" #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:85 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:84 msgid "Verify your email before editing this community profile. You can still preview it here." msgstr "请先验证邮箱,再编辑此社区资料。你仍可在此预览。" #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:89 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:88 msgid "Verify your email before editing your profile. You can still preview it here." msgstr "请先验证邮箱,再编辑个人资料。你仍可在此预览。" @@ -37416,12 +37354,12 @@ msgid "Verify your email to continue using {productName}." msgstr "请验证你的邮箱,以便继续使用 {productName}。" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:109 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:108 msgid "Verify your email to edit this community profile" msgstr "验证邮箱后才能编辑此社区资料" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:113 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:112 msgid "Verify your email to edit your profile" msgstr "验证邮箱后才能编辑个人资料" @@ -38398,10 +38336,6 @@ msgstr "我们在巴西下调了 {premiumProductName} 的价格。现在每月 { msgid "We need one verification step before you continue. This helps protect accounts and keep spam off {productName}." msgstr "在你继续操作前,我们需要完成一步验证。这有助于保护账号安全,并防止垃圾信息出现在 {productName} 上。" -#: src/features/auth/components/modals/CaptchaModal.tsx:128 -msgid "We need to make sure you're not a bot. Complete the verification below." -msgstr "我们需要确认你不是机器人。请完成下方验证。" - #. Required-action modal intro text when both email and phone verification are required. #: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:216 msgid "We need two verification steps before you continue. We will show one step at a time." @@ -39256,7 +39190,7 @@ msgid "You can't befriend yourself" msgstr "你不能加自己为好友" #. Label in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:134 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:133 msgid "You can't change your nickname here" msgstr "你无法在此处更改昵称" @@ -39506,7 +39440,7 @@ msgid "You have unsaved changes." msgstr "你有未保存的更改。" #. Warning text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:81 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:80 msgid "You have unsaved changes. Save or reset before leaving." msgstr "你有未保存的更改。请先保存或重置,然后再离开。" @@ -40031,10 +39965,6 @@ msgstr "你的操作未能完成,因为它被我们的安全系统标记了。 msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "你的申请正在审核中。你仍可以更新展示信息或撤回申请。" -#: src/features/auth/components/AltchaVerification.tsx:50 -msgid "Your browser couldn't finish the check." -msgstr "您的浏览器未能完成验证。" - #. Body of the browser-audio-required modal explaining why the user must click before audio can play. #: src/features/voice/components/modals/AudioPlaybackPermissionModal.tsx:12 msgid "Your browser requires user interaction before audio can be played. Click the button below to enable voice chat." @@ -40386,7 +40316,7 @@ msgid "YouTube enrichment" msgstr "YouTube 增强功能" #. Setup wizard title for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:977 +#: src/features/app/components/setup/SetupWizardSteps.tsx:970 msgid "YouTube previews" msgstr "YouTube 预览" diff --git a/fluxer_app/src/features/i18n/locales/zh-TW/messages.po b/fluxer_app/src/features/i18n/locales/zh-TW/messages.po index df46806c5..3b4c2665d 100644 --- a/fluxer_app/src/features/i18n/locales/zh-TW/messages.po +++ b/fluxer_app/src/features/i18n/locales/zh-TW/messages.po @@ -2395,11 +2395,6 @@ msgstr "60 秒" msgid "7 days" msgstr "7 天" -#. Required-action error when the API requires a captcha for phone verification. -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 -msgid "A browser check is required before phone verification. Try again from the sign-in page or contact support." -msgstr "電話驗證前需要進行瀏覽器檢查。請從登入頁面重試,或聯絡客服。" - #. Hint shown beside in:. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:77 msgid "a channel" @@ -2928,7 +2923,7 @@ msgid "Add a friend to get started." msgstr "新增好友以開始使用。" #. Setup wizard body for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:973 +#: src/features/app/components/setup/SetupWizardSteps.tsx:966 msgid "Add a Klipy API key to enable GIF search at runtime." msgstr "新增 Klipy API 金鑰,即可在執行階段啟用 GIF 搜尋。" @@ -2965,7 +2960,7 @@ msgid "Add a working email" msgstr "新增可用的電子郵件" #. Setup wizard body for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:981 +#: src/features/app/components/setup/SetupWizardSteps.tsx:974 msgid "Add a YouTube Data API key to enrich YouTube links." msgstr "新增 YouTube Data API 金鑰以豐富 YouTube 連結。" @@ -3011,7 +3006,7 @@ msgid "Add another reaction" msgstr "新增其他反應" #. Setup wizard body for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1005 +#: src/features/app/components/setup/SetupWizardSteps.tsx:990 msgid "Add Bluesky OAuth client metadata and a signing key." msgstr "新增 Bluesky OAuth 用戶端中繼資料和簽署金鑰。" @@ -3161,7 +3156,7 @@ msgid "Add shortcut" msgstr "新增快速鍵" #. Setup wizard body for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:997 +#: src/features/app/components/setup/SetupWizardSteps.tsx:982 msgid "Add SMTP credentials so the instance can send verification and notification email." msgstr "新增 SMTP 憑證,讓此實例可以傳送驗證和通知電子郵件。" @@ -3188,7 +3183,7 @@ msgid "Add stream" msgstr "新增直播" #. Description for configuring an optional setup wizard integration now. -#: src/features/app/components/setup/SetupWizardSteps.tsx:965 +#: src/features/app/components/setup/SetupWizardSteps.tsx:958 msgid "Add the credentials during setup." msgstr "在設定期間新增憑證。" @@ -3954,7 +3949,7 @@ msgid "An invalid status was provided. You can now close this tab and return to msgstr "提供的狀態無效。您現在可以關閉此分頁並返回應用程式。" #. Short label in the authentication auth form. Keep the tone plain and specific. -#: src/features/auth/hooks/useAuthForm.ts:13 +#: src/features/auth/hooks/useAuthForm.ts:12 msgid "An unexpected error occurred" msgstr "發生未預期的錯誤" @@ -4262,7 +4257,7 @@ msgid "Anyone can request an account, but an administrator must approve it." msgstr "任何人都可以申請帳號,但必須由管理員核准。" #. Label for an integration API key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1018 +#: src/features/app/components/setup/SetupWizardSteps.tsx:994 msgid "API key" msgstr "API 金鑰" @@ -4958,7 +4953,7 @@ msgid "Authorized apps" msgstr "已授權的應用程式" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:38 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:37 msgid "Authorized IPs cleared. New logins will require email verification." msgstr "已清除授權 IP。新的登入將需要電子郵件驗證。" @@ -5730,7 +5725,7 @@ msgid "Bluesky connections" msgstr "Bluesky 連結" #. Setup wizard title for Bluesky integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1001 +#: src/features/app/components/setup/SetupWizardSteps.tsx:986 msgid "Bluesky OAuth" msgstr "Bluesky OAuth" @@ -5897,11 +5892,6 @@ msgstr "機器人權限不能是負數。" msgid "Bot profile" msgstr "機器人個人檔案" -#. Setup wizard title for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:985 -msgid "Bot protection" -msgstr "機器人防護" - #. Short label in the authentication OAUTH scopes step. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/OAuthScopesStep.tsx:20 msgid "Bot scope requested" @@ -6554,11 +6544,6 @@ msgstr "無法編輯" msgid "Cannot delete account" msgstr "無法刪除帳號" -#. Toast error shown when captcha verification fails inside the auth captcha interceptor. -#: src/features/auth/components/CaptchaInterceptor.tsx:15 -msgid "Captcha verification failed. Try again." -msgstr "驗證碼驗證失敗。請再試一次。" - #. Section header in the Linux audio source picker. Lists capture-target options (entire system / specific apps). #: src/features/voice/components/AudioSourcePickerLinux.tsx:50 msgid "Capture" @@ -7398,10 +7383,6 @@ msgstr "正在檢查存取權限…" msgid "Checking screen recording permission..." msgstr "正在檢查螢幕錄製權限…" -#: src/features/auth/components/AltchaVerification.tsx:62 -msgid "Checking your browser. This takes a few seconds." -msgstr "正在檢查您的瀏覽器。這需要幾秒鐘的時間。" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -7571,11 +7552,6 @@ msgstr "選擇「檔案」,然後選擇「加入 Dock」。" msgid "Choose friends to message." msgstr "選擇要傳送訊息的好友。" -#. Setup wizard body for CAPTCHA integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:989 -msgid "Choose hCaptcha or Cloudflare Turnstile for signup challenges." -msgstr "選擇 hCaptcha 或 Cloudflare Turnstile 來進行註冊驗證。" - #. Settings search entry description. One-line summary of what the settings search entry controls. #: src/features/user/components/settings_utils/search_index/ChatSettingsIndex.ts:455 msgid "Choose how chat moves after you send a message" @@ -7982,17 +7958,17 @@ msgid "Clear selection" msgstr "清除選取" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:88 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:87 msgid "Clear trust all setting" msgstr "清除「信任所有連結」設定" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:63 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:62 msgid "Clear trusted domains" msgstr "清除信任的網域" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:96 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:95 msgid "Clear trusted domains ({trustedDomainsCount})" msgstr "清除信任的網域 ({trustedDomainsCount})" @@ -8002,7 +7978,7 @@ msgid "Clearer text" msgstr "文字更清晰" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:108 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:107 msgid "Clearing trusted domains..." msgstr "正在清除信任的網域…" @@ -8100,7 +8076,7 @@ msgid "Client" msgstr "用戶端" #. Label for Bluesky OAuth client name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1057 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1031 msgid "Client name" msgstr "用戶端名稱" @@ -8117,7 +8093,7 @@ msgid "Client secret regenerated. Update any code that uses the old secret." msgstr "用戶端密鑰已重新產生。請更新任何使用舊密鑰的程式碼。" #. Label for Bluesky OAuth client URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1061 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 msgid "Client URL" msgstr "用戶端網址" @@ -8269,11 +8245,6 @@ msgstr "已關閉的私訊" msgid "Cloud upload" msgstr "雲端上傳" -#. Cloudflare Turnstile provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1014 -msgid "Cloudflare Turnstile" -msgstr "Cloudflare Turnstile" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/AppearanceSections.ts:58 msgid "Coal" @@ -8669,7 +8640,7 @@ msgstr "社群名稱" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:126 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:125 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:113 msgid "Community nickname" msgstr "社群暱稱" @@ -8722,7 +8693,7 @@ msgid "Community profile" msgstr "社群個人檔案" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:73 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:72 msgid "Community profile updated" msgstr "社群個人檔案已更新" @@ -8880,7 +8851,7 @@ msgid "Configure keyboard shortcuts" msgstr "設定鍵盤快速鍵" #. Option for configuring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:961 +#: src/features/app/components/setup/SetupWizardSteps.tsx:954 msgid "Configure now" msgstr "立即設定" @@ -12341,7 +12312,7 @@ msgstr "從 {channel} 中斷連線" msgid "Disconnect from voice" msgstr "中斷語音連線" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:261 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:243 msgid "Disconnect socket" msgstr "中斷 socket 連線" @@ -12479,7 +12450,7 @@ msgstr "顯示模式" #. Short label in the inputs tab. Keep it concise. #. Short label in the my profile tab. Keep it concise. #: src/features/user/components/modals/tabs/component_gallery_tab/ComponentGalleryTabInputsTab.tsx:22 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:138 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:137 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:61 msgid "Display name" msgstr "顯示名稱" @@ -12625,7 +12596,7 @@ msgstr "你想加入 {communityName} 嗎?" #. Label in the accessibility tab. #. Label in the my profile tab. #: src/features/user/components/modals/tabs/AccessibilityTab.tsx:54 -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:146 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:145 msgid "Doc, I'm from the future. I came here in a time machine that you invented. Now, I need your help to get back to the year 1985." msgstr "博士,我來自未來。我搭乘您發明的時光機來到這裡。現在,我需要您的幫助才能回到 1985 年。" @@ -13262,7 +13233,7 @@ msgid "Edit your messages above or below" msgstr "編輯上方或下方的訊息" #. Button or menu action label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:93 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:92 msgid "Edit your profile appearance and see a live preview" msgstr "編輯個人檔案外觀並查看即時預覽" @@ -13330,7 +13301,7 @@ msgid "Email changed" msgstr "電子郵件已變更" #. Setup wizard title for SMTP integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:993 +#: src/features/app/components/setup/SetupWizardSteps.tsx:978 msgid "Email delivery" msgstr "電子郵件遞送" @@ -13635,7 +13606,7 @@ msgid "Enable beta feature" msgstr "啟用測試版功能" #. Label for enabling Bluesky OAuth in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1053 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1027 msgid "Enable Bluesky OAuth" msgstr "啟用 Bluesky OAuth" @@ -13668,7 +13639,7 @@ msgid "Enable developer mode" msgstr "啟用開發者模式" #. Label for enabling SMTP email delivery in setup. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1021 +#: src/features/app/components/setup/SetupWizardSteps.tsx:995 msgid "Enable email delivery" msgstr "啟用電子郵件遞送" @@ -14705,7 +14676,7 @@ msgid "Failed to ban member. Try again." msgstr "無法停權成員。請再試一次。" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:59 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:58 msgid "Failed to clear trusted domains." msgstr "無法清除信任的網域。" @@ -14762,7 +14733,7 @@ msgid "Failed to enable camera." msgstr "無法開啟相機。" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:42 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:41 msgid "Failed to forget authorized IPs. Try again." msgstr "無法清除已授權的 IP。請再試一次。" @@ -14907,7 +14878,7 @@ msgid "Failed to resend verification code. Try again later." msgstr "無法重新傳送驗證碼。請稍後再試。" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:75 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:74 msgid "Failed to reset premium state." msgstr "無法重設付費狀態。" @@ -15581,7 +15552,7 @@ msgstr "強制顯示載入骨架" msgid "Force mature media" msgstr "強制成人媒體" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:276 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:258 msgid "Force move to AFK channel" msgstr "強制移至閒置頻道" @@ -15640,7 +15611,7 @@ msgid "Forced off" msgstr "強制關閉" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:46 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:45 msgid "Forget authorized IPs" msgstr "清除已授權的 IP" @@ -15650,7 +15621,7 @@ msgid "Forget subscriptions" msgstr "清除推播訂閱" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:104 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:103 msgid "Forgetting authorized IPs..." msgstr "正在清除已授權的 IP…" @@ -15907,12 +15878,12 @@ msgid "from <0>{0}" msgstr "來自 <0>{0}" #. Label for SMTP from email input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1025 +#: src/features/app/components/setup/SetupWizardSteps.tsx:999 msgid "From email" msgstr "寄件人電子郵件" #. Label for SMTP from name input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1029 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1003 msgid "From name" msgstr "寄件人名稱" @@ -16204,7 +16175,7 @@ msgid "GIF preview" msgstr "GIF 預覽" #. Setup wizard title for GIF integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:969 +#: src/features/app/components/setup/SetupWizardSteps.tsx:962 msgid "GIF search" msgstr "GIF 搜尋" @@ -16853,21 +16824,12 @@ msgstr "有禮物代碼嗎?兌換它以解鎖 {PREMIUM_PRODUCT_NAME}。" msgid "Having fun?" msgstr "玩得開心嗎?" -#: src/features/auth/components/modals/CaptchaModal.tsx:175 -msgid "Having issues? Try hCaptcha instead" -msgstr "有問題嗎?改用 hCaptcha 試試" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:63 msgctxt "us-state" msgid "Hawaii" msgstr "夏威夷州" -#. hCaptcha provider option. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1013 -msgid "hCaptcha" -msgstr "hCaptcha" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:238 msgid "HD" @@ -19768,7 +19730,7 @@ msgid "Logo" msgstr "Logo" #. Label for Bluesky OAuth logo URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1065 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1039 msgid "Logo URL" msgstr "Logo 網址" @@ -22941,7 +22903,7 @@ msgid "No tokens match \"{searchQuery}\"." msgstr "沒有權杖符合「{searchQuery}」。" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:92 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:91 msgid "No trusted domains" msgstr "沒有信任的網域" @@ -23696,10 +23658,6 @@ msgstr "開啟瀏覽器選取器" msgid "Open call view" msgstr "開啟通話畫面" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:288 -msgid "Open captcha modal" -msgstr "開啟驗證碼視窗" - #. Accessible label for the channel header title button in a community channel. #: src/features/channel/components/channel_header/shared.ts:14 msgid "Open channel details for {channelName}" @@ -23712,7 +23670,7 @@ msgstr "開啟「{channelName}」的頻道詳細資訊" msgid "Open chat" msgstr "開啟聊天" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:314 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:290 msgid "Open claim account modal" msgstr "開啟帳號認領視窗" @@ -23944,11 +23902,11 @@ msgstr "在瀏覽器中開啟貼圖" msgid "Open streaming privacy settings" msgstr "開啟直播隱私設定" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:327 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:303 msgid "Open sudo verification modal" msgstr "開啟 sudo 驗證視窗" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:342 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:318 msgid "Open system DM" msgstr "開啟系統私訊" @@ -24430,7 +24388,7 @@ msgstr "通行金鑰需要具備有效應用程式識別碼的已簽署 macOS #. Generic form-field label for a password. #. Label for SMTP password input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1036 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1010 #: src/features/i18n/utils/CommonMessageDescriptors.ts:215 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:146 #: src/features/user/components/modals/tabs/account_security_tab/AccountTab.tsx:183 @@ -25212,7 +25170,7 @@ msgid "Popup" msgstr "彈出式視窗" #. Label for SMTP port input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1034 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1008 msgid "Port" msgstr "埠號" @@ -25338,7 +25296,7 @@ msgid "Premium since date" msgstr "進階方案開始日期" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:71 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:70 msgid "Premium state reset on the backend." msgstr "已在後端重設進階方案狀態。" @@ -25608,7 +25566,7 @@ msgid "Privacy settings" msgstr "隱私設定" #. Label for Bluesky OAuth privacy URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1073 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1047 msgid "Privacy URL" msgstr "隱私權政策網址" @@ -25633,7 +25591,7 @@ msgid "Private details" msgstr "個人資料" #. Label for Bluesky OAuth private key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1081 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1055 msgid "Private key" msgstr "私鑰" @@ -25699,18 +25657,18 @@ msgstr "個人檔案顏色" #. Settings section label for editing profile appearance and identity. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:105 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:104 #: src/features/user/components/settings_utils/section_registry/GeneralSettingsSections.ts:6 msgid "Profile customization" msgstr "個人檔案自訂" #. Label in the my profile tab. Preserve {selectedGuildName}; it is inserted by code. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:101 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:100 msgid "Profile customization for {selectedGuildName}" msgstr "{selectedGuildName} 的個人檔案自訂" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:97 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:96 msgid "Profile customization form" msgstr "個人檔案自訂表單" @@ -25775,7 +25733,7 @@ msgid "Profile type" msgstr "個人檔案類型" #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:77 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:76 msgid "Profile updated" msgstr "個人檔案已更新" @@ -25812,7 +25770,7 @@ msgstr "偵測到新音訊裝置時提示" #. Settings search entry label. Also used as a search synonym in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Short label in the my profile tab. Keep it concise. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:142 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:141 #: src/features/user/components/settings_utils/search_index/MyProfileIndex.ts:177 #: src/features/user/components/settings_utils/section_registry/PrivacySafetySections.ts:160 msgid "Pronouns" @@ -25842,11 +25800,6 @@ msgstr "請提供您要檢舉對象的使用者 ID 或使用者名稱。" msgid "Provide your full legal name for the declaration." msgstr "請提供您的完整法定姓名以進行聲明。" -#. Label for an integration provider choice. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 -msgid "Provider" -msgstr "供應商" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/VoiceVideoSections.ts:90 msgid "PTT" @@ -27626,7 +27579,7 @@ msgid "Reset password" msgstr "重設密碼" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:79 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:78 msgid "Reset premium state" msgstr "重設付費狀態" @@ -27635,7 +27588,7 @@ msgstr "重設付費狀態" msgid "Reset slider to default value" msgstr "將滑桿重設為預設值" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:247 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:229 msgid "Reset socket" msgstr "重設 socket 連線" @@ -27684,7 +27637,7 @@ msgid "Reset zoom" msgstr "重設縮放" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:112 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:111 msgid "Resetting premium state..." msgstr "正在重設付費狀態…" @@ -28315,7 +28268,7 @@ msgid "Run the instance as one community instead of many. This can only be enabl msgstr "將此實例做為單一社群執行,而非多個社群。此選項只能在現在的設定過程中啟用。" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:100 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:99 msgid "Runtime utilities" msgstr "執行階段工具" @@ -29103,11 +29056,6 @@ msgstr "已點擊「次要」按鈕。" msgid "Secret" msgstr "密鑰" -#. Label for a CAPTCHA secret key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1020 -msgid "Secret key" -msgstr "祕密金鑰" - #. Settings search entry label. Names the settings search entry in the settings UI. #. Short label in the secrets section. Keep it concise. Keep the tone plain and specific. #: src/features/user/components/modals/tabs/applications_tab/application_detail/SecretsSection.tsx:11 @@ -29925,7 +29873,7 @@ msgid "Set up authenticator app" msgstr "設定驗證器應用程式" #. Option for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:953 +#: src/features/app/components/setup/SetupWizardSteps.tsx:946 msgid "Set up later" msgstr "稍後設定" @@ -30427,7 +30375,7 @@ msgstr "顯示內嵌的私訊列表" msgid "Show just the typing indicator without avatars" msgstr "只顯示正在輸入提示,不顯示大頭貼" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:308 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:284 msgid "Show keyboard mode intro" msgstr "顯示鍵盤模式介紹" @@ -30538,7 +30486,7 @@ msgstr "顯示 Neko" msgid "Show new device alerts" msgstr "顯示新裝置提醒" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:282 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:264 msgid "Show new device modal" msgstr "顯示新裝置彈出視窗" @@ -30820,7 +30768,7 @@ msgid "Signed-in devices" msgstr "已登入的裝置" #. Label for Bluesky OAuth signing key ID input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1077 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1051 msgid "Signing key ID" msgstr "簽署金鑰 ID" @@ -30910,11 +30858,6 @@ msgstr "單行" msgid "Single user (all statuses)" msgstr "單一使用者(所有狀態)" -#. Label for a CAPTCHA site key input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 -msgid "Site key" -msgstr "網站金鑰" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/DesktopSettingsIndex.ts:98 @@ -30964,7 +30907,7 @@ msgid "Skip the system leave notice — nobody gets pinged." msgstr "略過離開群組的系統訊息,不會有人收到通知。" #. Description for deferring an optional setup wizard integration. -#: src/features/app/components/setup/SetupWizardSteps.tsx:957 +#: src/features/app/components/setup/SetupWizardSteps.tsx:950 msgid "Skip this now and configure it from the admin panel." msgstr "現在略過,並從管理員面板進行設定。" @@ -31212,17 +31155,17 @@ msgid "SMS verification is unavailable right now. Try again later or contact sup msgstr "目前無法進行簡訊驗證。請稍後再試或聯絡客服。" #. Success message after validating SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1045 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1019 msgid "SMTP connection verified." msgstr "SMTP 連線已驗證。" #. Label for SMTP host input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1033 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1007 msgid "SMTP host" msgstr "SMTP 主機" #. Failure message after validating SMTP credentials when the server returns no error detail. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1049 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1023 msgid "SMTP validation failed." msgstr "SMTP 驗證失敗。" @@ -31402,7 +31345,7 @@ msgstr "發生錯誤。請稍後再試。" #. Inline error in the web deep-link prompt when opening the desktop app fails. #. Toast error shown when the mature content check request fails unexpectedly. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:18 -#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:580 +#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:576 #: src/features/auth/flow/DesktopDeepLinkPrompt.tsx:31 msgid "Something went wrong. Try again." msgstr "發生錯誤。請再試一次。" @@ -32099,6 +32042,11 @@ msgstr "仍在建立索引中,請稍後再查看" msgid "Still Neko" msgstr "靜止 Neko" +#. Small toast shown only when an automatic background check before sign-in, sign-up or a similar request takes more than a couple of seconds. No user action needed. Keep it short and calm. +#: src/features/auth/altcha/CaptchaInterceptor.ts:13 +msgid "Still working on it…" +msgstr "仍在處理中…" + #. Stop-recording button label in the desktop voice message composer. #: src/features/voice/components/VoiceMessageComposerModal.tsx:65 msgid "Stop" @@ -33013,7 +32961,7 @@ msgid "Terms of service" msgstr "服務條款" #. Label for Bluesky OAuth terms URL input. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1069 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1043 msgid "Terms URL" msgstr "條款網址" @@ -33023,7 +32971,7 @@ msgid "Terrorism or violent extremism" msgstr "恐怖主義或暴力極端主義" #. Button that validates SMTP credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1041 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1015 msgid "Test SMTP" msgstr "測試 SMTP" @@ -33800,7 +33748,7 @@ msgid "This clears quick CSS, imported themes, uploaded assets, and local file r msgstr "這會清除此裝置上的快速 CSS、已匯入的主題、已上傳的素材和本機檔案參考。" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:83 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:82 msgid "This clears your backend premium state entirely, including premium type, billing metadata, and override flags." msgstr "這會完全清除您的後端進階方案狀態,包含方案類型、帳務中繼資料和覆寫標記。" @@ -34200,7 +34148,7 @@ msgid "This message no longer exists." msgstr "此訊息已不存在。" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:130 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:129 msgid "This nickname will only be visible in this community" msgstr "這個暱稱只會在此社群中顯示" @@ -34277,12 +34225,12 @@ msgid "This removes all custom CSS overrides. Theme files in your library are no msgstr "這會移除所有自訂 CSS 覆寫。您主題庫中的主題檔案不受影響。" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:50 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:49 msgid "This removes all previously authorized IP addresses on your account. The next login from any IP will require email verification." msgstr "這會移除您帳號中所有先前已授權的 IP 位址。下次從任何 IP 登入時,都需要進行電子郵件驗證。" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:67 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:66 msgid "This removes all trusted domains. You will see the external link warning for all domains again." msgstr "這會移除所有信任的網域。您將會再次看到所有網域的外部連結警告。" @@ -34949,7 +34897,7 @@ msgstr "在 Linux 上,系統匣圖示的變更只有在重新啟動後才會 msgid "Trending GIFs" msgstr "熱門 GIF" -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:383 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:359 msgid "Trigger React crash" msgstr "觸發 React 當機" @@ -35008,7 +34956,7 @@ msgid "Trusted domains" msgstr "信任的網域" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. -#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:55 +#: src/features/channel/components/channel_header_components/developer_tools/ToolsMenu.tsx:54 msgid "Trusted domains cleared." msgstr "已清除信任的網域。" @@ -35054,7 +35002,6 @@ msgid "Try a different variable name or clear the search." msgstr "請嘗試不同的變數名稱或清除搜尋。" #. Generic action label for retrying a failed or interrupted operation. -#: src/features/auth/components/AltchaVerification.tsx:53 #: src/features/auth/flow/AuthRouteLoadError.tsx:22 #: src/features/i18n/utils/CommonMessageDescriptors.ts:75 msgid "Try again" @@ -35132,10 +35079,6 @@ msgstr "改用安全金鑰或通行金鑰" msgid "Try sending your message again." msgstr "請再試一次傳送訊息。" -#: src/features/auth/components/modals/CaptchaModal.tsx:177 -msgid "Try Turnstile instead" -msgstr "改用 Turnstile 驗證" - #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/section_registry/SharedDescriptors.ts:135 msgid "TTS" @@ -36890,7 +36833,7 @@ msgid "Use this when troubleshooting the client or collecting logs. It may add v msgstr "當您在排解用戶端問題或收集日誌時使用此功能。這可能會在目前用戶端的瀏覽器主控台中新增詳細訊息。" #. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1037 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1011 msgid "Use TLS" msgstr "使用 TLS" @@ -37056,7 +36999,7 @@ msgstr "使用者音量" #. Generic form-field label for a username. #. Label for SMTP username input. #. Settings search entry label. Also used as a search synonym in the settings search bar. -#: src/features/app/components/setup/SetupWizardSteps.tsx:1035 +#: src/features/app/components/setup/SetupWizardSteps.tsx:1009 #: src/features/i18n/utils/CommonMessageDescriptors.ts:572 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:218 #: src/features/user/components/modals/tabs/my_profile_tab/MyProfileTabUsernameSection.tsx:56 @@ -37337,11 +37280,6 @@ msgstr "驗證電話號碼" msgid "Verify phone number form" msgstr "驗證電話號碼表單" -#. Short label in the authentication captcha modal. Keep the tone plain and specific. -#: src/features/auth/components/modals/CaptchaModal.tsx:17 -msgid "Verify you're human" -msgstr "驗證您是真人" - #. Title of the error modal shown when an unverified account tries to start a DM. #. Title shown when an unverified account cannot start a DM or group DM. #: src/features/app/components/alerts/DmActionErrorModal.tsx:40 @@ -37369,22 +37307,22 @@ msgid "Verify your email before adding an authenticator app." msgstr "請先驗證您的電子郵件,然後再新增驗證器應用程式。" #. Description text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:117 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:116 msgid "Verify your email before changing your community nickname, avatar, banner, bio, pronouns, or accent color." msgstr "請先驗證您的電子郵件,才能更改社群暱稱、大頭貼、橫幅、個人簡介、代名詞或強調色。" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:121 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:120 msgid "Verify your email before changing your username, display name, avatar, banner, bio, pronouns, time zone, or {premiumProductName} badge privacy." msgstr "請先驗證您的電子郵件,然後再變更您的使用者名稱、顯示名稱、大頭貼、橫幅、個人簡介、代名詞、時區或 {premiumProductName} 徽章隱私設定。" #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:85 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:84 msgid "Verify your email before editing this community profile. You can still preview it here." msgstr "請先驗證您的電子郵件,才能編輯這個社群個人檔案。您仍然可以在這裡預覽。" #. Description text in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:89 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:88 msgid "Verify your email before editing your profile. You can still preview it here." msgstr "請先驗證您的電子郵件,然後再編輯個人檔案。您仍然可以在這裡預覽。" @@ -37416,12 +37354,12 @@ msgid "Verify your email to continue using {productName}." msgstr "請驗證您的電子郵件,以繼續使用 {productName}。" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:109 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:108 msgid "Verify your email to edit this community profile" msgstr "請驗證您的電子郵件以編輯此社群個人檔案" #. Label in the my profile tab. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:113 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:112 msgid "Verify your email to edit your profile" msgstr "請驗證您的電子郵件以編輯個人檔案" @@ -38398,10 +38336,6 @@ msgstr "我們在巴西調降了 {premiumProductName} 的價格。現在每月 msgid "We need one verification step before you continue. This helps protect accounts and keep spam off {productName}." msgstr "在您繼續之前,我們需要一個驗證步驟。這有助於保護帳號並防止垃圾訊息出現在 {productName} 上。" -#: src/features/auth/components/modals/CaptchaModal.tsx:128 -msgid "We need to make sure you're not a bot. Complete the verification below." -msgstr "我們需要確認您不是機器人。請完成下方的驗證。" - #. Required-action modal intro text when both email and phone verification are required. #: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:216 msgid "We need two verification steps before you continue. We will show one step at a time." @@ -39256,7 +39190,7 @@ msgid "You can't befriend yourself" msgstr "您無法將自己新增為朋友" #. Label in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:134 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:133 msgid "You can't change your nickname here" msgstr "您無法在這裡變更暱稱" @@ -39506,7 +39440,7 @@ msgid "You have unsaved changes." msgstr "您有未儲存的變更。" #. Warning text in the my profile tab. Keep the tone plain and specific. -#: src/features/user/components/modals/tabs/MyProfileTab.tsx:81 +#: src/features/user/components/modals/tabs/MyProfileTab.tsx:80 msgid "You have unsaved changes. Save or reset before leaving." msgstr "您有未儲存的變更。請先儲存或重設,再離開。" @@ -40031,10 +39965,6 @@ msgstr "您的操作未能完成,因為系統偵測到有安全疑慮。如果 msgid "Your application is pending review. You can still update your listing details or withdraw the application." msgstr "您的申請正在審核中。您仍然可以更新刊登資訊或撤回申請。" -#: src/features/auth/components/AltchaVerification.tsx:50 -msgid "Your browser couldn't finish the check." -msgstr "您的瀏覽器無法完成驗證。" - #. Body of the browser-audio-required modal explaining why the user must click before audio can play. #: src/features/voice/components/modals/AudioPlaybackPermissionModal.tsx:12 msgid "Your browser requires user interaction before audio can be played. Click the button below to enable voice chat." @@ -40386,7 +40316,7 @@ msgid "YouTube enrichment" msgstr "YouTube 豐富預覽" #. Setup wizard title for YouTube integration credentials. -#: src/features/app/components/setup/SetupWizardSteps.tsx:977 +#: src/features/app/components/setup/SetupWizardSteps.tsx:970 msgid "YouTube previews" msgstr "YouTube 預覽" diff --git a/fluxer_app/src/features/platform/transport/RestTransport.ts b/fluxer_app/src/features/platform/transport/RestTransport.ts index 033031ea1..0338f7919 100644 --- a/fluxer_app/src/features/platform/transport/RestTransport.ts +++ b/fluxer_app/src/features/platform/transport/RestTransport.ts @@ -35,6 +35,7 @@ const SUDO_VERIFICATION_ERROR_FIELDS: ReadonlySet = new Set([ ]); type RestMode = NonNullable; +type PlanOptions = RestRequestOptions & {skipIntercept?: boolean}; type BodyShape = | {tag: 'empty'} | {tag: 'json'; payload: string} @@ -49,7 +50,6 @@ interface RuntimeState { defaultRetries: number; authProvider: () => string | null; sudo: SudoBindings | null; - prepare?: RestClientHooks['prepareRequest']; globalIntercept?: RestInterceptor; pacing: Map; } @@ -69,7 +69,7 @@ interface Plan { sudoApplied: boolean; signal?: AbortSignal; onProgress?: (event: ProgressEvent) => void; - options: RestRequestOptions; + options: PlanOptions; } type TransportOutcome = @@ -168,7 +168,6 @@ export class RestClient { } installHooks(hooks: RestClientHooks): void { - this.state.prepare = hooks.prepareRequest; this.state.globalIntercept = hooks.intercept; } @@ -277,7 +276,7 @@ async function runRetryLoop( state: RuntimeState, method: HttpMethod, path: string, - options: RestRequestOptions, + options: PlanOptions, sudoApplied: boolean, attempt: number, ): Promise> { @@ -296,7 +295,6 @@ async function runRetryLoop( } } const handle = createHandle(plan.signal); - state.prepare?.(handle); const outcome = await performTransport(plan, handle); const decision = await reactToOutcome(state, plan, outcome); switch (decision.next) { @@ -323,7 +321,7 @@ function composePlan( state: RuntimeState, method: HttpMethod, path: string, - options: RestRequestOptions, + options: PlanOptions, sudoApplied: boolean, ): Plan { const url = resolveUrl(state, path, options.query); @@ -655,12 +653,10 @@ async function reactToOutcome(state: RuntimeState, plan: Plan, outcome: Transpor if (reply.status === 429) { return reactToRateLimit(state, plan, reply); } - const interceptor = plan.options.intercept ?? state.globalIntercept; + const interceptor = plan.options.skipIntercept ? undefined : state.globalIntercept; if (interceptor) { const intercepted = await invokeInterceptor(state, plan, interceptor, reply); - if (intercepted.next !== 'passthrough') { - return intercepted.decision; - } + if (intercepted) return intercepted; } if (RETRYABLE_STATUSES.has(reply.status)) { return {next: 'retry-after', delayMs: 0, mode: 'backoff'}; @@ -719,61 +715,27 @@ function extractMessage(body: unknown): string | undefined { return typeof m === 'string' ? m : undefined; } -type InterceptorFold = {next: 'passthrough'} | {next: 'used'; decision: AttemptDecision}; - async function invokeInterceptor( state: RuntimeState, plan: Plan, interceptor: RestInterceptor, reply: RestResponse, -): Promise { - let captured: Error | null = null; - let chained: Promise | null = null; - const retry = (extra: Record): Promise => { - const augmented: RestRequestOptions = { - ...plan.options, - headers: {...(plan.options.headers ?? {}), ...extra}, - }; - chained = runRetryLoop(state, plan.method, plan.path, augmented, plan.sudoApplied, 0); - return chained; - }; - const reject = (err: Error) => { - captured = err; - }; - let result: boolean | undefined | Promise; +): Promise { + const retry = (extra: Record): Promise => + runRetryLoop( + state, + plan.method, + plan.path, + {...plan.options, headers: {...(plan.options.headers ?? {}), ...extra}, skipIntercept: true}, + plan.sudoApplied, + 0, + ); try { - result = interceptor(reply, retry, reject); + const finalReply = await interceptor(reply, retry); + return finalReply === undefined ? null : {next: 'deliver', reply: finalReply}; } catch (err) { - return {next: 'used', decision: {next: 'fail', error: err}}; + return {next: 'fail', error: err}; } - if (captured) { - return {next: 'used', decision: {next: 'fail', error: captured}}; - } - if (result instanceof Promise) { - try { - const finalReply = await result; - if (captured) { - return {next: 'used', decision: {next: 'fail', error: captured}}; - } - if (finalReply === undefined && chained) { - return {next: 'used', decision: {next: 'deliver', reply: await chained}}; - } - if (finalReply === undefined) { - return {next: 'passthrough'}; - } - return {next: 'used', decision: {next: 'deliver', reply: finalReply}}; - } catch (err) { - return {next: 'used', decision: {next: 'fail', error: err}}; - } - } - if (result === true && chained) { - try { - return {next: 'used', decision: {next: 'deliver', reply: await chained}}; - } catch (err) { - return {next: 'used', decision: {next: 'fail', error: err}}; - } - } - return {next: 'passthrough'}; } function hasContentBlockedCode(body: unknown): boolean { diff --git a/fluxer_app/src/features/platform/types/TransportTypes.ts b/fluxer_app/src/features/platform/types/TransportTypes.ts index 26ad99614..0dc8b6a24 100644 --- a/fluxer_app/src/features/platform/types/TransportTypes.ts +++ b/fluxer_app/src/features/platform/types/TransportTypes.ts @@ -26,7 +26,6 @@ interface RestRequestOptionsBase { retries?: number; signal?: AbortSignal; onProgress?: (event: ProgressEvent) => void; - intercept?: RestInterceptor; suppressContentBlockedModal?: boolean; } @@ -44,8 +43,7 @@ export interface RestResponse { export type RestInterceptor = ( reply: RestResponse, retry: (extraHeaders: Record) => Promise, - reject: (error: Error) => void, -) => boolean | undefined | Promise; +) => Promise | undefined; export interface SudoBindings { tokenProvider: () => string | null; @@ -56,7 +54,6 @@ export interface SudoBindings { } export interface RestClientHooks { - prepareRequest?: (handle: RestRequestHandle) => void; intercept?: RestInterceptor; } diff --git a/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppScreenShareWiring.test.ts b/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppScreenShareWiring.test.ts index d8d249904..1a9921e40 100644 --- a/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppScreenShareWiring.test.ts +++ b/fluxer_app/src/features/voice/engine/v2/VoiceEngineV2AppScreenShareWiring.test.ts @@ -313,7 +313,7 @@ const BOOTSTRAP_ENDPOINT = 'https://primary.test/api'; webapp: 'https://app.primary.test', upload_relay: 'https://upload.primary.test', }, - captcha: {provider: 'none', hcaptcha_site_key: null, turnstile_site_key: null}, + captcha: {provider: 'none'}, features: { voice_enabled: false, stripe_enabled: false, diff --git a/fluxer_app_proxy/src/csp.rs b/fluxer_app_proxy/src/csp.rs index b40e316a5..a0f559a4b 100644 --- a/fluxer_app_proxy/src/csp.rs +++ b/fluxer_app_proxy/src/csp.rs @@ -25,9 +25,6 @@ pub struct RuntimeCspSources { const FRAME_SOURCES: &[&str] = &[ "https://www.youtube.com/embed/", "https://www.youtube.com/s/player/", - "https://hcaptcha.com", - "https://*.hcaptcha.com", - "https://challenges.cloudflare.com", ]; const IMAGE_SOURCES: &[&str] = &[ @@ -45,17 +42,10 @@ const MEDIA_SOURCES: &[&str] = &[ "https://fluxer.media", ]; -const SCRIPT_SOURCES: &[&str] = &[ - "https://*.fluxer.app", - "https://hcaptcha.com", - "https://*.hcaptcha.com", - "https://challenges.cloudflare.com", -]; +const SCRIPT_SOURCES: &[&str] = &["https://*.fluxer.app"]; const STYLE_SOURCES: &[&str] = &[ "https://*.fluxer.app", - "https://hcaptcha.com", - "https://*.hcaptcha.com", "https://fonts.googleapis.com", "https://api.fonts.coollabs.io", ]; @@ -72,9 +62,6 @@ const CONNECT_SOURCES: &[&str] = &[ "https://*.fluxer.media", "wss://*.fluxer.media", "https://fluxer-uploads.ewr1.vultrobjects.com", - "https://hcaptcha.com", - "https://*.hcaptcha.com", - "https://challenges.cloudflare.com", "https://fluxerstatus.com", "https://fluxer.media", ]; @@ -395,6 +382,13 @@ mod tests { assert!(!csp.contains("nonce-")); } + #[test] + fn build_csp_allows_no_third_party_captcha_hosts() { + let csp = build_csp(&default_csp_config(), "test-nonce", &runtime_sources()); + assert!(!csp.contains("hcaptcha")); + assert!(!csp.contains("challenges.cloudflare.com")); + } + #[test] fn csp_no_double_spaces_or_trailing_semicolons() { let config = default_csp_config(); diff --git a/fluxer_docs/scripts/VerifyDocsCoverage.ts b/fluxer_docs/scripts/VerifyDocsCoverage.ts index 4cf921c91..89f8e330d 100644 --- a/fluxer_docs/scripts/VerifyDocsCoverage.ts +++ b/fluxer_docs/scripts/VerifyDocsCoverage.ts @@ -1513,7 +1513,7 @@ console.log('self-hosting guide against deploy/self-hosting'); } } - const ENV_VALUE_FLOOR = 19; + const ENV_VALUE_FLOOR = 17; const ENV_VALUE_UNSET = 'unset'; let inEnvValueTable = false; let envEntry: string | null = null; diff --git a/fluxer_docs/src/content/docs/admin-api/instance.mdx b/fluxer_docs/src/content/docs/admin-api/instance.mdx index ab1d2ceb6..eba82db6d 100644 --- a/fluxer_docs/src/content/docs/admin-api/instance.mdx +++ b/fluxer_docs/src/content/docs/admin-api/instance.mdx @@ -36,7 +36,7 @@ Missing settings use the defaults documented below. Invalid stored configuration | gateway_rollout | [Gateway rollout configuration](#gateway-rollout-configuration-object) object | Gateway admission and dispatch tuning | | push_relay | [push relay configuration](#push-relay-configuration-object) object | Operator consent to the Fluxer-run push relay | | domain_migration | [domain migration configuration](#domain-migration-configuration-object) object | Web domain migration rollout | -| altcha_captcha | [ALTCHA captcha configuration](#altcha-captcha-configuration-object) object | ALTCHA proof-of-work captcha rollout | +| captcha | [captcha configuration](#captcha-configuration-object) object | ALTCHA proof-of-work captcha settings | | experiment_delivery | [experiment delivery configuration](#experiment-delivery-configuration-object) object | Cadence every client polls the experiments route on | | registration | [registration configuration](#registration-configuration-object) object | Registration policy, issued URLs, and pending registrations | | self_hosted | boolean | Whether the deployment runs in self-hosted mode | @@ -144,34 +144,22 @@ Only the official web client acts on this configuration. On any other instance i Setting `enabled` to false stops new migrations and also stops forwarding from the legacy origin for clients that already moved. Excluding an account only stops a migration that has not started yet. ::: -## ALTCHA captcha configuration object +## Captcha configuration object -The instance rollout that replaces the configured captcha provider with an ALTCHA proof-of-work challenge the API issues and verifies itself. [Experiments](/http-api/experiments/#altcha-captcha-assignment-object) defines what a signed-in client resolves from it, and [CAPTCHA handling](/topics/captcha/#altcha-proof-of-work) defines the challenge exchange. +The ALTCHA proof-of-work check that the API issues and verifies itself on gated operations. [CAPTCHA handling](/topics/captcha/) defines the challenge exchange and lists the gated operations. ### Structure | Field | Type | Description | | --- | --- | --- | -| enabled | boolean | Whether the rollout runs at all (default false) | -| config_version | integer | Revision counter, raised by Fluxer and never accepted from a request | -| rollout_basis_points | integer | Share of accounts the rollout selects, in basis points (0-10000, default 0) | -| rollout_salt | string | Salt of the sampling hash (1-64 printable ASCII characters, default `altcha-captcha-v1`) | -| included_user_ids | array[snowflake] | Accounts the rollout always selects, up to 1000 entries (default empty) | -| included_guild_ids | array[snowflake] | Guilds whose members the rollout always selects, up to 1000 entries (default empty) | -| include_premium_users | boolean | Whether the rollout always selects accounts with active premium (default false) | -| excluded_user_ids | array[snowflake] | Accounts the rollout never selects, up to 1000 entries (default empty) | -| anonymous_enabled | boolean | Whether logged-out requests get ALTCHA (default false) | -| cost | integer | PBKDF2 iterations per solving attempt (1000-100000, default 5000) | -| max_counter | integer | Upper bound of the hidden counter a client searches for (100-1000000, default 10000) | +| enabled | boolean | Whether gated operations require a solved challenge (default true) | +| cost | integer | PBKDF2 iterations per solving attempt (1000-20000, default 5000) | +| max_counter | integer | Upper bound of the hidden counter a client searches for (100-20000, default 1000) | -Every field is present on read. An absent document or missing field uses the defaults above. - -`excluded_user_ids` wins over every other rule. Otherwise the rollout selects an account in `included_user_ids`, a member of a guild in `included_guild_ids`, or a premium account while `include_premium_users` is true, whatever `rollout_basis_points` says. `anonymous_enabled` has no effect on signed-in requests, and the account rules have no effect on logged-out ones. +Every field is present on read. An absent document or missing field uses the defaults above, so the check is on until an administrator sets `enabled` to false. Setting `enabled` to false turns the check off for the whole instance. Phone sends that the [phone verification service](/http-api/users/phone-verification/#send-phone-verification) challenges are refused instead. Each challenge hides its counter between half of `max_counter` and `max_counter`, and a client tries counters from 0 upward. Solve time grows with `cost` times `max_counter`. Fluxer spends one attempt at `cost` to issue each challenge. -The rollout only changes which provider answers a captcha that is already required. While the instance captcha provider is `none`, it has no effect. - ## Experiment delivery configuration object How often a client polls [Get experiment assignments](/http-api/experiments/#get-experiment-assignments), and how widely those polls are spread. The setting is instance-wide and applies to every experiment at once, so adding an experiment adds no second cadence to tune. @@ -340,26 +328,9 @@ Every provider reports its stored settings, a `_set` boolean in place of each se | --- | --- | --- | | gif | object | `klipy_api_key_set` and `effective_available` | | youtube | object | `api_key_set` and `effective_available` | -| captcha | [captcha integration](#captcha-integration-object) object | CAPTCHA provider settings | | email | [email integration](#email-integration-object) object | Outbound email settings | | bluesky | [Bluesky integration](#bluesky-integration-object) object | Bluesky client settings | -## Captcha integration object - -CAPTCHA provider settings, and the provider resolved from them. - -### Structure - -| Field | Type | Description | -| --- | --- | --- | -| provider | ?string | Operator override of `hcaptcha`, `turnstile`, or `none`, or null for no override | -| effective_provider | string | Provider in use, one of `hcaptcha`, `turnstile`, or `none` | -| hcaptcha_site_key | ?string | hCaptcha site key | -| hcaptcha_secret_key_set | boolean | Whether an hCaptcha secret is stored or supplied by deployment configuration | -| turnstile_site_key | ?string | Turnstile site key | -| turnstile_secret_key_set | boolean | Whether a Turnstile secret is stored or supplied by deployment configuration | -| effective_enabled | boolean | Whether CAPTCHA verification is in force | - ## Email integration object Outbound email settings, and the provider resolved from them. @@ -622,11 +593,11 @@ The body has one optional object for each section. Fluxer leaves an absent secti | gateway_rollout? | object | Any subset of the [Gateway rollout configuration](#gateway-rollout-configuration-object) fields, each bound as documented there | | push_relay? | object | `relay_consent_accepted` from the [push relay configuration](#push-relay-configuration-object) | | domain_migration? | object | Any subset of the [domain migration](#domain-migration-configuration-object) fields | -| altcha_captcha? | object | Any subset of the [ALTCHA captcha](#altcha-captcha-configuration-object) fields | +| captcha? | object | Any subset of the [captcha configuration](#captcha-configuration-object) fields | | experiment_delivery? | object | Any subset of the [experiment delivery](#experiment-delivery-configuration-object) fields | | registration? | object | `mode` and `admin_registration_urls_enabled` | | app_public?2 | object | `branding`, `setup`, `legal`, and `registration` sub-objects, each merged field by field | -| integrations?3 | object | `gif`, `youtube`, `captcha`, `email`, and `bluesky` sub-objects, the last of which also has the `keys` array | +| integrations?3 | object | `gif`, `youtube`, `email`, and `bluesky` sub-objects, the last of which also has the `keys` array | | media? | object | `attachment_decay` overrides, each nullable to restore the deployment default | | policy? | [instance policy update](#instance-policy-update-structure) object | Community, direct message, premium, and gating policy | | billing?4 | object | Stored [instance billing](#instance-billing-object) fields, with `stripe_secret_key` and `stripe_webhook_secret` for the secrets | @@ -639,11 +610,11 @@ The body has one optional object for each section. Fluxer leaves an absent secti `domain_migration` takes every [domain migration configuration](#domain-migration-configuration-object) field except `config_version`, each bound as documented there. Fluxer raises `config_version` by one on each request that supplies at least one of them. A section that is absent, or present with no field set, writes nothing and leaves `config_version` alone. -`altcha_captcha` works the same way, over the [ALTCHA captcha configuration](#altcha-captcha-configuration-object) fields and its own `config_version`. +`captcha` takes any subset of the [captcha configuration](#captcha-configuration-object) fields, each bound as documented there. Fluxer merges the supplied fields over the stored ones. The section has no `config_version`. `experiment_delivery` takes both [experiment delivery configuration](#experiment-delivery-configuration-object) fields, each bound as documented there. It is a section of its own, so a write to it changes no `config_version` and changes no assignment, only the cadence on which clients ask for one. -3 A secret such as `klipy_api_key`, `api_key`, `hcaptcha_secret_key`, `turnstile_secret_key`, or the SMTP `password` is written when supplied and left alone when absent. `integrations.bluesky.keys` is the only way to write the Bluesky signing keys counted as `bluesky.key_count`. It takes up to 8 entries of `kid` (1-255 characters) and nullable `private_key` (up to 10000 characters), and replaces the stored key set outright +3 A secret such as `klipy_api_key`, `api_key`, or the SMTP `password` is written when supplied and left alone when absent. `integrations.bluesky.keys` is the only way to write the Bluesky signing keys counted as `bluesky.key_count`. It takes up to 8 entries of `kid` (1-255 characters) and nullable `private_key` (up to 10000 characters), and replaces the stored key set outright 4 Accepted only on a self-hosted deployment. A hosted deployment rejects the section, and `app_public.branding.premium_product_name` and `premium_info_url`, with 400 `INVALID_FORM_BODY`. A Stripe secret, `enabled`, `automatic_tax`, `tax_id_collection` and `terms_consent_required` are written when supplied, cleared by null, and left alone when absent. A null `enabled` follows `FLUXER_STRIPE_ENABLED`. `prices`, `country_currencies`, and `legacy_prices` replace the stored value outright, a price slot left out is stored as null, and an empty `prices` object restores the deployment catalogue. A price ID is `price_` followed by letters and digits. A currency is three upper-case letters and a country code is two @@ -678,7 +649,7 @@ On a self-hosted deployment, billing and the `everyone` premium mode exclude eac | 400 | [error response](/admin-api/#error-response) | A policy transition is refused, returned as `INSTANCE_POLICY_TRANSITION_NOT_ALLOWED` | :::caution[Sections are applied one after another] -The order is `gateway_rollout`, `push_relay`, `domain_migration`, `altcha_captcha`, `experiment_delivery`, `sso`, `registration`, `app_public` branding, legal, and registration fields, `integrations`, `media`, `policy`, `billing`, and finally `app_public.setup`. A failure part way through leaves the earlier sections written. +The order is `gateway_rollout`, `push_relay`, `domain_migration`, `captcha`, `experiment_delivery`, `sso`, `registration`, `app_public` branding, legal, and registration fields, `integrations`, `media`, `policy`, `billing`, and finally `app_public.setup`. A failure part way through leaves the earlier sections written. ::: ### Side effects diff --git a/fluxer_docs/src/content/docs/http-api/applications.mdx b/fluxer_docs/src/content/docs/http-api/applications.mdx index 6ecf6890f..ef2dbbab3 100644 --- a/fluxer_docs/src/content/docs/http-api/applications.mdx +++ b/fluxer_docs/src/content/docs/http-api/applications.mdx @@ -291,12 +291,9 @@ An unclaimed account cannot create an application. An account is unclaimed while | Field | Type | Description | | --- | --- | --- | -| X-Captcha-Token?1 | string | The CAPTCHA proof for the request | -| X-Captcha-Type?2 | string | The CAPTCHA provider to verify against, either `hcaptcha` or `turnstile` | +| X-Captcha-Token?1 | string | The solved ALTCHA challenge, see [CAPTCHA handling](/topics/captcha/) | -1 A missing proof returns 400 `CAPTCHA_REQUIRED` and a rejected proof returns 400 `INVALID_CAPTCHA`. Fluxer skips verification when CAPTCHA is disabled for the instance, when the account has the CAPTCHA exemption flag, or when the caller's email address is on an exempt domain, as described by [CAPTCHA handling](/topics/captcha/) - -2 Fluxer verifies against the instance's configured provider when the header is absent +1 A missing token returns 400 `CAPTCHA_REQUIRED` and a rejected token returns 400 `INVALID_CAPTCHA`, each with a new challenge. Fluxer skips verification when the check is off for the instance, when the account has the CAPTCHA exemption flag, or when the caller's email address is on an exempt domain ### JSON body diff --git a/fluxer_docs/src/content/docs/http-api/authentication.mdx b/fluxer_docs/src/content/docs/http-api/authentication.mdx index b71395c21..60104d6d7 100644 --- a/fluxer_docs/src/content/docs/http-api/authentication.mdx +++ b/fluxer_docs/src/content/docs/http-api/authentication.mdx @@ -506,21 +506,18 @@ Approval mode registration instead returns 403 `REGISTRATION_PENDING_APPROVAL` a Creates an ordinary account. Returns an [authentication token response](#authentication-token-response) when the instance admits the account immediately and a [registration pending approval response](#registration-pending-approval-response-object) when it does not. Emits a [Guild Member Add](/gateway/events/#guild-member-add) Gateway event for each guild the new account joins through an invite or through the instance's single community guild. -Registration verifies [CAPTCHA](/topics/captcha/) when CAPTCHA is enabled. It permits 3 attempts per hour for each client IP address and 15 per hour for each client subnet, which is the IPv4 /24 or IPv6 /48 network. A supplied email address permits 3 attempts per 15 minutes of its own. Those allowances are separate from the route bucket, and only a deployment with `dev.relax_registration_rate_limits` set to true disables them. +Registration verifies a [CAPTCHA](/topics/captcha/). It permits 3 attempts per hour for each client IP address and 15 per hour for each client subnet, which is the IPv4 /24 or IPv6 /48 network. A supplied email address permits 3 attempts per 15 minutes of its own. Those allowances are separate from the route bucket, and only a deployment with `dev.relax_registration_rate_limits` set to true disables them. ### Request headers | Field | Type | Description | | --- | --- | --- | -| X-Captcha-Token?1 | string | The proof issued by the CAPTCHA provider | -| X-Captcha-Type?2 | string | The provider that issued the proof, either `hcaptcha` or `turnstile` | -| Accept-Language?3 | string | The language tag that selects the locale stored on the new account | +| X-Captcha-Token?1 | string | The solved ALTCHA challenge, see [CAPTCHA handling](/topics/captcha/) | +| Accept-Language?2 | string | The language tag that selects the locale stored on the new account | -1 A missing proof returns 400 `CAPTCHA_REQUIRED` and a rejected proof returns 400 `INVALID_CAPTCHA`, and verification is skipped entirely when CAPTCHA is disabled for the instance +1 A missing token returns 400 `CAPTCHA_REQUIRED` and a rejected token returns 400 `INVALID_CAPTCHA`, each with a new challenge. Verification is skipped entirely while the check is off for the instance -2 Omitting the header selects the instance's configured provider - -3 The parsed locale becomes the account locale and selects the language of the verification email +2 The parsed locale becomes the account locale and selects the language of the verification email ### JSON body @@ -589,22 +586,19 @@ Approval mode registration creates no guild membership and no authentication ses Validates local email and password credentials. Authentication is not required. Returns an [authentication token response](#authentication-token-response) when no second factor and no IP approval are outstanding, and an [MFA challenge response](#mfa-challenge-response) when the account has a second factor. -Login verifies CAPTCHA when CAPTCHA is enabled. It also permits 10 attempts per client IP address in 30 minutes, keyed by the exact IPv4 address or the IPv6 /64 network, and 5 attempts per email address in 15 minutes. Every admitted attempt consumes both allowances, whether or not the credentials turn out to be correct, and a successful login clears neither. +Login verifies a [CAPTCHA](/topics/captcha/). It also permits 10 attempts per client IP address in 30 minutes, keyed by the exact IPv4 address or the IPv6 /64 network, and 5 attempts per email address in 15 minutes. Every admitted attempt consumes both allowances, whether or not the credentials turn out to be correct, and a successful login clears neither. ### Request headers | Field | Type | Description | | --- | --- | --- | -| X-Captcha-Token?1 | string | The proof issued by the CAPTCHA provider | -| X-Captcha-Type?2 | string | The provider that issued the proof, either `hcaptcha` or `turnstile` | -| X-Fluxer-Client-Properties?3 | string | The base64-encoded JSON with the reporting client's `os` | -| User-Agent?3 | string | The client string recorded on the created session and shown by [list authentication sessions](#list-authentication-sessions) | +| X-Captcha-Token?1 | string | The solved ALTCHA challenge, see [CAPTCHA handling](/topics/captcha/) | +| X-Fluxer-Client-Properties?2 | string | The base64-encoded JSON with the reporting client's `os` | +| User-Agent?2 | string | The client string recorded on the created session and shown by [list authentication sessions](#list-authentication-sessions) | -1 A missing proof returns 400 `CAPTCHA_REQUIRED` and a rejected proof returns 400 `INVALID_CAPTCHA`, and verification is skipped entirely when CAPTCHA is disabled for the instance +1 A missing token returns 400 `CAPTCHA_REQUIRED` and a rejected token returns 400 `INVALID_CAPTCHA`, each with a new challenge. Verification is skipped entirely while the check is off for the instance -2 Omitting the header selects the instance's configured provider - -3 Both values feed the [client info](#client-info-object) object recorded on the session, and `X-Fluxer-Client-Properties` is read only for a native Fluxer `User-Agent` +2 Both values feed the [client info](#client-info-object) object recorded on the session, and `X-Fluxer-Client-Properties` is read only for a native Fluxer `User-Agent` ### JSON body @@ -935,18 +929,15 @@ The operation creates one 64-character verification token bound to the account a Accepts a password recovery request for an email address. Authentication is not required. Returns 204 with no body. -Password recovery verifies CAPTCHA when CAPTCHA is enabled. Fluxer consumes both the client IP address and email address allowances before it validates the address, and exhausting either returns 429. +Password recovery verifies a [CAPTCHA](/topics/captcha/). Fluxer consumes both the client IP address and email address allowances before it validates the address, and exhausting either returns 429. ### Request headers | Field | Type | Description | | --- | --- | --- | -| X-Captcha-Token?1 | string | The proof issued by the CAPTCHA provider | -| X-Captcha-Type?2 | string | The provider that issued the proof, either `hcaptcha` or `turnstile` | +| X-Captcha-Token?1 | string | The solved ALTCHA challenge, see [CAPTCHA handling](/topics/captcha/) | -1 A missing proof returns 400 `CAPTCHA_REQUIRED` and a rejected proof returns 400 `INVALID_CAPTCHA`, and verification is skipped entirely when CAPTCHA is disabled for the instance - -2 Omitting the header selects the instance's configured provider +1 A missing token returns 400 `CAPTCHA_REQUIRED` and a rejected token returns 400 `INVALID_CAPTCHA`, each with a new challenge. Verification is skipped entirely while the check is off for the instance ### JSON body diff --git a/fluxer_docs/src/content/docs/http-api/channels.mdx b/fluxer_docs/src/content/docs/http-api/channels.mdx index 032c1ada1..07298d5db 100644 --- a/fluxer_docs/src/content/docs/http-api/channels.mdx +++ b/fluxer_docs/src/content/docs/http-api/channels.mdx @@ -568,7 +568,7 @@ Adds a user to a group direct message and returns 204 with an empty body. Emits - The caller must be a current recipient of the group, and must be friends with the target, including when the caller is a bot. - The target's group direct message admission policy must allow the caller. -- An instance with CAPTCHA enabled also requires a CAPTCHA proof. +- A solved [CAPTCHA](/topics/captcha/) challenge is required while the instance check is on. Fluxer evaluates the target's admission policy in this order. @@ -588,12 +588,9 @@ Fluxer evaluates the target's admission policy in this order. | Field | Type | Description | | --- | --- | --- | -| X-Captcha-Token?1 | string | A CAPTCHA proof | -| X-Captcha-Type?2 | string | The CAPTCHA provider, either `hcaptcha` or `turnstile` | +| X-Captcha-Token?1 | string | The solved ALTCHA challenge, see [CAPTCHA handling](/topics/captcha/) | -1 A missing proof returns 400 `CAPTCHA_REQUIRED` and a rejected proof returns 400 `INVALID_CAPTCHA`, as does a proof for a provider the instance holds no secret key for. [CAPTCHA](/topics/captcha/) states when an instance skips verification - -2 `hcaptcha` or `turnstile` selects that provider whether or not the instance configured it. The instance's configured provider is used when the header is absent or has any other value +1 A missing token returns 400 `CAPTCHA_REQUIRED` and a rejected token returns 400 `INVALID_CAPTCHA`, each with a new challenge. [CAPTCHA handling](/topics/captcha/#exemption) states when an instance skips verification ### Response diff --git a/fluxer_docs/src/content/docs/http-api/errors.md b/fluxer_docs/src/content/docs/http-api/errors.md index 56cee02b2..deb3af633 100644 --- a/fluxer_docs/src/content/docs/http-api/errors.md +++ b/fluxer_docs/src/content/docs/http-api/errors.md @@ -20,7 +20,7 @@ An OAuth2 protocol failure raised by the [OAuth2 resource](/http-api/oauth2/) an ## Supplementary members -The error code determines which supplementary members a failure has, and most codes have none. A client reads only the members documented for the code it matched. `errors` is the list of field violations. `retry_after` is the delay before another attempt is admitted. `global` is `true` on a global rate limit denial and `false` on a route one. `required_scope` is the OAuth2 scope the request is missing. `has_mfa` and `methods` are the [sudo mode](/http-api/users/mfa/#sudo-mode) proofs an account can supply. +The error code determines which supplementary members a failure has, and most codes have none. A client reads only the members documented for the code it matched. `errors` is the list of field violations. `retry_after` is the delay before another attempt is admitted. `global` is `true` on a global rate limit denial and `false` on a route one. `required_scope` is the OAuth2 scope the request is missing. `has_mfa` and `methods` are the [sudo mode](/http-api/users/mfa/#sudo-mode) proofs an account can supply. `captcha_provider` and `altcha_challenge` are the challenge described in [CAPTCHA handling](/topics/captcha/). `GLOBAL_IP_BANNED` and `GLOBAL_IP_TEMPORARILY_BANNED` have their own members: @@ -286,7 +286,7 @@ Community ownership can't be transferred to a bot ### `CAPTCHA_REQUIRED` -Captcha is required +Verification required. Try again ### `COMMUNICATION_DISABLED` @@ -506,7 +506,7 @@ Invalid bot flag ### `INVALID_CAPTCHA` -Invalid captcha +Verification failed. Try again ### `INVALID_CHANNEL_TYPE` diff --git a/fluxer_docs/src/content/docs/http-api/experiments.mdx b/fluxer_docs/src/content/docs/http-api/experiments.mdx index ccc81e3b0..df50fb20f 100644 --- a/fluxer_docs/src/content/docs/http-api/experiments.mdx +++ b/fluxer_docs/src/content/docs/http-api/experiments.mdx @@ -6,7 +6,7 @@ description: The experiment assignments envelope, the revalidation and polling c import RouteHeader from '@/components/RouteHeader.astro'; -An experiment is an instance-wide rollout that an operator configures. For each account, Fluxer works out from that configuration whether the account is in the rollout and which settings the account receives. The single route on this page resolves every experiment the server defines and returns them in one envelope, together with the polling cadence they share. This server defines `domain_migration` and `altcha_captcha`. +An experiment is an instance-wide rollout that an operator configures. For each account, Fluxer works out from that configuration whether the account is in the rollout and which settings the account receives. The single route on this page resolves every experiment the server defines and returns them in one envelope, together with the polling cadence they share. This server defines `domain_migration`. Every assignment is advice. A client that ignores one behaves as it does with the rollout off, and no route and no Gateway event reports what a client actually ran. @@ -33,7 +33,6 @@ One entry per experiment. The envelope reports this object even when it is empty | Field | Type | Description | | --- | --- | --- | | domain_migration? | [domain migration assignment](#domain-migration-assignment-object) object | The caller's web domain migration assignment | -| altcha_captcha? | [ALTCHA captcha assignment](#altcha-captcha-assignment-object) object | The caller's captcha provider assignment | Ignore unknown experiments and treat a missing experiment as off. @@ -51,20 +50,6 @@ A caller is drawn by the operator's account or guild allowlist, by having premiu Only the official web client acts on this assignment, and only on its legacy origins. Every other client ignores it. The logged-out share and the instance-wide switch are published in the [instance discovery document](/http-api/instance/#domain-migration-object) instead, because a client that holds no credential cannot read this route. -## ALTCHA captcha assignment object - -One resolution of the instance ALTCHA captcha rollout against one account. This server version writes the key on every response. - -### Structure - -| Field | Type | Description | -| --- | --- | --- | -| enabled | boolean | Whether the caller's captcha challenges are ALTCHA proof-of-work challenges | - -A caller is drawn by the operator's account or guild allowlist, by having premium when the operator includes premium users, or by the sampled share of the account population. `enabled` is false in every other case, the rollout being off included. - -The assignment is informational. The server applies the same resolution to every request that needs a captcha and names the provider in the [captcha error](/topics/captcha/#altcha-proof-of-work), so a client needs no copy of this value to answer a challenge. - ## Get experiment assignments diff --git a/fluxer_docs/src/content/docs/http-api/gifts.mdx b/fluxer_docs/src/content/docs/http-api/gifts.mdx index 72275eefa..05e4ef811 100644 --- a/fluxer_docs/src/content/docs/http-api/gifts.mdx +++ b/fluxer_docs/src/content/docs/http-api/gifts.mdx @@ -131,12 +131,9 @@ One redemption can be in flight for a code across the whole deployment, and a se | Field | Type | Description | | --- | --- | --- | -| X-Captcha-Token?1 | string | The proof issued by the CAPTCHA provider | -| X-Captcha-Type?2 | string | The CAPTCHA provider, either `hcaptcha` or `turnstile` | +| X-Captcha-Token?1 | string | The solved ALTCHA challenge, see [CAPTCHA handling](/topics/captcha/) | -1 A missing proof returns 400 `CAPTCHA_REQUIRED` and a rejected proof returns 400 `INVALID_CAPTCHA`. Verification is skipped when CAPTCHA is disabled, when the account has the exemption flag, or when the account's email address is on an exempt domain, as described by [CAPTCHA handling](/topics/captcha/) - -2 Any other value, including an omitted header, falls back to the instance's configured provider +1 A missing token returns 400 `CAPTCHA_REQUIRED` and a rejected token returns 400 `INVALID_CAPTCHA`, each with a new challenge. Verification is skipped when the check is off for the instance, when the account has the exemption flag, or when the account's email address is on an exempt domain ### Response diff --git a/fluxer_docs/src/content/docs/http-api/index.md b/fluxer_docs/src/content/docs/http-api/index.md index 770bc4064..6c5d3f8b2 100644 --- a/fluxer_docs/src/content/docs/http-api/index.md +++ b/fluxer_docs/src/content/docs/http-api/index.md @@ -95,8 +95,7 @@ These headers are accepted across resources. An operation-specific header is doc | X-Audit-Log-Reason?3 | string | Free-text reason recorded on the resulting audit log entry | | X-Fluxer-Client-Properties?4 | string | Base64-encoded JSON with the native client's `os`, read when an authentication session is created | | X-Fluxer-Sudo-Mode-JWT?5 | string | A sudo mode proof previously issued to the authenticated user | -| X-Captcha-Token?6 | string | The CAPTCHA solution issued by the selected provider | -| X-Captcha-Type?6 | string | Either `hcaptcha` or `turnstile`, selecting the provider that issued the token | +| X-Captcha-Token?6 | string | The solved ALTCHA challenge, see [CAPTCHA handling](/topics/captcha/) | | X-Request-ID?7 | string | A correlation identifier the client chooses, echoed unchanged in the response | | User-Agent? | string | The originating client description recorded on a new authentication session and on an Admin audit entry | | Origin?8 | string | The browser origin used for cross-origin negotiation and for the mutating same-host origin check | @@ -111,7 +110,7 @@ These headers are accepted across resources. An operation-specific header is doc 5 A valid token replaces the sudo proof fields in the operation body and is echoed in the response header without extending its lifetime. -6 Read only while the instance has a provider configured and the operation is gated. The handshake is defined in [CAPTCHA handling](/topics/captcha/) +6 Read only on a gated operation while the instance CAPTCHA check is on 7 A supplied value is echoed back unchanged and unvalidated diff --git a/fluxer_docs/src/content/docs/http-api/instance.mdx b/fluxer_docs/src/content/docs/http-api/instance.mdx index 38cfe9089..f97880cd2 100644 --- a/fluxer_docs/src/content/docs/http-api/instance.mdx +++ b/fluxer_docs/src/content/docs/http-api/instance.mdx @@ -106,29 +106,22 @@ A client MUST NOT upgrade a published `http` value to `https`, downgrade a publi ## CAPTCHA configuration object -Which CAPTCHA provider this deployment uses, and the site keys a client needs to render its challenge. +Whether this deployment asks for a CAPTCHA on gated operations. ### Structure | Field | Type | Description | | --- | --- | --- | -| provider1 | string | The selected [CAPTCHA provider](#captcha-providers) | -| hcaptcha_site_key2 | ?string | The configured hCaptcha site key, or null when none is configured | -| turnstile_site_key2 | ?string | The configured Turnstile site key, or null when none is configured | - -1 The value is `none` when the configured provider's site key or secret key is missing - -2 Only the key that matches `provider` is non-null, so both are null while `provider` is `none` +| provider | string | The [CAPTCHA provider](#captcha-providers) in use | ### CAPTCHA providers | Value | Description | | --- | --- | +| altcha | An ALTCHA proof-of-work challenge gates the operations that require one | | none | The deployment requires no CAPTCHA | -| hcaptcha | hCaptcha challenges gate the operations that require one | -| turnstile | Cloudflare Turnstile challenges gate the operations that require one | -The complete challenge handshake, including the `X-Captcha-Token` and `X-Captcha-Type` request headers, is defined in [CAPTCHA handling](/topics/captcha/). +The complete challenge handshake, including the `X-Captcha-Token` request header, is defined in [CAPTCHA handling](/topics/captcha/). ## Instance features object diff --git a/fluxer_docs/src/content/docs/http-api/users/phone-verification.mdx b/fluxer_docs/src/content/docs/http-api/users/phone-verification.mdx index 53fb67b9d..a7f010fd7 100644 --- a/fluxer_docs/src/content/docs/http-api/users/phone-verification.mdx +++ b/fluxer_docs/src/content/docs/http-api/users/phone-verification.mdx @@ -169,7 +169,15 @@ Starts verification of the submitted number. Requires an account satisfying [eli The instance can route the attempt to an inbound challenge instead of outbound SMS, and that overrides a requested `sms`. Requesting `inbound_challenge` always yields a challenge. -The number then passes the [number checks](#number-checks). A number that has reached its verification limit is refused with 400 `PHONE_ALREADY_USED`. Sends are limited for each account and for each number, and a denial returns 429 `PHONE_RATE_LIMIT_EXCEEDED`. A request can also return 400 `CAPTCHA_REQUIRED`. This route reads no [CAPTCHA](/topics/captcha/) solution header, so the attempt cannot be retried with a solution. Every other refusal returns 400 `SMS_VERIFICATION_UNAVAILABLE`, as does an instance with no phone verification service. +The number then passes the [number checks](#number-checks). A number that has reached its verification limit is refused with 400 `PHONE_ALREADY_USED`. Sends are limited for each account and for each number, and a denial returns 429 `PHONE_RATE_LIMIT_EXCEEDED`. The phone verification service can also ask for a solved [CAPTCHA](/topics/captcha/) challenge. The route then answers 400 `CAPTCHA_REQUIRED` with a challenge, and a retry with the solved challenge in `X-Captcha-Token` continues the send. When the instance has the check turned off, or the account is exempt from it, that request returns 429 `PHONE_RATE_LIMIT_EXCEEDED` instead. Every other refusal returns 400 `SMS_VERIFICATION_UNAVAILABLE`, as does an instance with no phone verification service. + +### Request headers + +| Field | Type | Description | +| --- | --- | --- | +| X-Captcha-Token?1 | string | The solved ALTCHA challenge, see [CAPTCHA handling](/topics/captcha/) | + +1 Read only when the phone verification service asks for a CAPTCHA. A missing token then returns 400 `CAPTCHA_REQUIRED` and a rejected token returns 400 `INVALID_CAPTCHA`, each with a new challenge ### JSON body @@ -185,7 +193,7 @@ The number then passes the [number checks](#number-checks). A number that has re | Status | Body | Condition | | --- | --- | --- | | 200 | [SMS delivery](#sms-delivery-object) object \| [inbound challenge](#inbound-challenge-object) object | Verification was started on the channel named by the response | -| 400 | [error response](/http-api/#error-response) | The number is refused with `INVALID_PHONE_NUMBER`, has reached its verification limit and returns `PHONE_ALREADY_USED`, the attempt returns `CAPTCHA_REQUIRED`, or the send could not start and returns `SMS_VERIFICATION_UNAVAILABLE` | +| 400 | [error response](/http-api/#error-response) | The number is refused with `INVALID_PHONE_NUMBER`, has reached its verification limit and returns `PHONE_ALREADY_USED`, the attempt asks for a CAPTCHA with `CAPTCHA_REQUIRED` or `INVALID_CAPTCHA`, or the send could not start and returns `SMS_VERIFICATION_UNAVAILABLE` | | 403 | [error response](/http-api/#error-response) | The account is not eligible and the request returns `PHONE_ADD_NOT_ELIGIBLE` | | 4291 | [rate limit response](/topics/rate-limits/#rate-limit-response-object) | A send limit or a provider throttle denies the request, which returns `PHONE_RATE_LIMIT_EXCEEDED` | diff --git a/fluxer_docs/src/content/docs/http-api/users/private-channels.mdx b/fluxer_docs/src/content/docs/http-api/users/private-channels.mdx index a7df3e0a2..f24ada9d6 100644 --- a/fluxer_docs/src/content/docs/http-api/users/private-channels.mdx +++ b/fluxer_docs/src/content/docs/http-api/users/private-channels.mdx @@ -120,12 +120,9 @@ Fluxer holds a bot caller to no friendship. A recipient that has blocked the bot | Field | Type | Description | | --- | --- | --- | -| X-Captcha-Token?1 | string | The CAPTCHA proof | -| X-Captcha-Type?2 | string | The CAPTCHA provider, either `hcaptcha` or `turnstile` | +| X-Captcha-Token?1 | string | The solved ALTCHA challenge, see [CAPTCHA handling](/topics/captcha/) | -1 Read only on a request supplying `recipients`, where a missing proof returns 400 `CAPTCHA_REQUIRED` and a rejected proof returns 400 `INVALID_CAPTCHA`, as does a proof for a provider the instance holds no secret key for. [CAPTCHA](/topics/captcha/) states when an instance skips verification - -2 The value `hcaptcha` or `turnstile` selects that provider whether or not the instance configured it. The instance's configured provider is used when the header is absent or has any other value +1 Read only on a request supplying `recipients`, where a missing token returns 400 `CAPTCHA_REQUIRED` and a rejected token returns 400 `INVALID_CAPTCHA`, each with a new challenge. [CAPTCHA handling](/topics/captcha/#exemption) states when an instance skips verification ### JSON body diff --git a/fluxer_docs/src/content/docs/operator/configuration.mdx b/fluxer_docs/src/content/docs/operator/configuration.mdx index a5c12d5ce..9e2592944 100644 --- a/fluxer_docs/src/content/docs/operator/configuration.mdx +++ b/fluxer_docs/src/content/docs/operator/configuration.mdx @@ -760,14 +760,7 @@ Only `api` and `worker` build the mail service, so recreating those two is enoug ## CAPTCHA -All are optional. - -| Variable | Value in `.env.example` | Controls | -| --- | --- | --- | -| FLUXER_CAPTCHA_ENABLED | `false` | The [CAPTCHA](/topics/captcha/) switch. Startup fails when it is `true` without a provider and that provider's keys | -| FLUXER_CAPTCHA_PROVIDER | `none` | The provider. `hcaptcha`, `turnstile`, or `none`. Anything else fails startup | - -`FLUXER_CAPTCHA_HCAPTCHA_SITE_KEY`, `FLUXER_CAPTCHA_HCAPTCHA_SECRET_KEY`, `FLUXER_CAPTCHA_TURNSTILE_SITE_KEY`, and `FLUXER_CAPTCHA_TURNSTILE_SECRET_KEY` ship empty in `.env.example` and the shipped Compose file forwards them all. Set the pair the selected provider needs. The admin dashboard's Runtime Integrations panel sets the same provider and keys, and a value stored there wins over the environment. An instance that configures CAPTCHA only there must leave `FLUXER_CAPTCHA_ENABLED` at `false`, because the boot check reads the environment alone. +[ALTCHA](/topics/captcha/) proof-of-work is on by default. Turn it off or tune it under Instance Config, Bot protection in the admin panel. No environment variables configure it. ## Single sign-on and passkeys @@ -1677,13 +1670,17 @@ Product name, client-visible brand assets, and the setup state in the instance d Registration mode of `open`, `approval`, or `closed`, admin-issued registration URLs, and pending approval requests. +#### Instance Config, Bot protection + +The [ALTCHA](/topics/captcha/) proof-of-work check on sign-up, login, password recovery, and a few other gated operations. It is on by default. Turn it off here, or change its cost and maximum counter. + #### Instance Config, Community & Policy Single-community mode, direct messages and friends, the premium model, and optional embed services. #### Instance Config, Runtime Integrations -The Klipy GIF key, the YouTube Data API key, the CAPTCHA provider and its keys, email delivery with an SMTP connection test, and Bluesky OAuth. +The Klipy GIF key, the YouTube Data API key, email delivery with an SMTP connection test, and Bluesky OAuth. #### Instance Config, Premium & billing diff --git a/fluxer_docs/src/content/docs/topics/captcha.md b/fluxer_docs/src/content/docs/topics/captcha.md index c32313303..e622bf81b 100644 --- a/fluxer_docs/src/content/docs/topics/captcha.md +++ b/fluxer_docs/src/content/docs/topics/captcha.md @@ -1,20 +1,43 @@ --- # SPDX-License-Identifier: AGPL-3.0-or-later title: CAPTCHA handling -description: How a client discovers the CAPTCHA provider and answers a challenge. +description: How a client answers the ALTCHA proof-of-work check. --- -An instance can require a CAPTCHA solution on a small set of abuse-sensitive operations. A client reads the selected provider and its site key from [instance discovery](/http-api/instance/#instance-discovery-object), renders that provider's widget, and sends the solution on the gated request. +Fluxer asks for a CAPTCHA on a small set of abuse-sensitive operations. The CAPTCHA is an [ALTCHA](https://altcha.org) proof-of-work challenge that the API issues and verifies itself. No third-party service or widget is involved, and a client solves the challenge without user input. -## Discovering the provider +## Overview -`GET /.well-known/fluxer` publishes the [CAPTCHA configuration object](/http-api/instance/#captcha-configuration-object) inside the [instance discovery object](/http-api/instance/#instance-discovery-object). Its `provider` field names the selected [CAPTCHA provider](/http-api/instance/#captcha-providers), and `hcaptcha_site_key` or `turnstile_site_key` is that provider's site key. The other key is null, and both are null when `provider` is `none`. +The check is on by default. An administrator can turn it off, or change its `cost` and `max_counter`, in the [captcha configuration](/admin-api/instance/#captcha-configuration-object). While it is off, a gated operation proceeds with no CAPTCHA header. -The value `none` means the instance challenges no operation. A gated operation then proceeds with no CAPTCHA header. The values `hcaptcha` and `turnstile` name the provider whose widget a client renders. +The `captcha` object in [instance discovery](/http-api/instance/#captcha-configuration-object) reports `altcha` while the check is on and `none` while it is off. A client does not need it, because every challenge arrives in the error response that asks for it. + +## The retry handshake + +Send the request without a CAPTCHA header. A gated operation answers 400 `CAPTCHA_REQUIRED`, and the [error response](/http-api/#error-response) has two more fields. + +| Field | Type | Description | +| --- | --- | --- | +| captcha_provider | string | Always `altcha` | +| altcha_challenge | object | An ALTCHA v2 challenge, with `parameters` and `signature` | + +The challenge uses `PBKDF2/SHA-256`. Solve it with an ALTCHA v2 solver, then retry the same request with `X-Captcha-Token` set to the [token](#token-format). An accepted token lets the operation proceed. + +A rejected token returns 400 `INVALID_CAPTCHA` with a new challenge in the same two fields. A client solves that challenge and retries again. + +:::caution[A challenge is single-use] +Each challenge is accepted once and expires 10 minutes after it is issued. A replayed, expired or wrong token returns `INVALID_CAPTCHA`. A client MUST NOT resend a token after `INVALID_CAPTCHA`. +::: + +The route rate limit on registration, login and password recovery runs before the check. The challenge response and the retry each use one request from that allowance. + +## Token format + +The token is the base64 encoding of the UTF-8 JSON object `{"challenge": {"parameters": ..., "signature": ...}, "solution": {"counter": ..., "derivedKey": ...}}`. The solution can also have `time`. Copy `parameters` and `signature` unchanged from `altcha_challenge`. A token longer than 4096 characters, or one that does not decode to this shape, returns `INVALID_CAPTCHA`. ## Gated operations -The following operations verify a CAPTCHA while discovery reports a `provider` other than `none`. +The following operations verify a CAPTCHA while the check is on. | Method | Route | Operation | | --- | --- | --- | @@ -28,57 +51,17 @@ The following operations verify a CAPTCHA while discovery reports a `provider` o Create private channel is gated only on the group direct message path, where the request body has a `recipients` member. A one-to-one direct message request omits the field and is never gated. +[Send phone verification](/http-api/users/phone-verification/#send-phone-verification) verifies a CAPTCHA only when the phone verification service asks for one. It then answers and accepts the handshake the same way. When the check is off or the account is exempt, that send is refused with `PHONE_RATE_LIMIT_EXCEEDED` instead. + ## Exemption Fluxer skips the check in three cases, and the operation then proceeds with no CAPTCHA header. The authenticated account's email address is on an exempt domain. The authenticated account holds the [`APP_STORE_REVIEWER`](/admin-api/users/#account-flags) flag. The request body has an `email` that belongs to an account holding that flag. Discovery does not report exemptions, so clients must handle a challenge on every gated operation. -## Request headers - -| Field | Type | Description | -| --- | --- | --- | -| X-Captcha-Token?1 | string | The solution issued by the provider widget | -| X-Captcha-Type?2 | string | The provider that produced the solution, accepting `hcaptcha`, `turnstile` or `altcha` | - -1 An absent or empty value on a gated operation returns 400 `CAPTCHA_REQUIRED` - -2 An absent value selects the instance's configured provider, and so does any value other than `hcaptcha`, `turnstile` or `altcha`. Naming a provider the instance holds no secret key for returns 400 `INVALID_CAPTCHA`. The value `altcha` is accepted only from a requester the [ALTCHA rollout](#altcha-proof-of-work) selects. - -## The retry handshake - -Send the request without CAPTCHA headers. On 400 `CAPTCHA_REQUIRED`, obtain a solution through the selected provider's widget using its advertised site key. Retry the same request with `X-Captcha-Token` set to the solution and, optionally, `X-Captcha-Type` set to the provider. - -An accepted solution allows the operation to proceed. A rejected solution returns 400 `INVALID_CAPTCHA`. - -:::caution[A solution is single-use] -The provider treats an already redeemed solution as invalid. A client obtains a new solution before retrying after `INVALID_CAPTCHA` and MUST NOT replay the previous `X-Captcha-Token` value. -::: - -## ALTCHA proof-of-work - -An operator can move selected requesters from the configured provider to an [ALTCHA](https://altcha.org) proof-of-work challenge that the API issues and verifies itself. The [ALTCHA captcha configuration](/admin-api/instance/#altcha-captcha-configuration-object) selects signed-in accounts by rollout share and allowlist, and logged-out requests with one switch. The check applies only where a captcha is already required, so an instance whose `provider` is `none` never serves it. - -For a selected requester, the `CAPTCHA_REQUIRED` and `INVALID_CAPTCHA` bodies have two more fields. - -| Field | Type | Description | -| --- | --- | --- | -| captcha_provider | string | Always `altcha` | -| altcha_challenge | object | An ALTCHA v2 challenge, with `parameters` and `signature` | - -The challenge uses `PBKDF2/SHA-256` and expires 10 minutes after it is issued. Solve it with an ALTCHA v2 solver, then retry with `X-Captcha-Type` set to `altcha` and `X-Captcha-Token` set to the base64 encoding of the JSON object `{"challenge": , "solution": }`. Each challenge is accepted once. A replayed, expired or wrong solution returns 400 `INVALID_CAPTCHA` with a new challenge. - -A selected requester can still answer with the configured provider, so a client that does not read these fields keeps working. - -## Provider verification - -A rejected solution or unavailable provider returns 400 `INVALID_CAPTCHA`. The response does not distinguish between these causes. - ## Error codes | Code | Status | Description | | --- | --- | --- | -| CAPTCHA_REQUIRED1 | 400 | The operation is gated and the request has no solution | -| INVALID_CAPTCHA | 400 | The provider rejected the solution, or verification could not be completed | +| CAPTCHA_REQUIRED | 400 | The operation is gated and the request has no token | +| INVALID_CAPTCHA | 400 | The token is malformed, expired, already used, or wrong | -1 [Send phone verification](/http-api/users/phone-verification/#send-phone-verification) can also answer this code. That operation is not gated and accepts no solution, so retrying it with `X-Captcha-Token` never helps - -Both codes are defined in the [API error code registry](/http-api/errors/#api-error-code-registry), and the body of each is the ordinary [error response](/http-api/#error-response) envelope. +Both codes are defined in the [API error code registry](/http-api/errors/#api-error-code-registry). Both bodies are the ordinary [error response](/http-api/#error-response) envelope with `captcha_provider` and `altcha_challenge` added. diff --git a/packages/config/src/ConfigLoader.ts b/packages/config/src/ConfigLoader.ts index 65aae31e8..bf2c203ad 100644 --- a/packages/config/src/ConfigLoader.ts +++ b/packages/config/src/ConfigLoader.ts @@ -194,10 +194,6 @@ function defaultConfig(): MasterConfig { from_name: 'Fluxer', app_base_url: '', }, - captcha: { - enabled: false, - provider: 'none', - }, voice: { enabled: false, api_key: '', @@ -425,24 +421,6 @@ function validatePostgresConfig(config: MasterConfig): void { } } -function validateCaptchaConfig(config: MasterConfig): void { - const captcha = config.integrations.captcha; - if (!captcha.enabled) { - return; - } - if (captcha.provider === 'hcaptcha') { - requireString(captcha.hcaptcha?.site_key, 'FLUXER_CAPTCHA_HCAPTCHA_SITE_KEY'); - requireString(captcha.hcaptcha?.secret_key, 'FLUXER_CAPTCHA_HCAPTCHA_SECRET_KEY'); - return; - } - if (captcha.provider === 'turnstile') { - requireString(captcha.turnstile?.site_key, 'FLUXER_CAPTCHA_TURNSTILE_SITE_KEY'); - requireString(captcha.turnstile?.secret_key, 'FLUXER_CAPTCHA_TURNSTILE_SECRET_KEY'); - return; - } - throw new Error('FLUXER_CAPTCHA_PROVIDER must be hcaptcha or turnstile when FLUXER_CAPTCHA_ENABLED is true'); -} - function validateApiWorkerConfig(config: MasterConfig): void { const worker = config.services.api?.worker; if (!worker) { @@ -564,11 +542,9 @@ function normalizeConfig(config: MasterConfig): MasterConfig { assertOneOf(config.internal.kv_provider, ['redis'], 'FLUXER_KV_PROVIDER'); assertOneOf(config.internal.kv_mode, ['standalone', 'cluster'], 'FLUXER_KV_MODE'); assertOneOf(config.integrations.email.provider, ['smtp', 'none'], 'FLUXER_EMAIL_PROVIDER'); - assertOneOf(config.integrations.captcha.provider, ['hcaptcha', 'turnstile', 'none'], 'FLUXER_CAPTCHA_PROVIDER'); assertOneOf(config.integrations.search.engine, ['elasticsearch', 'meilisearch'], 'FLUXER_SEARCH_ENGINE'); assertOneOf(config.integrations.cache_purge.adapter, CACHE_PURGE_ADAPTER_NAMES, 'FLUXER_CACHE_PURGE_ADAPTER'); validatePostgresConfig(config); - validateCaptchaConfig(config); validateApiWorkerConfig(config); validateStorageChangeFeedConfig(config); validateCachePurgeConfig(config); diff --git a/packages/config/src/MasterConfig.ts b/packages/config/src/MasterConfig.ts index 30e8ebd3d..e33307a22 100644 --- a/packages/config/src/MasterConfig.ts +++ b/packages/config/src/MasterConfig.ts @@ -207,18 +207,6 @@ export interface MasterConfig { secure: boolean; }; }; - captcha: { - enabled: boolean; - provider: 'hcaptcha' | 'turnstile' | 'none'; - hcaptcha?: { - site_key: string; - secret_key: string; - }; - turnstile?: { - site_key: string; - secret_key: string; - }; - }; voice: { enabled: boolean; api_key: string; diff --git a/packages/config/src/__tests__/ConfigLoader.test.ts b/packages/config/src/__tests__/ConfigLoader.test.ts index 8343fb9be..9913301f8 100644 --- a/packages/config/src/__tests__/ConfigLoader.test.ts +++ b/packages/config/src/__tests__/ConfigLoader.test.ts @@ -507,46 +507,6 @@ describe('ConfigLoader', () => { expect(config.instance.setup.configured).toBe(true); }); - test('rejects an enabled captcha with no keys for the selected provider', async () => { - stubMinimalEnv({FLUXER_CAPTCHA_ENABLED: 'true', FLUXER_CAPTCHA_PROVIDER: 'hcaptcha'}); - await expect(loadConfig()).rejects.toThrow('FLUXER_CAPTCHA_HCAPTCHA_SITE_KEY is required'); - }); - - test('rejects an enabled captcha with a site key but no secret key', async () => { - stubMinimalEnv({ - FLUXER_CAPTCHA_ENABLED: 'true', - FLUXER_CAPTCHA_PROVIDER: 'turnstile', - FLUXER_CAPTCHA_TURNSTILE_SITE_KEY: 'turnstile-site-key', - }); - await expect(loadConfig()).rejects.toThrow('FLUXER_CAPTCHA_TURNSTILE_SECRET_KEY is required'); - }); - - test('rejects an enabled captcha with no provider', async () => { - stubMinimalEnv({FLUXER_CAPTCHA_ENABLED: 'true'}); - await expect(loadConfig()).rejects.toThrow( - 'FLUXER_CAPTCHA_PROVIDER must be hcaptcha or turnstile when FLUXER_CAPTCHA_ENABLED is true', - ); - }); - - test('accepts an enabled captcha with both keys for the selected provider', async () => { - stubMinimalEnv({ - FLUXER_CAPTCHA_ENABLED: 'true', - FLUXER_CAPTCHA_PROVIDER: 'hcaptcha', - FLUXER_CAPTCHA_HCAPTCHA_SITE_KEY: 'hcaptcha-site-key', - FLUXER_CAPTCHA_HCAPTCHA_SECRET_KEY: 'hcaptcha-secret-key', - }); - - const config = await loadConfig(); - - expect(config.integrations.captcha.enabled).toBe(true); - expect(config.integrations.captcha.hcaptcha?.secret_key).toBe('hcaptcha-secret-key'); - }); - - test('leaves a disabled captcha unvalidated', async () => { - stubMinimalEnv({FLUXER_CAPTCHA_PROVIDER: 'hcaptcha'}); - expect((await loadConfig()).integrations.captcha.enabled).toBe(false); - }); - test('defaults the cache purge adapter to none', async () => { stubMinimalEnv(); expect((await loadConfig()).integrations.cache_purge).toEqual({ diff --git a/packages/config/src/config_loader/EnvironmentOverrides.ts b/packages/config/src/config_loader/EnvironmentOverrides.ts index 665ccad85..259c0fbe3 100644 --- a/packages/config/src/config_loader/EnvironmentOverrides.ts +++ b/packages/config/src/config_loader/EnvironmentOverrides.ts @@ -233,12 +233,6 @@ const NAMED_FLUXER_ENV_OVERRIDES: Record = { FLUXER_EMAIL_SMTP_USERNAME: {path: ['integrations', 'email', 'smtp', 'username']}, FLUXER_EMAIL_SMTP_PASSWORD: {path: ['integrations', 'email', 'smtp', 'password']}, FLUXER_EMAIL_SMTP_SECURE: {path: ['integrations', 'email', 'smtp', 'secure'], parse: parseBoolean}, - FLUXER_CAPTCHA_ENABLED: {path: ['integrations', 'captcha', 'enabled'], parse: parseBoolean}, - FLUXER_CAPTCHA_PROVIDER: {path: ['integrations', 'captcha', 'provider']}, - FLUXER_CAPTCHA_HCAPTCHA_SITE_KEY: {path: ['integrations', 'captcha', 'hcaptcha', 'site_key']}, - FLUXER_CAPTCHA_HCAPTCHA_SECRET_KEY: {path: ['integrations', 'captcha', 'hcaptcha', 'secret_key']}, - FLUXER_CAPTCHA_TURNSTILE_SITE_KEY: {path: ['integrations', 'captcha', 'turnstile', 'site_key']}, - FLUXER_CAPTCHA_TURNSTILE_SECRET_KEY: {path: ['integrations', 'captcha', 'turnstile', 'secret_key']}, FLUXER_LIVEKIT_ENABLED: {path: ['integrations', 'voice', 'enabled'], parse: parseBoolean}, FLUXER_LIVEKIT_API_KEY: {path: ['integrations', 'voice', 'api_key']}, FLUXER_LIVEKIT_API_SECRET: {path: ['integrations', 'voice', 'api_secret']}, diff --git a/packages/constants/src/Headers.ts b/packages/constants/src/Headers.ts index da489ee59..bbc750a33 100644 --- a/packages/constants/src/Headers.ts +++ b/packages/constants/src/Headers.ts @@ -26,7 +26,6 @@ export const Headers = { X_FLUXER_SUDO_MODE_JWT: 'X-Fluxer-Sudo-Mode-JWT', X_FLUXER_VERSION: 'X-Fluxer-Version', X_CAPTCHA_TOKEN: 'X-Captcha-Token', - X_CAPTCHA_TYPE: 'X-Captcha-Type', X_AUDIT_LOG_REASON: 'X-Audit-Log-Reason', X_INTERNAL_API_KEY: 'X-Internal-API-Key', X_AMZ_REQUEST_ID: 'x-amz-request-id', diff --git a/packages/errors/src/domains/core/CaptchaVerificationRequiredError.ts b/packages/errors/src/domains/core/CaptchaVerificationRequiredError.ts deleted file mode 100644 index 42029d394..000000000 --- a/packages/errors/src/domains/core/CaptchaVerificationRequiredError.ts +++ /dev/null @@ -1,12 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -import {APIErrorCodes} from '@fluxer/constants/src/ApiErrorCodes'; -import {BadRequestError} from '@fluxer/errors/src/domains/core/BadRequestError'; - -export class CaptchaVerificationRequiredError extends BadRequestError { - constructor() { - super({ - code: APIErrorCodes.CAPTCHA_REQUIRED, - }); - } -} diff --git a/packages/errors/src/i18n/ErrorI18nMessages.ts b/packages/errors/src/i18n/ErrorI18nMessages.ts index f87e65358..6a7211119 100644 --- a/packages/errors/src/i18n/ErrorI18nMessages.ts +++ b/packages/errors/src/i18n/ErrorI18nMessages.ts @@ -161,8 +161,8 @@ export const ERROR_I18N_MESSAGES = { 'calls_and_voice.voice_message_duration_required': 'Voice message attachments must specify a duration.', 'calls_and_voice.voice_message_waveform_required': 'Voice message attachments must include waveform data.', 'calls_and_voice.voice_messages_require_single_attachment': 'Voice messages must contain exactly one attachment.', - 'captcha.invalid': 'Invalid captcha.', - 'captcha.required': 'Captcha is required.', + 'captcha.invalid': 'Verification failed. Try again.', + 'captcha.required': 'Verification required. Try again.', 'channels_and_guilds.afk_channel_must_be_in_guild': 'AFK channel must be in this community.', 'channels_and_guilds.afk_channel_must_be_voice': 'AFK channel must be a voice channel.', 'channels_and_guilds.all_channels_must_belong_to_guild': 'All channels must belong to this community.', diff --git a/packages/errors/src/i18n/locales/ar.ts b/packages/errors/src/i18n/locales/ar.ts index 142dd64af..365c38ebf 100644 --- a/packages/errors/src/i18n/locales/ar.ts +++ b/packages/errors/src/i18n/locales/ar.ts @@ -140,8 +140,8 @@ const ERROR_I18N_AR_MESSAGES = defineErrorI18nLocaleMessages({ "calls_and_voice.voice_message_duration_required": "يجب أن تحدد مرفقات الرسائل الصوتية مدة.", "calls_and_voice.voice_message_waveform_required": "يجب أن تحتوي مرفقات الرسائل الصوتية على بيانات الموجة الصوتية.", "calls_and_voice.voice_messages_require_single_attachment": "يجب أن تحتوي الرسائل الصوتية على مرفق واحد فقط.", - "captcha.invalid": "اختبار الكابتشا غير صالح.", - "captcha.required": "اختبار الكابتشا مطلوب.", + "captcha.invalid": "فشل التحقق. حاول مرة أخرى.", + "captcha.required": "مطلوب التحقق. حاول مرة أخرى.", "channels_and_guilds.afk_channel_must_be_in_guild": "يجب أن تكون قناة AFK ضمن هذا المجتمع.", "channels_and_guilds.afk_channel_must_be_voice": "يجب أن تكون قناة AFK قناة صوتية.", "channels_and_guilds.all_channels_must_belong_to_guild": "يجب أن تكون جميع القنوات تابعة لهذا المجتمع.", diff --git a/packages/errors/src/i18n/locales/bg.ts b/packages/errors/src/i18n/locales/bg.ts index c055ebc6e..828a2b565 100644 --- a/packages/errors/src/i18n/locales/bg.ts +++ b/packages/errors/src/i18n/locales/bg.ts @@ -140,8 +140,8 @@ const ERROR_I18N_BG_MESSAGES = defineErrorI18nLocaleMessages({ "calls_and_voice.voice_message_duration_required": "Прикачените файлове към гласови съобщения трябва да имат продължителност.", "calls_and_voice.voice_message_waveform_required": "Прикачените файлове към гласови съобщения трябва да съдържат данни за вълновата форма.", "calls_and_voice.voice_messages_require_single_attachment": "Гласовите съобщения трябва да съдържат точно един прикачен файл.", - "captcha.invalid": "Невалидна капча.", - "captcha.required": "Изисква се капча.", + "captcha.invalid": "Проверката не успя. Опитай отново.", + "captcha.required": "Изисква се проверка. Опитай отново.", "channels_and_guilds.afk_channel_must_be_in_guild": "AFK каналът трябва да е в рамките на тази общност.", "channels_and_guilds.afk_channel_must_be_voice": "AFK каналът трябва да е гласов канал.", "channels_and_guilds.all_channels_must_belong_to_guild": "Всички канали трябва да принадлежат на тази общност.", diff --git a/packages/errors/src/i18n/locales/cs.ts b/packages/errors/src/i18n/locales/cs.ts index 0aa01a471..4b158bbe6 100644 --- a/packages/errors/src/i18n/locales/cs.ts +++ b/packages/errors/src/i18n/locales/cs.ts @@ -140,8 +140,8 @@ const ERROR_I18N_CS_MESSAGES = defineErrorI18nLocaleMessages({ "calls_and_voice.voice_message_duration_required": "Přílohy hlasových zpráv musí uvádět délku.", "calls_and_voice.voice_message_waveform_required": "Přílohy hlasových zpráv musí obsahovat data průběhu zvukové vlny.", "calls_and_voice.voice_messages_require_single_attachment": "Hlasové zprávy musí obsahovat právě jednu přílohu.", - "captcha.invalid": "Neplatná CAPTCHA.", - "captcha.required": "CAPTCHA je vyžadována.", + "captcha.invalid": "Ověření se nezdařilo. Zkuste to znovu.", + "captcha.required": "Ověření je nutné. Zkuste to znovu.", "channels_and_guilds.afk_channel_must_be_in_guild": "AFK kanál musí být v této komunitě.", "channels_and_guilds.afk_channel_must_be_voice": "AFK kanál musí být hlasový kanál.", "channels_and_guilds.all_channels_must_belong_to_guild": "Všechny kanály musí být v této komunitě.", diff --git a/packages/errors/src/i18n/locales/da.ts b/packages/errors/src/i18n/locales/da.ts index ae652c698..29e3bb7ab 100644 --- a/packages/errors/src/i18n/locales/da.ts +++ b/packages/errors/src/i18n/locales/da.ts @@ -140,8 +140,8 @@ const ERROR_I18N_DA_MESSAGES = defineErrorI18nLocaleMessages({ "calls_and_voice.voice_message_duration_required": "Vedhæftede filer til talebeskeder skal angive en varighed.", "calls_and_voice.voice_message_waveform_required": "Vedhæftede filer til talebeskeder skal indeholde bølgeformdata.", "calls_and_voice.voice_messages_require_single_attachment": "Talebeskeder skal indeholde præcis én vedhæftet fil.", - "captcha.invalid": "Ugyldig captcha.", - "captcha.required": "Captcha er påkrævet.", + "captcha.invalid": "Bekræftelse mislykkedes. Prøv igen.", + "captcha.required": "Bekræftelse påkrævet. Prøv igen.", "channels_and_guilds.afk_channel_must_be_in_guild": "AFK-kanalen skal være i dette fællesskab.", "channels_and_guilds.afk_channel_must_be_voice": "AFK-kanalen skal være en talekanal.", "channels_and_guilds.all_channels_must_belong_to_guild": "Alle kanaler skal tilhøre dette fællesskab.", diff --git a/packages/errors/src/i18n/locales/de.ts b/packages/errors/src/i18n/locales/de.ts index 400c6e22a..1760b6623 100644 --- a/packages/errors/src/i18n/locales/de.ts +++ b/packages/errors/src/i18n/locales/de.ts @@ -140,8 +140,8 @@ const ERROR_I18N_DE_MESSAGES = defineErrorI18nLocaleMessages({ "calls_and_voice.voice_message_duration_required": "Für Anhänge von Sprachnachrichten muss eine Dauer angegeben werden.", "calls_and_voice.voice_message_waveform_required": "Anhänge von Sprachnachrichten müssen Wellenformdaten enthalten.", "calls_and_voice.voice_messages_require_single_attachment": "Sprachnachrichten müssen genau einen Anhang enthalten.", - "captcha.invalid": "Das Captcha ist ungültig.", - "captcha.required": "Das Captcha ist erforderlich.", + "captcha.invalid": "Überprüfung fehlgeschlagen. Versuche es erneut.", + "captcha.required": "Überprüfung erforderlich. Versuche es erneut.", "channels_and_guilds.afk_channel_must_be_in_guild": "Der AFK-Kanal muss sich in dieser Community befinden.", "channels_and_guilds.afk_channel_must_be_voice": "Der AFK-Kanal muss ein Sprachkanal sein.", "channels_and_guilds.all_channels_must_belong_to_guild": "Alle Kanäle müssen sich in dieser Community befinden.", diff --git a/packages/errors/src/i18n/locales/el.ts b/packages/errors/src/i18n/locales/el.ts index ea742ad54..0930af51c 100644 --- a/packages/errors/src/i18n/locales/el.ts +++ b/packages/errors/src/i18n/locales/el.ts @@ -140,8 +140,8 @@ const ERROR_I18N_EL_MESSAGES = defineErrorI18nLocaleMessages({ "calls_and_voice.voice_message_duration_required": "Τα συνημμένα φωνητικών μηνυμάτων πρέπει να έχουν διάρκεια.", "calls_and_voice.voice_message_waveform_required": "Τα συνημμένα φωνητικών μηνυμάτων πρέπει να περιέχουν δεδομένα κυματομορφής.", "calls_and_voice.voice_messages_require_single_attachment": "Τα φωνητικά μηνύματα πρέπει να περιέχουν ακριβώς ένα συνημμένο.", - "captcha.invalid": "Μη έγκυρο captcha.", - "captcha.required": "Απαιτείται captcha.", + "captcha.invalid": "Η επαλήθευση απέτυχε. Δοκίμασε ξανά.", + "captcha.required": "Απαιτείται επαλήθευση. Δοκίμασε ξανά.", "channels_and_guilds.afk_channel_must_be_in_guild": "Το κανάλι AFK πρέπει να βρίσκεται σε αυτήν την κοινότητα.", "channels_and_guilds.afk_channel_must_be_voice": "Το κανάλι AFK πρέπει να είναι φωνητικό κανάλι.", "channels_and_guilds.all_channels_must_belong_to_guild": "Όλα τα κανάλια πρέπει να βρίσκονται σε αυτήν την κοινότητα.", diff --git a/packages/errors/src/i18n/locales/en-GB.ts b/packages/errors/src/i18n/locales/en-GB.ts index f12b3dd3b..c9f62fbc5 100644 --- a/packages/errors/src/i18n/locales/en-GB.ts +++ b/packages/errors/src/i18n/locales/en-GB.ts @@ -140,8 +140,8 @@ const ERROR_I18N_EN_GB_MESSAGES = defineErrorI18nLocaleMessages({ "calls_and_voice.voice_message_duration_required": "Voice message attachments must specify a duration.", "calls_and_voice.voice_message_waveform_required": "Voice message attachments must include waveform data.", "calls_and_voice.voice_messages_require_single_attachment": "Voice messages must contain exactly one attachment.", - "captcha.invalid": "Invalid captcha.", - "captcha.required": "Captcha is required.", + "captcha.invalid": "Verification failed. Try again.", + "captcha.required": "Verification required. Try again.", "channels_and_guilds.afk_channel_must_be_in_guild": "AFK channel must be in this community.", "channels_and_guilds.afk_channel_must_be_voice": "AFK channel must be a voice channel.", "channels_and_guilds.all_channels_must_belong_to_guild": "All channels must belong to this community.", diff --git a/packages/errors/src/i18n/locales/es-419.ts b/packages/errors/src/i18n/locales/es-419.ts index f30c174a8..5ac86a7ce 100644 --- a/packages/errors/src/i18n/locales/es-419.ts +++ b/packages/errors/src/i18n/locales/es-419.ts @@ -140,8 +140,8 @@ const ERROR_I18N_ES_419_MESSAGES = defineErrorI18nLocaleMessages({ "calls_and_voice.voice_message_duration_required": "Los archivos adjuntos de mensajes de voz deben especificar una duración.", "calls_and_voice.voice_message_waveform_required": "Los archivos adjuntos de mensajes de voz deben incluir datos de onda.", "calls_and_voice.voice_messages_require_single_attachment": "Los mensajes de voz deben contener exactamente un archivo adjunto.", - "captcha.invalid": "Captcha inválido.", - "captcha.required": "Se requiere captcha.", + "captcha.invalid": "Verificación fallida. Inténtalo de nuevo.", + "captcha.required": "Verificación requerida. Inténtalo de nuevo.", "channels_and_guilds.afk_channel_must_be_in_guild": "El canal AFK debe estar en esta comunidad.", "channels_and_guilds.afk_channel_must_be_voice": "El canal AFK debe ser un canal de voz.", "channels_and_guilds.all_channels_must_belong_to_guild": "Todos los canales deben pertenecer a esta comunidad.", diff --git a/packages/errors/src/i18n/locales/es-ES.ts b/packages/errors/src/i18n/locales/es-ES.ts index 542d84c66..428a10861 100644 --- a/packages/errors/src/i18n/locales/es-ES.ts +++ b/packages/errors/src/i18n/locales/es-ES.ts @@ -140,8 +140,8 @@ const ERROR_I18N_ES_ES_MESSAGES = defineErrorI18nLocaleMessages({ "calls_and_voice.voice_message_duration_required": "Los archivos adjuntos de mensajes de voz deben especificar una duración.", "calls_and_voice.voice_message_waveform_required": "Los archivos adjuntos de mensajes de voz deben incluir datos de forma de onda.", "calls_and_voice.voice_messages_require_single_attachment": "Los mensajes de voz deben contener exactamente un archivo adjunto.", - "captcha.invalid": "Captcha no válido.", - "captcha.required": "Se requiere captcha.", + "captcha.invalid": "Verificación fallida. Inténtalo de nuevo.", + "captcha.required": "Verificación necesaria. Inténtalo de nuevo.", "channels_and_guilds.afk_channel_must_be_in_guild": "El canal AFK debe pertenecer a esta comunidad.", "channels_and_guilds.afk_channel_must_be_voice": "El canal AFK debe ser un canal de voz.", "channels_and_guilds.all_channels_must_belong_to_guild": "Todos los canales deben pertenecer a esta comunidad.", diff --git a/packages/errors/src/i18n/locales/fi.ts b/packages/errors/src/i18n/locales/fi.ts index eccb0b458..4c1d5df73 100644 --- a/packages/errors/src/i18n/locales/fi.ts +++ b/packages/errors/src/i18n/locales/fi.ts @@ -140,8 +140,8 @@ const ERROR_I18N_FI_MESSAGES = defineErrorI18nLocaleMessages({ "calls_and_voice.voice_message_duration_required": "Ääniviestin liitteiden on sisällettävä kesto.", "calls_and_voice.voice_message_waveform_required": "Ääniviestin liitteiden on sisällettävä aaltomuotodataa.", "calls_and_voice.voice_messages_require_single_attachment": "Ääniviestien on sisällettävä täsmälleen yksi liite.", - "captcha.invalid": "Virheellinen captcha.", - "captcha.required": "Captcha vaaditaan.", + "captcha.invalid": "Vahvistus epäonnistui. Yritä uudelleen.", + "captcha.required": "Vahvistus vaaditaan. Yritä uudelleen.", "channels_and_guilds.afk_channel_must_be_in_guild": "AFK-kanavan on oltava tässä yhteisössä.", "channels_and_guilds.afk_channel_must_be_voice": "AFK-kanavan on oltava äänikanava.", "channels_and_guilds.all_channels_must_belong_to_guild": "Kaikkien kanavien on kuuluttava tähän yhteisöön.", diff --git a/packages/errors/src/i18n/locales/fr.ts b/packages/errors/src/i18n/locales/fr.ts index 5316a2792..1ad3d35a3 100644 --- a/packages/errors/src/i18n/locales/fr.ts +++ b/packages/errors/src/i18n/locales/fr.ts @@ -140,8 +140,8 @@ const ERROR_I18N_FR_MESSAGES = defineErrorI18nLocaleMessages({ "calls_and_voice.voice_message_duration_required": "Les pièces jointes des messages vocaux doivent spécifier une durée.", "calls_and_voice.voice_message_waveform_required": "Les pièces jointes des messages vocaux doivent inclure des données de forme d'onde.", "calls_and_voice.voice_messages_require_single_attachment": "Les messages vocaux doivent contenir exactement une pièce jointe.", - "captcha.invalid": "Captcha invalide.", - "captcha.required": "Le captcha est requis.", + "captcha.invalid": "Échec de la vérification. Réessayez.", + "captcha.required": "Vérification requise. Réessayez.", "channels_and_guilds.afk_channel_must_be_in_guild": "Le salon AFK doit être dans cette communauté.", "channels_and_guilds.afk_channel_must_be_voice": "Le salon AFK doit être un salon vocal.", "channels_and_guilds.all_channels_must_belong_to_guild": "Tous les salons doivent appartenir à cette communauté.", diff --git a/packages/errors/src/i18n/locales/he.ts b/packages/errors/src/i18n/locales/he.ts index 479222aa9..f4655e30e 100644 --- a/packages/errors/src/i18n/locales/he.ts +++ b/packages/errors/src/i18n/locales/he.ts @@ -140,8 +140,8 @@ const ERROR_I18N_HE_MESSAGES = defineErrorI18nLocaleMessages({ "calls_and_voice.voice_message_duration_required": "קבצים מצורפים של הודעות קוליות חייבים לציין משך זמן.", "calls_and_voice.voice_message_waveform_required": "קבצים מצורפים של הודעות קוליות חייבים לכלול נתוני צורת גל.", "calls_and_voice.voice_messages_require_single_attachment": "הודעות קוליות חייבות לכלול קובץ מצורף אחד בלבד.", - "captcha.invalid": "קאפצ'ה שגויה.", - "captcha.required": "נדרשת קאפצ'ה.", + "captcha.invalid": "האימות נכשל. ניתן לנסות שוב.", + "captcha.required": "נדרש אימות. ניתן לנסות שוב.", "channels_and_guilds.afk_channel_must_be_in_guild": "ערוץ AFK חייב להיות בקהילה זו.", "channels_and_guilds.afk_channel_must_be_voice": "ערוץ AFK חייב להיות ערוץ קולי.", "channels_and_guilds.all_channels_must_belong_to_guild": "כל הערוצים חייבים להשתייך לקהילה זו.", diff --git a/packages/errors/src/i18n/locales/hi.ts b/packages/errors/src/i18n/locales/hi.ts index 02dc5104c..580444cac 100644 --- a/packages/errors/src/i18n/locales/hi.ts +++ b/packages/errors/src/i18n/locales/hi.ts @@ -140,8 +140,8 @@ const ERROR_I18N_HI_MESSAGES = defineErrorI18nLocaleMessages({ "calls_and_voice.voice_message_duration_required": "वॉइस मैसेज अटैचमेंट में ड्यूरेशन बतानी होगी।", "calls_and_voice.voice_message_waveform_required": "वॉइस मैसेज अटैचमेंट में वेवफ़ॉर्म डेटा होना चाहिए।", "calls_and_voice.voice_messages_require_single_attachment": "वॉइस मैसेज में केवल एक अटैचमेंट होना चाहिए।", - "captcha.invalid": "अमान्य कैप्चा।", - "captcha.required": "कैप्चा ज़रूरी है।", + "captcha.invalid": "सत्यापन विफल रहा। फिर से कोशिश करें।", + "captcha.required": "सत्यापन आवश्यक है। फिर से कोशिश करें।", "channels_and_guilds.afk_channel_must_be_in_guild": "AFK चैनल इस कम्युनिटी में होना चाहिए।", "channels_and_guilds.afk_channel_must_be_voice": "AFK चैनल एक वॉइस चैनल होना चाहिए।", "channels_and_guilds.all_channels_must_belong_to_guild": "सभी चैनल इस कम्युनिटी के होने चाहिए।", diff --git a/packages/errors/src/i18n/locales/hr.ts b/packages/errors/src/i18n/locales/hr.ts index e4153036b..5b45a1a7a 100644 --- a/packages/errors/src/i18n/locales/hr.ts +++ b/packages/errors/src/i18n/locales/hr.ts @@ -140,8 +140,8 @@ const ERROR_I18N_HR_MESSAGES = defineErrorI18nLocaleMessages({ "calls_and_voice.voice_message_duration_required": "Privici glasovne poruke moraju imati navedeno trajanje.", "calls_and_voice.voice_message_waveform_required": "Privici glasovne poruke moraju sadržavati podatke o valnom obliku.", "calls_and_voice.voice_messages_require_single_attachment": "Glasovne poruke moraju sadržavati točno jedan privitak.", - "captcha.invalid": "Nevažeća captcha.", - "captcha.required": "Captcha je obavezna.", + "captcha.invalid": "Provjera nije uspjela. Pokušaj ponovno.", + "captcha.required": "Potrebna je provjera. Pokušaj ponovno.", "channels_and_guilds.afk_channel_must_be_in_guild": "AFK kanal mora biti u ovoj zajednici.", "channels_and_guilds.afk_channel_must_be_voice": "AFK kanal mora biti glasovni kanal.", "channels_and_guilds.all_channels_must_belong_to_guild": "Svi kanali moraju pripadati ovoj zajednici.", diff --git a/packages/errors/src/i18n/locales/hu.ts b/packages/errors/src/i18n/locales/hu.ts index 7e465c2cb..bc7db12ae 100644 --- a/packages/errors/src/i18n/locales/hu.ts +++ b/packages/errors/src/i18n/locales/hu.ts @@ -140,8 +140,8 @@ const ERROR_I18N_HU_MESSAGES = defineErrorI18nLocaleMessages({ "calls_and_voice.voice_message_duration_required": "A hangüzenet mellékleteihez meg kell adni az időtartamot.", "calls_and_voice.voice_message_waveform_required": "A hangüzenet mellékleteinek hullámformaadatokat kell tartalmazniuk.", "calls_and_voice.voice_messages_require_single_attachment": "A hangüzeneteknek pontosan egy mellékletet kell tartalmazniuk.", - "captcha.invalid": "Érvénytelen captcha kód.", - "captcha.required": "A captcha kód szükséges.", + "captcha.invalid": "Ellenőrzés sikertelen. Próbáld újra.", + "captcha.required": "Ellenőrzés szükséges. Próbáld újra.", "channels_and_guilds.afk_channel_must_be_in_guild": "Az AFK-csatornának ebben a közösségben kell lennie.", "channels_and_guilds.afk_channel_must_be_voice": "Az AFK-csatornának hangcsatornának kell lennie.", "channels_and_guilds.all_channels_must_belong_to_guild": "Minden csatornának ehhez a közösséghez kell tartoznia.", diff --git a/packages/errors/src/i18n/locales/id.ts b/packages/errors/src/i18n/locales/id.ts index 7362d8562..d8950bd86 100644 --- a/packages/errors/src/i18n/locales/id.ts +++ b/packages/errors/src/i18n/locales/id.ts @@ -140,8 +140,8 @@ const ERROR_I18N_ID_MESSAGES = defineErrorI18nLocaleMessages({ "calls_and_voice.voice_message_duration_required": "Lampiran pesan suara harus menentukan durasi.", "calls_and_voice.voice_message_waveform_required": "Lampiran pesan suara harus menyertakan data bentuk gelombang.", "calls_and_voice.voice_messages_require_single_attachment": "Pesan suara harus berisi tepat satu lampiran.", - "captcha.invalid": "Captcha tidak valid.", - "captcha.required": "Captcha diperlukan.", + "captcha.invalid": "Verifikasi gagal. Coba lagi.", + "captcha.required": "Verifikasi diperlukan. Coba lagi.", "channels_and_guilds.afk_channel_must_be_in_guild": "Saluran AFK harus ada di komunitas ini.", "channels_and_guilds.afk_channel_must_be_voice": "Saluran AFK harus berupa saluran suara.", "channels_and_guilds.all_channels_must_belong_to_guild": "Semua saluran harus ada di komunitas ini.", diff --git a/packages/errors/src/i18n/locales/it.ts b/packages/errors/src/i18n/locales/it.ts index c1a87ed76..8abda9a1a 100644 --- a/packages/errors/src/i18n/locales/it.ts +++ b/packages/errors/src/i18n/locales/it.ts @@ -140,8 +140,8 @@ const ERROR_I18N_IT_MESSAGES = defineErrorI18nLocaleMessages({ "calls_and_voice.voice_message_duration_required": "Gli allegati dei messaggi vocali devono specificare una durata.", "calls_and_voice.voice_message_waveform_required": "Gli allegati dei messaggi vocali devono includere i dati della forma d'onda.", "calls_and_voice.voice_messages_require_single_attachment": "I messaggi vocali devono contenere esattamente un allegato.", - "captcha.invalid": "Captcha non valido.", - "captcha.required": "Il Captcha è richiesto.", + "captcha.invalid": "Verifica non riuscita. Riprova.", + "captcha.required": "Verifica richiesta. Riprova.", "channels_and_guilds.afk_channel_must_be_in_guild": "Il canale AFK deve appartenere a questa Community.", "channels_and_guilds.afk_channel_must_be_voice": "Il canale AFK deve essere un canale vocale.", "channels_and_guilds.all_channels_must_belong_to_guild": "Tutti i canali devono appartenere a questa Community.", diff --git a/packages/errors/src/i18n/locales/ja.ts b/packages/errors/src/i18n/locales/ja.ts index fc80d2e5d..a0d5fc058 100644 --- a/packages/errors/src/i18n/locales/ja.ts +++ b/packages/errors/src/i18n/locales/ja.ts @@ -140,8 +140,8 @@ const ERROR_I18N_JA_MESSAGES = defineErrorI18nLocaleMessages({ "calls_and_voice.voice_message_duration_required": "ボイスメッセージの添付ファイルには長さを指定する必要があります。", "calls_and_voice.voice_message_waveform_required": "ボイスメッセージの添付ファイルには波形データを含める必要があります。", "calls_and_voice.voice_messages_require_single_attachment": "ボイスメッセージには添付ファイルが1つだけ必要です。", - "captcha.invalid": "CAPTCHAが無効です。", - "captcha.required": "CAPTCHAが必要です。", + "captcha.invalid": "確認に失敗しました。もう一度お試しください。", + "captcha.required": "確認が必要です。もう一度お試しください。", "channels_and_guilds.afk_channel_must_be_in_guild": "AFKチャンネルはこのコミュニティ内に設定する必要があります。", "channels_and_guilds.afk_channel_must_be_voice": "AFKチャンネルはボイスチャンネルである必要があります。", "channels_and_guilds.all_channels_must_belong_to_guild": "すべてのチャンネルはこのコミュニティに属している必要があります。", diff --git a/packages/errors/src/i18n/locales/ko.ts b/packages/errors/src/i18n/locales/ko.ts index a108ec84d..29f7836dc 100644 --- a/packages/errors/src/i18n/locales/ko.ts +++ b/packages/errors/src/i18n/locales/ko.ts @@ -140,8 +140,8 @@ const ERROR_I18N_KO_MESSAGES = defineErrorI18nLocaleMessages({ "calls_and_voice.voice_message_duration_required": "음성 메시지 첨부 파일은 길이를 지정해야 해요.", "calls_and_voice.voice_message_waveform_required": "음성 메시지 첨부 파일에는 파형 데이터가 포함되어야 해요.", "calls_and_voice.voice_messages_require_single_attachment": "음성 메시지에는 첨부 파일이 하나만 포함되어야 해요.", - "captcha.invalid": "유효하지 않은 캡차예요.", - "captcha.required": "캡차가 필요해요.", + "captcha.invalid": "확인하지 못했어요. 다시 시도해 주세요.", + "captcha.required": "확인이 필요해요. 다시 시도해 주세요.", "channels_and_guilds.afk_channel_must_be_in_guild": "자리 비움 채널은 이 커뮤니티에 있어야 해요.", "channels_and_guilds.afk_channel_must_be_voice": "자리 비움 채널은 음성 채널이어야 해요.", "channels_and_guilds.all_channels_must_belong_to_guild": "모든 채널은 이 커뮤니티에 속해야 해요.", diff --git a/packages/errors/src/i18n/locales/lt.ts b/packages/errors/src/i18n/locales/lt.ts index 49ef2d389..0d06aad5b 100644 --- a/packages/errors/src/i18n/locales/lt.ts +++ b/packages/errors/src/i18n/locales/lt.ts @@ -140,8 +140,8 @@ const ERROR_I18N_LT_MESSAGES = defineErrorI18nLocaleMessages({ "calls_and_voice.voice_message_duration_required": "Balso žinutės priedai turi nurodyti trukmę.", "calls_and_voice.voice_message_waveform_required": "Balso žinutės prieduose turi būti bangos formos duomenys.", "calls_and_voice.voice_messages_require_single_attachment": "Balso žinutėse turi būti lygiai vienas priedas.", - "captcha.invalid": "Neteisinga captcha.", - "captcha.required": "Reikalinga captcha.", + "captcha.invalid": "Nepavyko patvirtinti. Bandyk dar kartą.", + "captcha.required": "Reikalingas patvirtinimas. Bandyk dar kartą.", "channels_and_guilds.afk_channel_must_be_in_guild": "AFK kanalas turi būti šioje bendruomenėje.", "channels_and_guilds.afk_channel_must_be_voice": "AFK kanalas turi būti balso kanalas.", "channels_and_guilds.all_channels_must_belong_to_guild": "Visi kanalai turi būti šioje bendruomenėje.", diff --git a/packages/errors/src/i18n/locales/nl.ts b/packages/errors/src/i18n/locales/nl.ts index 9020d36ca..b0e49b370 100644 --- a/packages/errors/src/i18n/locales/nl.ts +++ b/packages/errors/src/i18n/locales/nl.ts @@ -140,8 +140,8 @@ const ERROR_I18N_NL_MESSAGES = defineErrorI18nLocaleMessages({ "calls_and_voice.voice_message_duration_required": "Bij spraakberichtbijlagen moet de duur worden opgegeven.", "calls_and_voice.voice_message_waveform_required": "Spraakberichtbijlagen moeten golfvormgegevens bevatten.", "calls_and_voice.voice_messages_require_single_attachment": "Spraakberichten moeten precies één bijlage bevatten.", - "captcha.invalid": "Ongeldige CAPTCHA.", - "captcha.required": "CAPTCHA is vereist.", + "captcha.invalid": "Verificatie mislukt. Probeer het opnieuw.", + "captcha.required": "Verificatie vereist. Probeer het opnieuw.", "channels_and_guilds.afk_channel_must_be_in_guild": "Het AFK-kanaal moet deel uitmaken van deze community.", "channels_and_guilds.afk_channel_must_be_voice": "Het AFK-kanaal moet een spraakkanaal zijn.", "channels_and_guilds.all_channels_must_belong_to_guild": "Alle kanalen moeten deel uitmaken van deze community.", diff --git a/packages/errors/src/i18n/locales/no.ts b/packages/errors/src/i18n/locales/no.ts index 397bbf342..65fd6884f 100644 --- a/packages/errors/src/i18n/locales/no.ts +++ b/packages/errors/src/i18n/locales/no.ts @@ -140,8 +140,8 @@ const ERROR_I18N_NO_MESSAGES = defineErrorI18nLocaleMessages({ "calls_and_voice.voice_message_duration_required": "Vedlegg til talemeldinger må angi en varighet.", "calls_and_voice.voice_message_waveform_required": "Vedlegg til talemeldinger må inneholde bølgeformdata.", "calls_and_voice.voice_messages_require_single_attachment": "Talemeldinger må inneholde nøyaktig ett vedlegg.", - "captcha.invalid": "Ugyldig captcha.", - "captcha.required": "Captcha er påkrevd.", + "captcha.invalid": "Verifisering mislyktes. Prøv igjen.", + "captcha.required": "Verifisering kreves. Prøv igjen.", "channels_and_guilds.afk_channel_must_be_in_guild": "AFK-kanalen må være i dette fellesskapet.", "channels_and_guilds.afk_channel_must_be_voice": "AFK-kanalen må være en talekanal.", "channels_and_guilds.all_channels_must_belong_to_guild": "Alle kanaler må tilhøre dette fellesskapet.", diff --git a/packages/errors/src/i18n/locales/pl.ts b/packages/errors/src/i18n/locales/pl.ts index d0be6aaec..f3f891dec 100644 --- a/packages/errors/src/i18n/locales/pl.ts +++ b/packages/errors/src/i18n/locales/pl.ts @@ -140,8 +140,8 @@ const ERROR_I18N_PL_MESSAGES = defineErrorI18nLocaleMessages({ "calls_and_voice.voice_message_duration_required": "Załączniki wiadomości głosowych muszą określać czas trwania.", "calls_and_voice.voice_message_waveform_required": "Załączniki wiadomości głosowych muszą zawierać dane przebiegu fali dźwiękowej.", "calls_and_voice.voice_messages_require_single_attachment": "Wiadomości głosowe muszą zawierać dokładnie jeden załącznik.", - "captcha.invalid": "Nieprawidłowa captcha.", - "captcha.required": "Captcha jest wymagana.", + "captcha.invalid": "Weryfikacja nie powiodła się. Spróbuj ponownie.", + "captcha.required": "Weryfikacja wymagana. Spróbuj ponownie.", "channels_and_guilds.afk_channel_must_be_in_guild": "Kanał AFK musi znajdować się w tej społeczności.", "channels_and_guilds.afk_channel_must_be_voice": "Kanał AFK musi być kanałem głosowym.", "channels_and_guilds.all_channels_must_belong_to_guild": "Wszystkie kanały muszą znajdować się w tej społeczności.", diff --git a/packages/errors/src/i18n/locales/pt-BR.ts b/packages/errors/src/i18n/locales/pt-BR.ts index 4139c7590..aa70b1659 100644 --- a/packages/errors/src/i18n/locales/pt-BR.ts +++ b/packages/errors/src/i18n/locales/pt-BR.ts @@ -140,8 +140,8 @@ const ERROR_I18N_PT_BR_MESSAGES = defineErrorI18nLocaleMessages({ "calls_and_voice.voice_message_duration_required": "Os anexos de mensagem de voz devem especificar uma duração.", "calls_and_voice.voice_message_waveform_required": "Os anexos de mensagem de voz devem incluir dados da forma de onda.", "calls_and_voice.voice_messages_require_single_attachment": "As mensagens de voz devem conter exatamente um anexo.", - "captcha.invalid": "CAPTCHA inválido.", - "captcha.required": "CAPTCHA é obrigatório.", + "captcha.invalid": "Falha na verificação. Tente novamente.", + "captcha.required": "Verificação necessária. Tente novamente.", "channels_and_guilds.afk_channel_must_be_in_guild": "O canal AFK deve estar nesta comunidade.", "channels_and_guilds.afk_channel_must_be_voice": "O canal AFK deve ser um canal de voz.", "channels_and_guilds.all_channels_must_belong_to_guild": "Todos os canais devem pertencer a esta comunidade.", diff --git a/packages/errors/src/i18n/locales/ro.ts b/packages/errors/src/i18n/locales/ro.ts index 092fbe4ab..9d4dc7624 100644 --- a/packages/errors/src/i18n/locales/ro.ts +++ b/packages/errors/src/i18n/locales/ro.ts @@ -140,8 +140,8 @@ const ERROR_I18N_RO_MESSAGES = defineErrorI18nLocaleMessages({ "calls_and_voice.voice_message_duration_required": "Atașamentele mesajelor vocale trebuie să specifice o durată.", "calls_and_voice.voice_message_waveform_required": "Atașamentele mesajelor vocale trebuie să includă datele formei de undă.", "calls_and_voice.voice_messages_require_single_attachment": "Mesajele vocale trebuie să conțină exact un atașament.", - "captcha.invalid": "Captcha invalid.", - "captcha.required": "Captcha este necesar.", + "captcha.invalid": "Verificare eșuată. Încearcă din nou.", + "captcha.required": "Verificare necesară. Încearcă din nou.", "channels_and_guilds.afk_channel_must_be_in_guild": "Canalul AFK trebuie să fie în această comunitate.", "channels_and_guilds.afk_channel_must_be_voice": "Canalul AFK trebuie să fie un canal vocal.", "channels_and_guilds.all_channels_must_belong_to_guild": "Toate canalele trebuie să facă parte din această comunitate.", diff --git a/packages/errors/src/i18n/locales/ru.ts b/packages/errors/src/i18n/locales/ru.ts index 9d7dbc033..0d65d2a84 100644 --- a/packages/errors/src/i18n/locales/ru.ts +++ b/packages/errors/src/i18n/locales/ru.ts @@ -140,8 +140,8 @@ const ERROR_I18N_RU_MESSAGES = defineErrorI18nLocaleMessages({ "calls_and_voice.voice_message_duration_required": "У вложений голосовых сообщений должна быть указана длительность.", "calls_and_voice.voice_message_waveform_required": "Вложения голосовых сообщений должны содержать данные формы волны.", "calls_and_voice.voice_messages_require_single_attachment": "Голосовые сообщения должны содержать ровно одно вложение.", - "captcha.invalid": "Капча недействительна.", - "captcha.required": "Требуется капча.", + "captcha.invalid": "Проверка не удалась. Повторите попытку.", + "captcha.required": "Требуется проверка. Повторите попытку.", "channels_and_guilds.afk_channel_must_be_in_guild": "Канал AFK должен быть в этом сообществе.", "channels_and_guilds.afk_channel_must_be_voice": "Канал AFK должен быть голосовым.", "channels_and_guilds.all_channels_must_belong_to_guild": "Все каналы должны принадлежать этому сообществу.", diff --git a/packages/errors/src/i18n/locales/sv-SE.ts b/packages/errors/src/i18n/locales/sv-SE.ts index a88445a7f..d5bad0560 100644 --- a/packages/errors/src/i18n/locales/sv-SE.ts +++ b/packages/errors/src/i18n/locales/sv-SE.ts @@ -140,8 +140,8 @@ const ERROR_I18N_SV_SE_MESSAGES = defineErrorI18nLocaleMessages({ "calls_and_voice.voice_message_duration_required": "Bilagor till röstmeddelanden måste ha en angiven speltid.", "calls_and_voice.voice_message_waveform_required": "Bilagor till röstmeddelanden måste innehålla vågformsdata.", "calls_and_voice.voice_messages_require_single_attachment": "Röstmeddelanden måste innehålla exakt en bilaga.", - "captcha.invalid": "Ogiltig captcha.", - "captcha.required": "Captcha krävs.", + "captcha.invalid": "Verifieringen misslyckades. Försök igen.", + "captcha.required": "Verifiering krävs. Försök igen.", "channels_and_guilds.afk_channel_must_be_in_guild": "AFK-kanalen måste tillhöra denna community.", "channels_and_guilds.afk_channel_must_be_voice": "AFK-kanalen måste vara en röstkanal.", "channels_and_guilds.all_channels_must_belong_to_guild": "Alla kanaler måste tillhöra denna community.", diff --git a/packages/errors/src/i18n/locales/th.ts b/packages/errors/src/i18n/locales/th.ts index 5cef2ddc9..9a8ad348a 100644 --- a/packages/errors/src/i18n/locales/th.ts +++ b/packages/errors/src/i18n/locales/th.ts @@ -140,8 +140,8 @@ const ERROR_I18N_TH_MESSAGES = defineErrorI18nLocaleMessages({ "calls_and_voice.voice_message_duration_required": "ไฟล์แนบข้อความเสียงต้องกำหนดระยะเวลา", "calls_and_voice.voice_message_waveform_required": "ไฟล์แนบข้อความเสียงต้องแนบข้อมูลรูปคลื่น", "calls_and_voice.voice_messages_require_single_attachment": "ข้อความเสียงต้องมีไฟล์แนบเพียงไฟล์เดียวเท่านั้น", - "captcha.invalid": "แคปต์ชาไม่ถูกต้อง", - "captcha.required": "ต้องใส่แคปต์ชา", + "captcha.invalid": "การยืนยันล้มเหลว ลองอีกครั้ง", + "captcha.required": "ต้องมีการยืนยัน ลองอีกครั้ง", "channels_and_guilds.afk_channel_must_be_in_guild": "ช่อง AFK ต้องอยู่ในคอมมูนิตี้นี้", "channels_and_guilds.afk_channel_must_be_voice": "ช่อง AFK ต้องเป็นช่องเสียง", "channels_and_guilds.all_channels_must_belong_to_guild": "ทุกช่องต้องอยู่ในคอมมูนิตี้นี้เท่านั้น", diff --git a/packages/errors/src/i18n/locales/tr.ts b/packages/errors/src/i18n/locales/tr.ts index d60e974aa..91110b4ed 100644 --- a/packages/errors/src/i18n/locales/tr.ts +++ b/packages/errors/src/i18n/locales/tr.ts @@ -140,8 +140,8 @@ const ERROR_I18N_TR_MESSAGES = defineErrorI18nLocaleMessages({ "calls_and_voice.voice_message_duration_required": "Sesli mesaj ekleri bir süre belirtmeli.", "calls_and_voice.voice_message_waveform_required": "Sesli mesaj ekleri dalga biçimi verilerini içermeli.", "calls_and_voice.voice_messages_require_single_attachment": "Sesli mesajlar tam olarak bir ek içermeli.", - "captcha.invalid": "Geçersiz captcha.", - "captcha.required": "Captcha gerekli.", + "captcha.invalid": "Doğrulama başarısız oldu. Tekrar dene.", + "captcha.required": "Doğrulama gerekli. Tekrar dene.", "channels_and_guilds.afk_channel_must_be_in_guild": "AFK kanalı bu toplulukta olmalı.", "channels_and_guilds.afk_channel_must_be_voice": "AFK kanalı bir sesli kanal olmalı.", "channels_and_guilds.all_channels_must_belong_to_guild": "Tüm kanallar bu toplulukta olmalı.", diff --git a/packages/errors/src/i18n/locales/uk.ts b/packages/errors/src/i18n/locales/uk.ts index 4bf3492f8..53d26a4ce 100644 --- a/packages/errors/src/i18n/locales/uk.ts +++ b/packages/errors/src/i18n/locales/uk.ts @@ -140,8 +140,8 @@ const ERROR_I18N_UK_MESSAGES = defineErrorI18nLocaleMessages({ "calls_and_voice.voice_message_duration_required": "У вкладеннях голосових повідомлень має бути вказана тривалість.", "calls_and_voice.voice_message_waveform_required": "Вкладення голосових повідомлень мають містити дані форми хвилі.", "calls_and_voice.voice_messages_require_single_attachment": "Голосові повідомлення мають містити рівно одне вкладення.", - "captcha.invalid": "Недійсна капча.", - "captcha.required": "Капча обов'язкова.", + "captcha.invalid": "Перевірку не пройдено. Спробуй ще раз.", + "captcha.required": "Потрібна перевірка. Спробуй ще раз.", "channels_and_guilds.afk_channel_must_be_in_guild": "AFK-канал має належати цій спільноті.", "channels_and_guilds.afk_channel_must_be_voice": "AFK-канал має бути голосовим каналом.", "channels_and_guilds.all_channels_must_belong_to_guild": "Усі канали мають належати цій спільноті.", diff --git a/packages/errors/src/i18n/locales/vi.ts b/packages/errors/src/i18n/locales/vi.ts index 3a3c9caab..8f8a1255c 100644 --- a/packages/errors/src/i18n/locales/vi.ts +++ b/packages/errors/src/i18n/locales/vi.ts @@ -140,8 +140,8 @@ const ERROR_I18N_VI_MESSAGES = defineErrorI18nLocaleMessages({ "calls_and_voice.voice_message_duration_required": "Tệp đính kèm tin nhắn thoại phải có thời lượng.", "calls_and_voice.voice_message_waveform_required": "Tệp đính kèm tin nhắn thoại phải bao gồm dữ liệu dạng sóng.", "calls_and_voice.voice_messages_require_single_attachment": "Tin nhắn thoại phải chứa chính xác một tệp đính kèm.", - "captcha.invalid": "Captcha không hợp lệ.", - "captcha.required": "Captcha là bắt buộc.", + "captcha.invalid": "Xác minh thất bại. Hãy thử lại.", + "captcha.required": "Cần xác minh. Hãy thử lại.", "channels_and_guilds.afk_channel_must_be_in_guild": "Kênh AFK phải thuộc cộng đồng này.", "channels_and_guilds.afk_channel_must_be_voice": "Kênh AFK phải là kênh thoại.", "channels_and_guilds.all_channels_must_belong_to_guild": "Tất cả các kênh phải thuộc cộng đồng này.", diff --git a/packages/errors/src/i18n/locales/zh-CN.ts b/packages/errors/src/i18n/locales/zh-CN.ts index fabbf615a..695aa41f2 100644 --- a/packages/errors/src/i18n/locales/zh-CN.ts +++ b/packages/errors/src/i18n/locales/zh-CN.ts @@ -140,8 +140,8 @@ const ERROR_I18N_ZH_CN_MESSAGES = defineErrorI18nLocaleMessages({ "calls_and_voice.voice_message_duration_required": "语音消息附件必须指定时长。", "calls_and_voice.voice_message_waveform_required": "语音消息附件必须包含波形数据。", "calls_and_voice.voice_messages_require_single_attachment": "语音消息必须仅包含一个附件。", - "captcha.invalid": "无效验证码。", - "captcha.required": "需要验证码。", + "captcha.invalid": "验证失败。请重试。", + "captcha.required": "需要验证。请重试。", "channels_and_guilds.afk_channel_must_be_in_guild": "AFK 频道必须属于此社区。", "channels_and_guilds.afk_channel_must_be_voice": "AFK 频道必须是语音频道。", "channels_and_guilds.all_channels_must_belong_to_guild": "所有频道必须属于此社区。", diff --git a/packages/errors/src/i18n/locales/zh-TW.ts b/packages/errors/src/i18n/locales/zh-TW.ts index 75b4d1b18..74a71da4d 100644 --- a/packages/errors/src/i18n/locales/zh-TW.ts +++ b/packages/errors/src/i18n/locales/zh-TW.ts @@ -140,8 +140,8 @@ const ERROR_I18N_ZH_TW_MESSAGES = defineErrorI18nLocaleMessages({ "calls_and_voice.voice_message_duration_required": "語音訊息附件必須設定持續時間。", "calls_and_voice.voice_message_waveform_required": "語音訊息附件必須包含波形資料。", "calls_and_voice.voice_messages_require_single_attachment": "語音訊息必須只包含一個附件。", - "captcha.invalid": "無效的驗證碼。", - "captcha.required": "需要驗證碼。", + "captcha.invalid": "驗證失敗。請再試一次。", + "captcha.required": "需要驗證。請再試一次。", "channels_and_guilds.afk_channel_must_be_in_guild": "AFK 頻道必須屬於此社群。", "channels_and_guilds.afk_channel_must_be_voice": "AFK 頻道必須為語音頻道。", "channels_and_guilds.all_channels_must_belong_to_guild": "所有頻道都必須屬於此社群。", diff --git a/packages/errors/src/i18n/weblate/locales/ar.json b/packages/errors/src/i18n/weblate/locales/ar.json index 0c0e513af..4610a2872 100644 --- a/packages/errors/src/i18n/weblate/locales/ar.json +++ b/packages/errors/src/i18n/weblate/locales/ar.json @@ -136,8 +136,8 @@ "calls_and_voice.voice_message_duration_required": "يجب أن تحدد مرفقات الرسائل الصوتية مدة.", "calls_and_voice.voice_message_waveform_required": "يجب أن تحتوي مرفقات الرسائل الصوتية على بيانات الموجة الصوتية.", "calls_and_voice.voice_messages_require_single_attachment": "يجب أن تحتوي الرسائل الصوتية على مرفق واحد فقط.", - "captcha.invalid": "اختبار الكابتشا غير صالح.", - "captcha.required": "اختبار الكابتشا مطلوب.", + "captcha.invalid": "فشل التحقق. حاول مرة أخرى.", + "captcha.required": "مطلوب التحقق. حاول مرة أخرى.", "channels_and_guilds.afk_channel_must_be_in_guild": "يجب أن تكون قناة AFK ضمن هذا المجتمع.", "channels_and_guilds.afk_channel_must_be_voice": "يجب أن تكون قناة AFK قناة صوتية.", "channels_and_guilds.all_channels_must_belong_to_guild": "يجب أن تكون جميع القنوات تابعة لهذا المجتمع.", diff --git a/packages/errors/src/i18n/weblate/locales/bg.json b/packages/errors/src/i18n/weblate/locales/bg.json index 9e2ed525b..1615f6e74 100644 --- a/packages/errors/src/i18n/weblate/locales/bg.json +++ b/packages/errors/src/i18n/weblate/locales/bg.json @@ -136,8 +136,8 @@ "calls_and_voice.voice_message_duration_required": "Прикачените файлове към гласови съобщения трябва да имат продължителност.", "calls_and_voice.voice_message_waveform_required": "Прикачените файлове към гласови съобщения трябва да съдържат данни за вълновата форма.", "calls_and_voice.voice_messages_require_single_attachment": "Гласовите съобщения трябва да съдържат точно един прикачен файл.", - "captcha.invalid": "Невалидна капча.", - "captcha.required": "Изисква се капча.", + "captcha.invalid": "Проверката не успя. Опитай отново.", + "captcha.required": "Изисква се проверка. Опитай отново.", "channels_and_guilds.afk_channel_must_be_in_guild": "AFK каналът трябва да е в рамките на тази общност.", "channels_and_guilds.afk_channel_must_be_voice": "AFK каналът трябва да е гласов канал.", "channels_and_guilds.all_channels_must_belong_to_guild": "Всички канали трябва да принадлежат на тази общност.", diff --git a/packages/errors/src/i18n/weblate/locales/cs.json b/packages/errors/src/i18n/weblate/locales/cs.json index 83d30a871..74730cce5 100644 --- a/packages/errors/src/i18n/weblate/locales/cs.json +++ b/packages/errors/src/i18n/weblate/locales/cs.json @@ -136,8 +136,8 @@ "calls_and_voice.voice_message_duration_required": "Přílohy hlasových zpráv musí uvádět délku.", "calls_and_voice.voice_message_waveform_required": "Přílohy hlasových zpráv musí obsahovat data průběhu zvukové vlny.", "calls_and_voice.voice_messages_require_single_attachment": "Hlasové zprávy musí obsahovat právě jednu přílohu.", - "captcha.invalid": "Neplatná CAPTCHA.", - "captcha.required": "CAPTCHA je vyžadována.", + "captcha.invalid": "Ověření se nezdařilo. Zkuste to znovu.", + "captcha.required": "Ověření je nutné. Zkuste to znovu.", "channels_and_guilds.afk_channel_must_be_in_guild": "AFK kanál musí být v této komunitě.", "channels_and_guilds.afk_channel_must_be_voice": "AFK kanál musí být hlasový kanál.", "channels_and_guilds.all_channels_must_belong_to_guild": "Všechny kanály musí být v této komunitě.", diff --git a/packages/errors/src/i18n/weblate/locales/da.json b/packages/errors/src/i18n/weblate/locales/da.json index 60c00edca..8827868d0 100644 --- a/packages/errors/src/i18n/weblate/locales/da.json +++ b/packages/errors/src/i18n/weblate/locales/da.json @@ -136,8 +136,8 @@ "calls_and_voice.voice_message_duration_required": "Vedhæftede filer til talebeskeder skal angive en varighed.", "calls_and_voice.voice_message_waveform_required": "Vedhæftede filer til talebeskeder skal indeholde bølgeformdata.", "calls_and_voice.voice_messages_require_single_attachment": "Talebeskeder skal indeholde præcis én vedhæftet fil.", - "captcha.invalid": "Ugyldig captcha.", - "captcha.required": "Captcha er påkrævet.", + "captcha.invalid": "Bekræftelse mislykkedes. Prøv igen.", + "captcha.required": "Bekræftelse påkrævet. Prøv igen.", "channels_and_guilds.afk_channel_must_be_in_guild": "AFK-kanalen skal være i dette fællesskab.", "channels_and_guilds.afk_channel_must_be_voice": "AFK-kanalen skal være en talekanal.", "channels_and_guilds.all_channels_must_belong_to_guild": "Alle kanaler skal tilhøre dette fællesskab.", diff --git a/packages/errors/src/i18n/weblate/locales/de.json b/packages/errors/src/i18n/weblate/locales/de.json index 7b22041e4..286089c97 100644 --- a/packages/errors/src/i18n/weblate/locales/de.json +++ b/packages/errors/src/i18n/weblate/locales/de.json @@ -136,8 +136,8 @@ "calls_and_voice.voice_message_duration_required": "Für Anhänge von Sprachnachrichten muss eine Dauer angegeben werden.", "calls_and_voice.voice_message_waveform_required": "Anhänge von Sprachnachrichten müssen Wellenformdaten enthalten.", "calls_and_voice.voice_messages_require_single_attachment": "Sprachnachrichten müssen genau einen Anhang enthalten.", - "captcha.invalid": "Das Captcha ist ungültig.", - "captcha.required": "Das Captcha ist erforderlich.", + "captcha.invalid": "Überprüfung fehlgeschlagen. Versuche es erneut.", + "captcha.required": "Überprüfung erforderlich. Versuche es erneut.", "channels_and_guilds.afk_channel_must_be_in_guild": "Der AFK-Kanal muss sich in dieser Community befinden.", "channels_and_guilds.afk_channel_must_be_voice": "Der AFK-Kanal muss ein Sprachkanal sein.", "channels_and_guilds.all_channels_must_belong_to_guild": "Alle Kanäle müssen sich in dieser Community befinden.", diff --git a/packages/errors/src/i18n/weblate/locales/el.json b/packages/errors/src/i18n/weblate/locales/el.json index 9442e4479..18025353c 100644 --- a/packages/errors/src/i18n/weblate/locales/el.json +++ b/packages/errors/src/i18n/weblate/locales/el.json @@ -136,8 +136,8 @@ "calls_and_voice.voice_message_duration_required": "Τα συνημμένα φωνητικών μηνυμάτων πρέπει να έχουν διάρκεια.", "calls_and_voice.voice_message_waveform_required": "Τα συνημμένα φωνητικών μηνυμάτων πρέπει να περιέχουν δεδομένα κυματομορφής.", "calls_and_voice.voice_messages_require_single_attachment": "Τα φωνητικά μηνύματα πρέπει να περιέχουν ακριβώς ένα συνημμένο.", - "captcha.invalid": "Μη έγκυρο captcha.", - "captcha.required": "Απαιτείται captcha.", + "captcha.invalid": "Η επαλήθευση απέτυχε. Δοκίμασε ξανά.", + "captcha.required": "Απαιτείται επαλήθευση. Δοκίμασε ξανά.", "channels_and_guilds.afk_channel_must_be_in_guild": "Το κανάλι AFK πρέπει να βρίσκεται σε αυτήν την κοινότητα.", "channels_and_guilds.afk_channel_must_be_voice": "Το κανάλι AFK πρέπει να είναι φωνητικό κανάλι.", "channels_and_guilds.all_channels_must_belong_to_guild": "Όλα τα κανάλια πρέπει να βρίσκονται σε αυτήν την κοινότητα.", diff --git a/packages/errors/src/i18n/weblate/locales/en-GB.json b/packages/errors/src/i18n/weblate/locales/en-GB.json index 8c7717087..edf40fafe 100644 --- a/packages/errors/src/i18n/weblate/locales/en-GB.json +++ b/packages/errors/src/i18n/weblate/locales/en-GB.json @@ -136,8 +136,8 @@ "calls_and_voice.voice_message_duration_required": "Voice message attachments must specify a duration.", "calls_and_voice.voice_message_waveform_required": "Voice message attachments must include waveform data.", "calls_and_voice.voice_messages_require_single_attachment": "Voice messages must contain exactly one attachment.", - "captcha.invalid": "Invalid captcha.", - "captcha.required": "Captcha is required.", + "captcha.invalid": "Verification failed. Try again.", + "captcha.required": "Verification required. Try again.", "channels_and_guilds.afk_channel_must_be_in_guild": "AFK channel must be in this community.", "channels_and_guilds.afk_channel_must_be_voice": "AFK channel must be a voice channel.", "channels_and_guilds.all_channels_must_belong_to_guild": "All channels must belong to this community.", diff --git a/packages/errors/src/i18n/weblate/locales/es-419.json b/packages/errors/src/i18n/weblate/locales/es-419.json index ed5e0ed58..90a0ac4a1 100644 --- a/packages/errors/src/i18n/weblate/locales/es-419.json +++ b/packages/errors/src/i18n/weblate/locales/es-419.json @@ -136,8 +136,8 @@ "calls_and_voice.voice_message_duration_required": "Los archivos adjuntos de mensajes de voz deben especificar una duración.", "calls_and_voice.voice_message_waveform_required": "Los archivos adjuntos de mensajes de voz deben incluir datos de onda.", "calls_and_voice.voice_messages_require_single_attachment": "Los mensajes de voz deben contener exactamente un archivo adjunto.", - "captcha.invalid": "Captcha inválido.", - "captcha.required": "Se requiere captcha.", + "captcha.invalid": "Verificación fallida. Inténtalo de nuevo.", + "captcha.required": "Verificación requerida. Inténtalo de nuevo.", "channels_and_guilds.afk_channel_must_be_in_guild": "El canal AFK debe estar en esta comunidad.", "channels_and_guilds.afk_channel_must_be_voice": "El canal AFK debe ser un canal de voz.", "channels_and_guilds.all_channels_must_belong_to_guild": "Todos los canales deben pertenecer a esta comunidad.", diff --git a/packages/errors/src/i18n/weblate/locales/es-ES.json b/packages/errors/src/i18n/weblate/locales/es-ES.json index d16f16881..56fa45ee9 100644 --- a/packages/errors/src/i18n/weblate/locales/es-ES.json +++ b/packages/errors/src/i18n/weblate/locales/es-ES.json @@ -136,8 +136,8 @@ "calls_and_voice.voice_message_duration_required": "Los archivos adjuntos de mensajes de voz deben especificar una duración.", "calls_and_voice.voice_message_waveform_required": "Los archivos adjuntos de mensajes de voz deben incluir datos de forma de onda.", "calls_and_voice.voice_messages_require_single_attachment": "Los mensajes de voz deben contener exactamente un archivo adjunto.", - "captcha.invalid": "Captcha no válido.", - "captcha.required": "Se requiere captcha.", + "captcha.invalid": "Verificación fallida. Inténtalo de nuevo.", + "captcha.required": "Verificación necesaria. Inténtalo de nuevo.", "channels_and_guilds.afk_channel_must_be_in_guild": "El canal AFK debe pertenecer a esta comunidad.", "channels_and_guilds.afk_channel_must_be_voice": "El canal AFK debe ser un canal de voz.", "channels_and_guilds.all_channels_must_belong_to_guild": "Todos los canales deben pertenecer a esta comunidad.", diff --git a/packages/errors/src/i18n/weblate/locales/fi.json b/packages/errors/src/i18n/weblate/locales/fi.json index eefe5b968..f8d551d4c 100644 --- a/packages/errors/src/i18n/weblate/locales/fi.json +++ b/packages/errors/src/i18n/weblate/locales/fi.json @@ -136,8 +136,8 @@ "calls_and_voice.voice_message_duration_required": "Ääniviestin liitteiden on sisällettävä kesto.", "calls_and_voice.voice_message_waveform_required": "Ääniviestin liitteiden on sisällettävä aaltomuotodataa.", "calls_and_voice.voice_messages_require_single_attachment": "Ääniviestien on sisällettävä täsmälleen yksi liite.", - "captcha.invalid": "Virheellinen captcha.", - "captcha.required": "Captcha vaaditaan.", + "captcha.invalid": "Vahvistus epäonnistui. Yritä uudelleen.", + "captcha.required": "Vahvistus vaaditaan. Yritä uudelleen.", "channels_and_guilds.afk_channel_must_be_in_guild": "AFK-kanavan on oltava tässä yhteisössä.", "channels_and_guilds.afk_channel_must_be_voice": "AFK-kanavan on oltava äänikanava.", "channels_and_guilds.all_channels_must_belong_to_guild": "Kaikkien kanavien on kuuluttava tähän yhteisöön.", diff --git a/packages/errors/src/i18n/weblate/locales/fr.json b/packages/errors/src/i18n/weblate/locales/fr.json index d5d81ceaf..2b94ba693 100644 --- a/packages/errors/src/i18n/weblate/locales/fr.json +++ b/packages/errors/src/i18n/weblate/locales/fr.json @@ -136,8 +136,8 @@ "calls_and_voice.voice_message_duration_required": "Les pièces jointes des messages vocaux doivent spécifier une durée.", "calls_and_voice.voice_message_waveform_required": "Les pièces jointes des messages vocaux doivent inclure des données de forme d'onde.", "calls_and_voice.voice_messages_require_single_attachment": "Les messages vocaux doivent contenir exactement une pièce jointe.", - "captcha.invalid": "Captcha invalide.", - "captcha.required": "Le captcha est requis.", + "captcha.invalid": "Échec de la vérification. Réessayez.", + "captcha.required": "Vérification requise. Réessayez.", "channels_and_guilds.afk_channel_must_be_in_guild": "Le salon AFK doit être dans cette communauté.", "channels_and_guilds.afk_channel_must_be_voice": "Le salon AFK doit être un salon vocal.", "channels_and_guilds.all_channels_must_belong_to_guild": "Tous les salons doivent appartenir à cette communauté.", diff --git a/packages/errors/src/i18n/weblate/locales/he.json b/packages/errors/src/i18n/weblate/locales/he.json index 670e9a4e4..c866a341f 100644 --- a/packages/errors/src/i18n/weblate/locales/he.json +++ b/packages/errors/src/i18n/weblate/locales/he.json @@ -136,8 +136,8 @@ "calls_and_voice.voice_message_duration_required": "קבצים מצורפים של הודעות קוליות חייבים לציין משך זמן.", "calls_and_voice.voice_message_waveform_required": "קבצים מצורפים של הודעות קוליות חייבים לכלול נתוני צורת גל.", "calls_and_voice.voice_messages_require_single_attachment": "הודעות קוליות חייבות לכלול קובץ מצורף אחד בלבד.", - "captcha.invalid": "קאפצ'ה שגויה.", - "captcha.required": "נדרשת קאפצ'ה.", + "captcha.invalid": "האימות נכשל. ניתן לנסות שוב.", + "captcha.required": "נדרש אימות. ניתן לנסות שוב.", "channels_and_guilds.afk_channel_must_be_in_guild": "ערוץ AFK חייב להיות בקהילה זו.", "channels_and_guilds.afk_channel_must_be_voice": "ערוץ AFK חייב להיות ערוץ קולי.", "channels_and_guilds.all_channels_must_belong_to_guild": "כל הערוצים חייבים להשתייך לקהילה זו.", diff --git a/packages/errors/src/i18n/weblate/locales/hi.json b/packages/errors/src/i18n/weblate/locales/hi.json index 741542e9a..b27332fe5 100644 --- a/packages/errors/src/i18n/weblate/locales/hi.json +++ b/packages/errors/src/i18n/weblate/locales/hi.json @@ -136,8 +136,8 @@ "calls_and_voice.voice_message_duration_required": "वॉइस मैसेज अटैचमेंट में ड्यूरेशन बतानी होगी।", "calls_and_voice.voice_message_waveform_required": "वॉइस मैसेज अटैचमेंट में वेवफ़ॉर्म डेटा होना चाहिए।", "calls_and_voice.voice_messages_require_single_attachment": "वॉइस मैसेज में केवल एक अटैचमेंट होना चाहिए।", - "captcha.invalid": "अमान्य कैप्चा।", - "captcha.required": "कैप्चा ज़रूरी है।", + "captcha.invalid": "सत्यापन विफल रहा। फिर से कोशिश करें।", + "captcha.required": "सत्यापन आवश्यक है। फिर से कोशिश करें।", "channels_and_guilds.afk_channel_must_be_in_guild": "AFK चैनल इस कम्युनिटी में होना चाहिए।", "channels_and_guilds.afk_channel_must_be_voice": "AFK चैनल एक वॉइस चैनल होना चाहिए।", "channels_and_guilds.all_channels_must_belong_to_guild": "सभी चैनल इस कम्युनिटी के होने चाहिए।", diff --git a/packages/errors/src/i18n/weblate/locales/hr.json b/packages/errors/src/i18n/weblate/locales/hr.json index 9f430e2c3..a30964822 100644 --- a/packages/errors/src/i18n/weblate/locales/hr.json +++ b/packages/errors/src/i18n/weblate/locales/hr.json @@ -136,8 +136,8 @@ "calls_and_voice.voice_message_duration_required": "Privici glasovne poruke moraju imati navedeno trajanje.", "calls_and_voice.voice_message_waveform_required": "Privici glasovne poruke moraju sadržavati podatke o valnom obliku.", "calls_and_voice.voice_messages_require_single_attachment": "Glasovne poruke moraju sadržavati točno jedan privitak.", - "captcha.invalid": "Nevažeća captcha.", - "captcha.required": "Captcha je obavezna.", + "captcha.invalid": "Provjera nije uspjela. Pokušaj ponovno.", + "captcha.required": "Potrebna je provjera. Pokušaj ponovno.", "channels_and_guilds.afk_channel_must_be_in_guild": "AFK kanal mora biti u ovoj zajednici.", "channels_and_guilds.afk_channel_must_be_voice": "AFK kanal mora biti glasovni kanal.", "channels_and_guilds.all_channels_must_belong_to_guild": "Svi kanali moraju pripadati ovoj zajednici.", diff --git a/packages/errors/src/i18n/weblate/locales/hu.json b/packages/errors/src/i18n/weblate/locales/hu.json index 248bfa162..f50fd4a73 100644 --- a/packages/errors/src/i18n/weblate/locales/hu.json +++ b/packages/errors/src/i18n/weblate/locales/hu.json @@ -136,8 +136,8 @@ "calls_and_voice.voice_message_duration_required": "A hangüzenet mellékleteihez meg kell adni az időtartamot.", "calls_and_voice.voice_message_waveform_required": "A hangüzenet mellékleteinek hullámformaadatokat kell tartalmazniuk.", "calls_and_voice.voice_messages_require_single_attachment": "A hangüzeneteknek pontosan egy mellékletet kell tartalmazniuk.", - "captcha.invalid": "Érvénytelen captcha kód.", - "captcha.required": "A captcha kód szükséges.", + "captcha.invalid": "Ellenőrzés sikertelen. Próbáld újra.", + "captcha.required": "Ellenőrzés szükséges. Próbáld újra.", "channels_and_guilds.afk_channel_must_be_in_guild": "Az AFK-csatornának ebben a közösségben kell lennie.", "channels_and_guilds.afk_channel_must_be_voice": "Az AFK-csatornának hangcsatornának kell lennie.", "channels_and_guilds.all_channels_must_belong_to_guild": "Minden csatornának ehhez a közösséghez kell tartoznia.", diff --git a/packages/errors/src/i18n/weblate/locales/id.json b/packages/errors/src/i18n/weblate/locales/id.json index e2430eeb2..a9ad12423 100644 --- a/packages/errors/src/i18n/weblate/locales/id.json +++ b/packages/errors/src/i18n/weblate/locales/id.json @@ -136,8 +136,8 @@ "calls_and_voice.voice_message_duration_required": "Lampiran pesan suara harus menentukan durasi.", "calls_and_voice.voice_message_waveform_required": "Lampiran pesan suara harus menyertakan data bentuk gelombang.", "calls_and_voice.voice_messages_require_single_attachment": "Pesan suara harus berisi tepat satu lampiran.", - "captcha.invalid": "Captcha tidak valid.", - "captcha.required": "Captcha diperlukan.", + "captcha.invalid": "Verifikasi gagal. Coba lagi.", + "captcha.required": "Verifikasi diperlukan. Coba lagi.", "channels_and_guilds.afk_channel_must_be_in_guild": "Saluran AFK harus ada di komunitas ini.", "channels_and_guilds.afk_channel_must_be_voice": "Saluran AFK harus berupa saluran suara.", "channels_and_guilds.all_channels_must_belong_to_guild": "Semua saluran harus ada di komunitas ini.", diff --git a/packages/errors/src/i18n/weblate/locales/it.json b/packages/errors/src/i18n/weblate/locales/it.json index 7d52559a5..d4a968788 100644 --- a/packages/errors/src/i18n/weblate/locales/it.json +++ b/packages/errors/src/i18n/weblate/locales/it.json @@ -136,8 +136,8 @@ "calls_and_voice.voice_message_duration_required": "Gli allegati dei messaggi vocali devono specificare una durata.", "calls_and_voice.voice_message_waveform_required": "Gli allegati dei messaggi vocali devono includere i dati della forma d'onda.", "calls_and_voice.voice_messages_require_single_attachment": "I messaggi vocali devono contenere esattamente un allegato.", - "captcha.invalid": "Captcha non valido.", - "captcha.required": "Il Captcha è richiesto.", + "captcha.invalid": "Verifica non riuscita. Riprova.", + "captcha.required": "Verifica richiesta. Riprova.", "channels_and_guilds.afk_channel_must_be_in_guild": "Il canale AFK deve appartenere a questa Community.", "channels_and_guilds.afk_channel_must_be_voice": "Il canale AFK deve essere un canale vocale.", "channels_and_guilds.all_channels_must_belong_to_guild": "Tutti i canali devono appartenere a questa Community.", diff --git a/packages/errors/src/i18n/weblate/locales/ja.json b/packages/errors/src/i18n/weblate/locales/ja.json index 7283c57db..d37c66426 100644 --- a/packages/errors/src/i18n/weblate/locales/ja.json +++ b/packages/errors/src/i18n/weblate/locales/ja.json @@ -136,8 +136,8 @@ "calls_and_voice.voice_message_duration_required": "ボイスメッセージの添付ファイルには長さを指定する必要があります。", "calls_and_voice.voice_message_waveform_required": "ボイスメッセージの添付ファイルには波形データを含める必要があります。", "calls_and_voice.voice_messages_require_single_attachment": "ボイスメッセージには添付ファイルが1つだけ必要です。", - "captcha.invalid": "CAPTCHAが無効です。", - "captcha.required": "CAPTCHAが必要です。", + "captcha.invalid": "確認に失敗しました。もう一度お試しください。", + "captcha.required": "確認が必要です。もう一度お試しください。", "channels_and_guilds.afk_channel_must_be_in_guild": "AFKチャンネルはこのコミュニティ内に設定する必要があります。", "channels_and_guilds.afk_channel_must_be_voice": "AFKチャンネルはボイスチャンネルである必要があります。", "channels_and_guilds.all_channels_must_belong_to_guild": "すべてのチャンネルはこのコミュニティに属している必要があります。", diff --git a/packages/errors/src/i18n/weblate/locales/ko.json b/packages/errors/src/i18n/weblate/locales/ko.json index 94d9f7c79..89218f159 100644 --- a/packages/errors/src/i18n/weblate/locales/ko.json +++ b/packages/errors/src/i18n/weblate/locales/ko.json @@ -136,8 +136,8 @@ "calls_and_voice.voice_message_duration_required": "음성 메시지 첨부 파일은 길이를 지정해야 해요.", "calls_and_voice.voice_message_waveform_required": "음성 메시지 첨부 파일에는 파형 데이터가 포함되어야 해요.", "calls_and_voice.voice_messages_require_single_attachment": "음성 메시지에는 첨부 파일이 하나만 포함되어야 해요.", - "captcha.invalid": "유효하지 않은 캡차예요.", - "captcha.required": "캡차가 필요해요.", + "captcha.invalid": "확인하지 못했어요. 다시 시도해 주세요.", + "captcha.required": "확인이 필요해요. 다시 시도해 주세요.", "channels_and_guilds.afk_channel_must_be_in_guild": "자리 비움 채널은 이 커뮤니티에 있어야 해요.", "channels_and_guilds.afk_channel_must_be_voice": "자리 비움 채널은 음성 채널이어야 해요.", "channels_and_guilds.all_channels_must_belong_to_guild": "모든 채널은 이 커뮤니티에 속해야 해요.", diff --git a/packages/errors/src/i18n/weblate/locales/lt.json b/packages/errors/src/i18n/weblate/locales/lt.json index 6b012d634..ee132dcdb 100644 --- a/packages/errors/src/i18n/weblate/locales/lt.json +++ b/packages/errors/src/i18n/weblate/locales/lt.json @@ -136,8 +136,8 @@ "calls_and_voice.voice_message_duration_required": "Balso žinutės priedai turi nurodyti trukmę.", "calls_and_voice.voice_message_waveform_required": "Balso žinutės prieduose turi būti bangos formos duomenys.", "calls_and_voice.voice_messages_require_single_attachment": "Balso žinutėse turi būti lygiai vienas priedas.", - "captcha.invalid": "Neteisinga captcha.", - "captcha.required": "Reikalinga captcha.", + "captcha.invalid": "Nepavyko patvirtinti. Bandyk dar kartą.", + "captcha.required": "Reikalingas patvirtinimas. Bandyk dar kartą.", "channels_and_guilds.afk_channel_must_be_in_guild": "AFK kanalas turi būti šioje bendruomenėje.", "channels_and_guilds.afk_channel_must_be_voice": "AFK kanalas turi būti balso kanalas.", "channels_and_guilds.all_channels_must_belong_to_guild": "Visi kanalai turi būti šioje bendruomenėje.", diff --git a/packages/errors/src/i18n/weblate/locales/nl.json b/packages/errors/src/i18n/weblate/locales/nl.json index fc9feebd8..bdddaff74 100644 --- a/packages/errors/src/i18n/weblate/locales/nl.json +++ b/packages/errors/src/i18n/weblate/locales/nl.json @@ -136,8 +136,8 @@ "calls_and_voice.voice_message_duration_required": "Bij spraakberichtbijlagen moet de duur worden opgegeven.", "calls_and_voice.voice_message_waveform_required": "Spraakberichtbijlagen moeten golfvormgegevens bevatten.", "calls_and_voice.voice_messages_require_single_attachment": "Spraakberichten moeten precies één bijlage bevatten.", - "captcha.invalid": "Ongeldige CAPTCHA.", - "captcha.required": "CAPTCHA is vereist.", + "captcha.invalid": "Verificatie mislukt. Probeer het opnieuw.", + "captcha.required": "Verificatie vereist. Probeer het opnieuw.", "channels_and_guilds.afk_channel_must_be_in_guild": "Het AFK-kanaal moet deel uitmaken van deze community.", "channels_and_guilds.afk_channel_must_be_voice": "Het AFK-kanaal moet een spraakkanaal zijn.", "channels_and_guilds.all_channels_must_belong_to_guild": "Alle kanalen moeten deel uitmaken van deze community.", diff --git a/packages/errors/src/i18n/weblate/locales/no.json b/packages/errors/src/i18n/weblate/locales/no.json index 54ef5d4e3..2a8654b2e 100644 --- a/packages/errors/src/i18n/weblate/locales/no.json +++ b/packages/errors/src/i18n/weblate/locales/no.json @@ -136,8 +136,8 @@ "calls_and_voice.voice_message_duration_required": "Vedlegg til talemeldinger må angi en varighet.", "calls_and_voice.voice_message_waveform_required": "Vedlegg til talemeldinger må inneholde bølgeformdata.", "calls_and_voice.voice_messages_require_single_attachment": "Talemeldinger må inneholde nøyaktig ett vedlegg.", - "captcha.invalid": "Ugyldig captcha.", - "captcha.required": "Captcha er påkrevd.", + "captcha.invalid": "Verifisering mislyktes. Prøv igjen.", + "captcha.required": "Verifisering kreves. Prøv igjen.", "channels_and_guilds.afk_channel_must_be_in_guild": "AFK-kanalen må være i dette fellesskapet.", "channels_and_guilds.afk_channel_must_be_voice": "AFK-kanalen må være en talekanal.", "channels_and_guilds.all_channels_must_belong_to_guild": "Alle kanaler må tilhøre dette fellesskapet.", diff --git a/packages/errors/src/i18n/weblate/locales/pl.json b/packages/errors/src/i18n/weblate/locales/pl.json index ade92ff24..3ed2c479c 100644 --- a/packages/errors/src/i18n/weblate/locales/pl.json +++ b/packages/errors/src/i18n/weblate/locales/pl.json @@ -136,8 +136,8 @@ "calls_and_voice.voice_message_duration_required": "Załączniki wiadomości głosowych muszą określać czas trwania.", "calls_and_voice.voice_message_waveform_required": "Załączniki wiadomości głosowych muszą zawierać dane przebiegu fali dźwiękowej.", "calls_and_voice.voice_messages_require_single_attachment": "Wiadomości głosowe muszą zawierać dokładnie jeden załącznik.", - "captcha.invalid": "Nieprawidłowa captcha.", - "captcha.required": "Captcha jest wymagana.", + "captcha.invalid": "Weryfikacja nie powiodła się. Spróbuj ponownie.", + "captcha.required": "Weryfikacja wymagana. Spróbuj ponownie.", "channels_and_guilds.afk_channel_must_be_in_guild": "Kanał AFK musi znajdować się w tej społeczności.", "channels_and_guilds.afk_channel_must_be_voice": "Kanał AFK musi być kanałem głosowym.", "channels_and_guilds.all_channels_must_belong_to_guild": "Wszystkie kanały muszą znajdować się w tej społeczności.", diff --git a/packages/errors/src/i18n/weblate/locales/pt-BR.json b/packages/errors/src/i18n/weblate/locales/pt-BR.json index 3bcd34351..e4d8576eb 100644 --- a/packages/errors/src/i18n/weblate/locales/pt-BR.json +++ b/packages/errors/src/i18n/weblate/locales/pt-BR.json @@ -136,8 +136,8 @@ "calls_and_voice.voice_message_duration_required": "Os anexos de mensagem de voz devem especificar uma duração.", "calls_and_voice.voice_message_waveform_required": "Os anexos de mensagem de voz devem incluir dados da forma de onda.", "calls_and_voice.voice_messages_require_single_attachment": "As mensagens de voz devem conter exatamente um anexo.", - "captcha.invalid": "CAPTCHA inválido.", - "captcha.required": "CAPTCHA é obrigatório.", + "captcha.invalid": "Falha na verificação. Tente novamente.", + "captcha.required": "Verificação necessária. Tente novamente.", "channels_and_guilds.afk_channel_must_be_in_guild": "O canal AFK deve estar nesta comunidade.", "channels_and_guilds.afk_channel_must_be_voice": "O canal AFK deve ser um canal de voz.", "channels_and_guilds.all_channels_must_belong_to_guild": "Todos os canais devem pertencer a esta comunidade.", diff --git a/packages/errors/src/i18n/weblate/locales/ro.json b/packages/errors/src/i18n/weblate/locales/ro.json index eee6b2692..1e58c14f8 100644 --- a/packages/errors/src/i18n/weblate/locales/ro.json +++ b/packages/errors/src/i18n/weblate/locales/ro.json @@ -136,8 +136,8 @@ "calls_and_voice.voice_message_duration_required": "Atașamentele mesajelor vocale trebuie să specifice o durată.", "calls_and_voice.voice_message_waveform_required": "Atașamentele mesajelor vocale trebuie să includă datele formei de undă.", "calls_and_voice.voice_messages_require_single_attachment": "Mesajele vocale trebuie să conțină exact un atașament.", - "captcha.invalid": "Captcha invalid.", - "captcha.required": "Captcha este necesar.", + "captcha.invalid": "Verificare eșuată. Încearcă din nou.", + "captcha.required": "Verificare necesară. Încearcă din nou.", "channels_and_guilds.afk_channel_must_be_in_guild": "Canalul AFK trebuie să fie în această comunitate.", "channels_and_guilds.afk_channel_must_be_voice": "Canalul AFK trebuie să fie un canal vocal.", "channels_and_guilds.all_channels_must_belong_to_guild": "Toate canalele trebuie să facă parte din această comunitate.", diff --git a/packages/errors/src/i18n/weblate/locales/ru.json b/packages/errors/src/i18n/weblate/locales/ru.json index 558112b3b..7215d6d4b 100644 --- a/packages/errors/src/i18n/weblate/locales/ru.json +++ b/packages/errors/src/i18n/weblate/locales/ru.json @@ -136,8 +136,8 @@ "calls_and_voice.voice_message_duration_required": "У вложений голосовых сообщений должна быть указана длительность.", "calls_and_voice.voice_message_waveform_required": "Вложения голосовых сообщений должны содержать данные формы волны.", "calls_and_voice.voice_messages_require_single_attachment": "Голосовые сообщения должны содержать ровно одно вложение.", - "captcha.invalid": "Капча недействительна.", - "captcha.required": "Требуется капча.", + "captcha.invalid": "Проверка не удалась. Повторите попытку.", + "captcha.required": "Требуется проверка. Повторите попытку.", "channels_and_guilds.afk_channel_must_be_in_guild": "Канал AFK должен быть в этом сообществе.", "channels_and_guilds.afk_channel_must_be_voice": "Канал AFK должен быть голосовым.", "channels_and_guilds.all_channels_must_belong_to_guild": "Все каналы должны принадлежать этому сообществу.", diff --git a/packages/errors/src/i18n/weblate/locales/sv-SE.json b/packages/errors/src/i18n/weblate/locales/sv-SE.json index 066855e0a..39b846a58 100644 --- a/packages/errors/src/i18n/weblate/locales/sv-SE.json +++ b/packages/errors/src/i18n/weblate/locales/sv-SE.json @@ -136,8 +136,8 @@ "calls_and_voice.voice_message_duration_required": "Bilagor till röstmeddelanden måste ha en angiven speltid.", "calls_and_voice.voice_message_waveform_required": "Bilagor till röstmeddelanden måste innehålla vågformsdata.", "calls_and_voice.voice_messages_require_single_attachment": "Röstmeddelanden måste innehålla exakt en bilaga.", - "captcha.invalid": "Ogiltig captcha.", - "captcha.required": "Captcha krävs.", + "captcha.invalid": "Verifieringen misslyckades. Försök igen.", + "captcha.required": "Verifiering krävs. Försök igen.", "channels_and_guilds.afk_channel_must_be_in_guild": "AFK-kanalen måste tillhöra denna community.", "channels_and_guilds.afk_channel_must_be_voice": "AFK-kanalen måste vara en röstkanal.", "channels_and_guilds.all_channels_must_belong_to_guild": "Alla kanaler måste tillhöra denna community.", diff --git a/packages/errors/src/i18n/weblate/locales/th.json b/packages/errors/src/i18n/weblate/locales/th.json index 32ea017da..f419540df 100644 --- a/packages/errors/src/i18n/weblate/locales/th.json +++ b/packages/errors/src/i18n/weblate/locales/th.json @@ -136,8 +136,8 @@ "calls_and_voice.voice_message_duration_required": "ไฟล์แนบข้อความเสียงต้องกำหนดระยะเวลา", "calls_and_voice.voice_message_waveform_required": "ไฟล์แนบข้อความเสียงต้องแนบข้อมูลรูปคลื่น", "calls_and_voice.voice_messages_require_single_attachment": "ข้อความเสียงต้องมีไฟล์แนบเพียงไฟล์เดียวเท่านั้น", - "captcha.invalid": "แคปต์ชาไม่ถูกต้อง", - "captcha.required": "ต้องใส่แคปต์ชา", + "captcha.invalid": "การยืนยันล้มเหลว ลองอีกครั้ง", + "captcha.required": "ต้องมีการยืนยัน ลองอีกครั้ง", "channels_and_guilds.afk_channel_must_be_in_guild": "ช่อง AFK ต้องอยู่ในคอมมูนิตี้นี้", "channels_and_guilds.afk_channel_must_be_voice": "ช่อง AFK ต้องเป็นช่องเสียง", "channels_and_guilds.all_channels_must_belong_to_guild": "ทุกช่องต้องอยู่ในคอมมูนิตี้นี้เท่านั้น", diff --git a/packages/errors/src/i18n/weblate/locales/tr.json b/packages/errors/src/i18n/weblate/locales/tr.json index f1ba0f408..dba4dcdeb 100644 --- a/packages/errors/src/i18n/weblate/locales/tr.json +++ b/packages/errors/src/i18n/weblate/locales/tr.json @@ -136,8 +136,8 @@ "calls_and_voice.voice_message_duration_required": "Sesli mesaj ekleri bir süre belirtmeli.", "calls_and_voice.voice_message_waveform_required": "Sesli mesaj ekleri dalga biçimi verilerini içermeli.", "calls_and_voice.voice_messages_require_single_attachment": "Sesli mesajlar tam olarak bir ek içermeli.", - "captcha.invalid": "Geçersiz captcha.", - "captcha.required": "Captcha gerekli.", + "captcha.invalid": "Doğrulama başarısız oldu. Tekrar dene.", + "captcha.required": "Doğrulama gerekli. Tekrar dene.", "channels_and_guilds.afk_channel_must_be_in_guild": "AFK kanalı bu toplulukta olmalı.", "channels_and_guilds.afk_channel_must_be_voice": "AFK kanalı bir sesli kanal olmalı.", "channels_and_guilds.all_channels_must_belong_to_guild": "Tüm kanallar bu toplulukta olmalı.", diff --git a/packages/errors/src/i18n/weblate/locales/uk.json b/packages/errors/src/i18n/weblate/locales/uk.json index fc4778233..3b6e8eaeb 100644 --- a/packages/errors/src/i18n/weblate/locales/uk.json +++ b/packages/errors/src/i18n/weblate/locales/uk.json @@ -136,8 +136,8 @@ "calls_and_voice.voice_message_duration_required": "У вкладеннях голосових повідомлень має бути вказана тривалість.", "calls_and_voice.voice_message_waveform_required": "Вкладення голосових повідомлень мають містити дані форми хвилі.", "calls_and_voice.voice_messages_require_single_attachment": "Голосові повідомлення мають містити рівно одне вкладення.", - "captcha.invalid": "Недійсна капча.", - "captcha.required": "Капча обов'язкова.", + "captcha.invalid": "Перевірку не пройдено. Спробуй ще раз.", + "captcha.required": "Потрібна перевірка. Спробуй ще раз.", "channels_and_guilds.afk_channel_must_be_in_guild": "AFK-канал має належати цій спільноті.", "channels_and_guilds.afk_channel_must_be_voice": "AFK-канал має бути голосовим каналом.", "channels_and_guilds.all_channels_must_belong_to_guild": "Усі канали мають належати цій спільноті.", diff --git a/packages/errors/src/i18n/weblate/locales/vi.json b/packages/errors/src/i18n/weblate/locales/vi.json index c20225fa4..1fc29602e 100644 --- a/packages/errors/src/i18n/weblate/locales/vi.json +++ b/packages/errors/src/i18n/weblate/locales/vi.json @@ -136,8 +136,8 @@ "calls_and_voice.voice_message_duration_required": "Tệp đính kèm tin nhắn thoại phải có thời lượng.", "calls_and_voice.voice_message_waveform_required": "Tệp đính kèm tin nhắn thoại phải bao gồm dữ liệu dạng sóng.", "calls_and_voice.voice_messages_require_single_attachment": "Tin nhắn thoại phải chứa chính xác một tệp đính kèm.", - "captcha.invalid": "Captcha không hợp lệ.", - "captcha.required": "Captcha là bắt buộc.", + "captcha.invalid": "Xác minh thất bại. Hãy thử lại.", + "captcha.required": "Cần xác minh. Hãy thử lại.", "channels_and_guilds.afk_channel_must_be_in_guild": "Kênh AFK phải thuộc cộng đồng này.", "channels_and_guilds.afk_channel_must_be_voice": "Kênh AFK phải là kênh thoại.", "channels_and_guilds.all_channels_must_belong_to_guild": "Tất cả các kênh phải thuộc cộng đồng này.", diff --git a/packages/errors/src/i18n/weblate/locales/zh-CN.json b/packages/errors/src/i18n/weblate/locales/zh-CN.json index 323bd5811..078efcd0d 100644 --- a/packages/errors/src/i18n/weblate/locales/zh-CN.json +++ b/packages/errors/src/i18n/weblate/locales/zh-CN.json @@ -136,8 +136,8 @@ "calls_and_voice.voice_message_duration_required": "语音消息附件必须指定时长。", "calls_and_voice.voice_message_waveform_required": "语音消息附件必须包含波形数据。", "calls_and_voice.voice_messages_require_single_attachment": "语音消息必须仅包含一个附件。", - "captcha.invalid": "无效验证码。", - "captcha.required": "需要验证码。", + "captcha.invalid": "验证失败。请重试。", + "captcha.required": "需要验证。请重试。", "channels_and_guilds.afk_channel_must_be_in_guild": "AFK 频道必须属于此社区。", "channels_and_guilds.afk_channel_must_be_voice": "AFK 频道必须是语音频道。", "channels_and_guilds.all_channels_must_belong_to_guild": "所有频道必须属于此社区。", diff --git a/packages/errors/src/i18n/weblate/locales/zh-TW.json b/packages/errors/src/i18n/weblate/locales/zh-TW.json index c194556c4..e4bcc5963 100644 --- a/packages/errors/src/i18n/weblate/locales/zh-TW.json +++ b/packages/errors/src/i18n/weblate/locales/zh-TW.json @@ -136,8 +136,8 @@ "calls_and_voice.voice_message_duration_required": "語音訊息附件必須設定持續時間。", "calls_and_voice.voice_message_waveform_required": "語音訊息附件必須包含波形資料。", "calls_and_voice.voice_messages_require_single_attachment": "語音訊息必須只包含一個附件。", - "captcha.invalid": "無效的驗證碼。", - "captcha.required": "需要驗證碼。", + "captcha.invalid": "驗證失敗。請再試一次。", + "captcha.required": "需要驗證。請再試一次。", "channels_and_guilds.afk_channel_must_be_in_guild": "AFK 頻道必須屬於此社群。", "channels_and_guilds.afk_channel_must_be_voice": "AFK 頻道必須為語音頻道。", "channels_and_guilds.all_channels_must_belong_to_guild": "所有頻道都必須屬於此社群。", diff --git a/packages/errors/src/i18n/weblate/messages.json b/packages/errors/src/i18n/weblate/messages.json index 305e043e7..d6dcf59f6 100644 --- a/packages/errors/src/i18n/weblate/messages.json +++ b/packages/errors/src/i18n/weblate/messages.json @@ -136,8 +136,8 @@ "calls_and_voice.voice_message_duration_required": "Voice message attachments must specify a duration.", "calls_and_voice.voice_message_waveform_required": "Voice message attachments must include waveform data.", "calls_and_voice.voice_messages_require_single_attachment": "Voice messages must contain exactly one attachment.", - "captcha.invalid": "Invalid captcha.", - "captcha.required": "Captcha is required.", + "captcha.invalid": "Verification failed. Try again.", + "captcha.required": "Verification required. Try again.", "channels_and_guilds.afk_channel_must_be_in_guild": "AFK channel must be in this community.", "channels_and_guilds.afk_channel_must_be_voice": "AFK channel must be a voice channel.", "channels_and_guilds.all_channels_must_belong_to_guild": "All channels must belong to this community.", diff --git a/packages/schema/src/domains/admin/AdminSchemas.ts b/packages/schema/src/domains/admin/AdminSchemas.ts index c2d6c2c07..115fa3b58 100644 --- a/packages/schema/src/domains/admin/AdminSchemas.ts +++ b/packages/schema/src/domains/admin/AdminSchemas.ts @@ -11,10 +11,7 @@ import {ADMIN_ACL_COUNT, AdminAclType} from '@fluxer/schema/src/domains/admin/Ad import {AdminArchiveResponseSchema} from '@fluxer/schema/src/domains/admin/AdminArchiveSchemas'; import {GuildAdminResponse} from '@fluxer/schema/src/domains/admin/AdminGuildSchemas'; import {UserAdminResponseSchema} from '@fluxer/schema/src/domains/admin/AdminUserSchemas'; -import { - AltchaCaptchaConfigResponse, - AltchaCaptchaConfigUpdateRequest, -} from '@fluxer/schema/src/domains/admin/AltchaCaptchaSchemas'; +import {CaptchaConfigResponse, CaptchaConfigUpdateRequest} from '@fluxer/schema/src/domains/admin/CaptchaSchemas'; import { DomainMigrationConfigResponse, DomainMigrationConfigUpdateRequest, @@ -33,10 +30,7 @@ import { ExperimentDeliveryConfigUpdateRequest, } from '@fluxer/schema/src/domains/experiment/ExperimentSchemas'; import {GuildMemberResponse} from '@fluxer/schema/src/domains/guild/GuildMemberSchemas'; -import { - InstanceCaptchaProviderSchema, - InstanceRegistrationModeSchema, -} from '@fluxer/schema/src/domains/instance/InstanceSchemas'; +import {InstanceRegistrationModeSchema} from '@fluxer/schema/src/domains/instance/InstanceSchemas'; import {MessageResponseSchema} from '@fluxer/schema/src/domains/message/MessageResponseSchemas'; import {GiftCodeDurationTypeSchema} from '@fluxer/schema/src/domains/premium/GiftCodeSchemas'; import {ChannelTypeSchema} from '@fluxer/schema/src/primitives/ChannelValidators'; @@ -608,15 +602,6 @@ const InstanceIntegrationsResponse = z.object({ api_key_set: z.boolean(), effective_available: z.boolean(), }), - captcha: z.object({ - provider: InstanceCaptchaProviderSchema.nullable(), - effective_provider: InstanceCaptchaProviderSchema, - hcaptcha_site_key: z.string().nullable(), - hcaptcha_secret_key_set: z.boolean(), - turnstile_site_key: z.string().nullable(), - turnstile_secret_key_set: z.boolean(), - effective_enabled: z.boolean(), - }), email: z.object({ enabled: z.boolean().nullable(), effective_enabled: z.boolean(), @@ -651,7 +636,7 @@ export const InstanceConfigResponse = z.object({ gateway_rollout: GatewayRolloutConfigResponse, push_relay: PushRelayConfigResponse, domain_migration: DomainMigrationConfigResponse, - altcha_captcha: AltchaCaptchaConfigResponse, + captcha: CaptchaConfigResponse, experiment_delivery: ExperimentDeliveryConfigResponse, registration: InstanceRegistrationResponse, self_hosted: z.boolean(), @@ -683,7 +668,7 @@ export const InstanceConfigUpdateRequest = z.object({ gateway_rollout: GatewayRolloutConfigUpdateRequest.nullish(), push_relay: PushRelayConfigUpdateRequest.nullish(), domain_migration: DomainMigrationConfigUpdateRequest.nullish(), - altcha_captcha: AltchaCaptchaConfigUpdateRequest.nullish(), + captcha: CaptchaConfigUpdateRequest.nullish(), experiment_delivery: ExperimentDeliveryConfigUpdateRequest.nullish(), registration: z .object({ @@ -721,15 +706,6 @@ export const InstanceConfigUpdateRequest = z.object({ api_key: z.string().trim().max(4096).nullish(), }) .nullish(), - captcha: z - .object({ - provider: InstanceCaptchaProviderSchema.nullish(), - hcaptcha_site_key: z.string().trim().max(4096).nullish(), - hcaptcha_secret_key: z.string().trim().max(4096).nullish(), - turnstile_site_key: z.string().trim().max(4096).nullish(), - turnstile_secret_key: z.string().trim().max(4096).nullish(), - }) - .nullish(), email: z .object({ enabled: z.boolean().nullish(), diff --git a/packages/schema/src/domains/admin/AltchaCaptchaSchemas.test.ts b/packages/schema/src/domains/admin/AltchaCaptchaSchemas.test.ts deleted file mode 100644 index 019b7a5f2..000000000 --- a/packages/schema/src/domains/admin/AltchaCaptchaSchemas.test.ts +++ /dev/null @@ -1,145 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -import { - type AltchaCaptchaConfig, - AltchaCaptchaConfigSchema, - AltchaCaptchaConfigUpdateRequest, - altchaCaptchaAppliesTo, - DEFAULT_ALTCHA_CAPTCHA_CONFIG, - resolveAltchaCaptchaAssignment, -} from '@fluxer/schema/src/domains/admin/AltchaCaptchaSchemas'; -import {type ExperimentTargeting, experimentBucket} from '@fluxer/schema/src/domains/experiment/ExperimentBucket'; -import {describe, expect, test} from 'vitest'; - -const NO_TARGETING: ExperimentTargeting = {memberGuildIds: new Set(), premium: false}; - -const TARGETED_USER_ID = '1000000000000000001'; - -function createConfig(overrides: Partial = {}): AltchaCaptchaConfig { - return {...DEFAULT_ALTCHA_CAPTCHA_CONFIG, included_user_ids: [], excluded_user_ids: [], ...overrides}; -} - -function syntheticUserIds(count: number): Array { - return Array.from({length: count}, (_, index) => (1400000000000000000n + BigInt(index)).toString()); -} - -describe('altcha captcha configuration', () => { - test('defaults to disabled with no anonymous traffic', () => { - expect(AltchaCaptchaConfigSchema.parse({})).toEqual({ - enabled: false, - config_version: 0, - rollout_basis_points: 0, - rollout_salt: 'altcha-captcha-v1', - included_user_ids: [], - excluded_user_ids: [], - included_guild_ids: [], - include_premium_users: false, - anonymous_enabled: false, - cost: 5000, - max_counter: 10000, - }); - }); - - test('rejects difficulty outside the supported range', () => { - expect(AltchaCaptchaConfigUpdateRequest.safeParse({cost: 999}).success).toBe(false); - expect(AltchaCaptchaConfigUpdateRequest.safeParse({cost: 100001}).success).toBe(false); - expect(AltchaCaptchaConfigUpdateRequest.safeParse({max_counter: 99}).success).toBe(false); - expect(AltchaCaptchaConfigUpdateRequest.safeParse({max_counter: 1000001}).success).toBe(false); - expect(AltchaCaptchaConfigUpdateRequest.safeParse({config_version: 3}).data).toEqual({}); - }); -}); - -describe('resolveAltchaCaptchaAssignment', () => { - test('serves nobody while disabled, even included users', () => { - const config = createConfig({rollout_basis_points: 10000, included_user_ids: [TARGETED_USER_ID]}); - expect(resolveAltchaCaptchaAssignment(config, TARGETED_USER_ID, NO_TARGETING)).toEqual({enabled: false}); - }); - - test('applies exclusions before inclusions', () => { - const config = createConfig({ - enabled: true, - included_user_ids: [TARGETED_USER_ID], - excluded_user_ids: [TARGETED_USER_ID], - }); - expect(resolveAltchaCaptchaAssignment(config, TARGETED_USER_ID, NO_TARGETING)).toEqual({enabled: false}); - }); - - test('serves included users at zero rollout', () => { - const config = createConfig({enabled: true, included_user_ids: [TARGETED_USER_ID]}); - expect(resolveAltchaCaptchaAssignment(config, TARGETED_USER_ID, NO_TARGETING)).toEqual({enabled: true}); - }); - - test('buckets the rollout by salt and user id', () => { - const config = createConfig({enabled: true, rollout_basis_points: 2500}); - for (const userId of syntheticUserIds(200)) { - expect(resolveAltchaCaptchaAssignment(config, userId, NO_TARGETING).enabled).toBe( - experimentBucket(userId, config.rollout_salt) < 2500, - ); - } - }); -}); - -describe('altchaCaptchaAppliesTo', () => { - test('serves anonymous requests only when anonymous_enabled is set', () => { - expect(altchaCaptchaAppliesTo(createConfig({enabled: true}), null, NO_TARGETING)).toBe(false); - expect(altchaCaptchaAppliesTo(createConfig({enabled: true, anonymous_enabled: true}), null, NO_TARGETING)).toBe( - true, - ); - expect(altchaCaptchaAppliesTo(createConfig({anonymous_enabled: true}), null, NO_TARGETING)).toBe(false); - }); - - test('keeps signed-in users on their own bucket regardless of the anonymous switch', () => { - const config = createConfig({enabled: true, anonymous_enabled: true, excluded_user_ids: [TARGETED_USER_ID]}); - expect(altchaCaptchaAppliesTo(config, TARGETED_USER_ID, NO_TARGETING)).toBe(false); - }); -}); - -describe('resolveAltchaCaptchaAssignment guild targeting', () => { - const INCLUDED_GUILD_ID = '3000000000000000001'; - const MEMBER_GUILDS: ExperimentTargeting = { - memberGuildIds: new Set(['3000000000000000009', INCLUDED_GUILD_ID]), - premium: false, - }; - - test('serves members of an included guild at zero rollout', () => { - const config = createConfig({enabled: true, included_guild_ids: [INCLUDED_GUILD_ID]}); - expect(resolveAltchaCaptchaAssignment(config, TARGETED_USER_ID, MEMBER_GUILDS)).toEqual({enabled: true}); - expect(resolveAltchaCaptchaAssignment(config, TARGETED_USER_ID, NO_TARGETING)).toEqual({enabled: false}); - }); - - test('keeps user exclusions ahead of guild membership', () => { - const config = createConfig({ - enabled: true, - included_guild_ids: [INCLUDED_GUILD_ID], - excluded_user_ids: [TARGETED_USER_ID], - }); - expect(resolveAltchaCaptchaAssignment(config, TARGETED_USER_ID, MEMBER_GUILDS)).toEqual({enabled: false}); - }); - - test('serves no guild members while disabled', () => { - const config = createConfig({included_guild_ids: [INCLUDED_GUILD_ID]}); - expect(resolveAltchaCaptchaAssignment(config, TARGETED_USER_ID, MEMBER_GUILDS)).toEqual({enabled: false}); - }); -}); - -describe('resolveAltchaCaptchaAssignment premium targeting', () => { - const PREMIUM: ExperimentTargeting = {memberGuildIds: new Set(), premium: true}; - - test('serves premium users only when the switch is on', () => { - const on = createConfig({enabled: true, include_premium_users: true}); - expect(resolveAltchaCaptchaAssignment(on, TARGETED_USER_ID, PREMIUM)).toEqual({enabled: true}); - expect(resolveAltchaCaptchaAssignment(on, TARGETED_USER_ID, NO_TARGETING)).toEqual({enabled: false}); - expect(resolveAltchaCaptchaAssignment(createConfig({enabled: true}), TARGETED_USER_ID, PREMIUM)).toEqual({ - enabled: false, - }); - }); - - test('keeps user exclusions ahead of the premium switch', () => { - const config = createConfig({ - enabled: true, - include_premium_users: true, - excluded_user_ids: [TARGETED_USER_ID], - }); - expect(resolveAltchaCaptchaAssignment(config, TARGETED_USER_ID, PREMIUM)).toEqual({enabled: false}); - }); -}); diff --git a/packages/schema/src/domains/admin/AltchaCaptchaSchemas.ts b/packages/schema/src/domains/admin/AltchaCaptchaSchemas.ts deleted file mode 100644 index bda895ee1..000000000 --- a/packages/schema/src/domains/admin/AltchaCaptchaSchemas.ts +++ /dev/null @@ -1,97 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -import { - EXPERIMENT_BUCKET_RESOLUTION, - type ExperimentTargeting, - experimentAudienceIncludes, - experimentBucket, -} from '@fluxer/schema/src/domains/experiment/ExperimentBucket'; -import {z} from 'zod'; - -const ALTCHA_CAPTCHA_ROLLOUT_BASIS_POINTS_MAX = EXPERIMENT_BUCKET_RESOLUTION; -const ALTCHA_CAPTCHA_MAX_TARGETED_USERS = 1000; -const DEFAULT_ALTCHA_CAPTCHA_SALT = 'altcha-captcha-v1'; - -export const ALTCHA_CAPTCHA_MIN_COST = 1000; -export const ALTCHA_CAPTCHA_MAX_COST = 100000; -export const ALTCHA_CAPTCHA_MIN_MAX_COUNTER = 100; -export const ALTCHA_CAPTCHA_MAX_MAX_COUNTER = 1000000; - -const ALTCHA_CAPTCHA_SALT_PATTERN = /^[\x20-\x7e]+$/u; - -const AltchaCaptchaTargetIdSchema = z.string().regex(/^\d{1,20}$/u); -const AltchaCaptchaTargetedUserIdsSchema = z.array(AltchaCaptchaTargetIdSchema).max(ALTCHA_CAPTCHA_MAX_TARGETED_USERS); - -const altchaCaptchaConfigFields = { - enabled: z.boolean(), - config_version: z.number().int().min(0), - rollout_basis_points: z.number().int().min(0).max(ALTCHA_CAPTCHA_ROLLOUT_BASIS_POINTS_MAX), - rollout_salt: z.string().trim().min(1).max(64).regex(ALTCHA_CAPTCHA_SALT_PATTERN), - included_user_ids: AltchaCaptchaTargetedUserIdsSchema, - included_guild_ids: AltchaCaptchaTargetedUserIdsSchema, - include_premium_users: z.boolean(), - excluded_user_ids: AltchaCaptchaTargetedUserIdsSchema, - anonymous_enabled: z.boolean(), - cost: z.number().int().min(ALTCHA_CAPTCHA_MIN_COST).max(ALTCHA_CAPTCHA_MAX_COST), - max_counter: z.number().int().min(ALTCHA_CAPTCHA_MIN_MAX_COUNTER).max(ALTCHA_CAPTCHA_MAX_MAX_COUNTER), -}; - -export const AltchaCaptchaConfigSchema = z.object({ - enabled: altchaCaptchaConfigFields.enabled.default(false), - config_version: altchaCaptchaConfigFields.config_version.default(0), - rollout_basis_points: altchaCaptchaConfigFields.rollout_basis_points.default(0), - rollout_salt: altchaCaptchaConfigFields.rollout_salt.default(DEFAULT_ALTCHA_CAPTCHA_SALT), - included_user_ids: altchaCaptchaConfigFields.included_user_ids.default([]), - included_guild_ids: altchaCaptchaConfigFields.included_guild_ids.default([]), - include_premium_users: altchaCaptchaConfigFields.include_premium_users.default(false), - excluded_user_ids: altchaCaptchaConfigFields.excluded_user_ids.default([]), - anonymous_enabled: altchaCaptchaConfigFields.anonymous_enabled.default(false), - cost: altchaCaptchaConfigFields.cost.default(5000), - max_counter: altchaCaptchaConfigFields.max_counter.default(10000), -}); - -export type AltchaCaptchaConfig = z.infer; - -export const DEFAULT_ALTCHA_CAPTCHA_CONFIG: AltchaCaptchaConfig = AltchaCaptchaConfigSchema.parse({}); - -export const AltchaCaptchaConfigUpdateRequest = z - .object(altchaCaptchaConfigFields) - .omit({config_version: true}) - .partial(); - -export type AltchaCaptchaConfigUpdateRequest = z.infer; - -export const AltchaCaptchaConfigResponse = AltchaCaptchaConfigSchema; - -export type AltchaCaptchaConfigResponse = z.infer; - -export const AltchaCaptchaAssignmentResponse = z.object({ - enabled: altchaCaptchaConfigFields.enabled, -}); - -export type AltchaCaptchaAssignmentResponse = z.infer; - -export const INERT_ALTCHA_CAPTCHA_ASSIGNMENT: AltchaCaptchaAssignmentResponse = { - enabled: false, -}; - -export function resolveAltchaCaptchaAssignment( - config: AltchaCaptchaConfig, - userId: string, - targeting: ExperimentTargeting, -): AltchaCaptchaAssignmentResponse { - if (!config.enabled) return {...INERT_ALTCHA_CAPTCHA_ASSIGNMENT}; - if (config.excluded_user_ids.includes(userId)) return {...INERT_ALTCHA_CAPTCHA_ASSIGNMENT}; - if (config.included_user_ids.includes(userId)) return {enabled: true}; - if (experimentAudienceIncludes(config, targeting)) return {enabled: true}; - return {enabled: experimentBucket(userId, config.rollout_salt) < config.rollout_basis_points}; -} - -export function altchaCaptchaAppliesTo( - config: AltchaCaptchaConfig, - userId: string | null, - targeting: ExperimentTargeting, -): boolean { - if (userId === null) return config.enabled && config.anonymous_enabled; - return resolveAltchaCaptchaAssignment(config, userId, targeting).enabled; -} diff --git a/packages/schema/src/domains/admin/CaptchaSchemas.test.ts b/packages/schema/src/domains/admin/CaptchaSchemas.test.ts new file mode 100644 index 000000000..a6587553e --- /dev/null +++ b/packages/schema/src/domains/admin/CaptchaSchemas.test.ts @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import { + CaptchaConfigSchema, + CaptchaConfigUpdateRequest, + DEFAULT_CAPTCHA_CONFIG, +} from '@fluxer/schema/src/domains/admin/CaptchaSchemas'; +import {describe, expect, test} from 'vitest'; + +describe('captcha configuration', () => { + test('defaults to enabled at the phone-friendly difficulty', () => { + expect(CaptchaConfigSchema.parse({})).toEqual({enabled: true, cost: 5000, max_counter: 1000}); + expect(DEFAULT_CAPTCHA_CONFIG).toEqual({enabled: true, cost: 5000, max_counter: 1000}); + }); + + test('rejects difficulty outside the supported range', () => { + expect(CaptchaConfigUpdateRequest.safeParse({cost: 999}).success).toBe(false); + expect(CaptchaConfigUpdateRequest.safeParse({cost: 20001}).success).toBe(false); + expect(CaptchaConfigUpdateRequest.safeParse({max_counter: 99}).success).toBe(false); + expect(CaptchaConfigUpdateRequest.safeParse({max_counter: 20001}).success).toBe(false); + expect(CaptchaConfigSchema.safeParse({cost: 20001}).success).toBe(false); + }); + + test('keeps a partial update partial without filling defaults', () => { + expect(CaptchaConfigUpdateRequest.parse({})).toEqual({}); + expect(CaptchaConfigUpdateRequest.parse({enabled: false})).toEqual({enabled: false}); + expect(CaptchaConfigUpdateRequest.parse({cost: 1000, max_counter: 100})).toEqual({cost: 1000, max_counter: 100}); + }); +}); diff --git a/packages/schema/src/domains/admin/CaptchaSchemas.ts b/packages/schema/src/domains/admin/CaptchaSchemas.ts new file mode 100644 index 000000000..7b11b2e62 --- /dev/null +++ b/packages/schema/src/domains/admin/CaptchaSchemas.ts @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import {z} from 'zod'; + +export const CAPTCHA_MIN_COST = 1000; +export const CAPTCHA_MAX_COST = 20000; +export const CAPTCHA_MIN_MAX_COUNTER = 100; +export const CAPTCHA_MAX_MAX_COUNTER = 20000; + +const captchaConfigFields = { + enabled: z.boolean(), + cost: z.number().int().min(CAPTCHA_MIN_COST).max(CAPTCHA_MAX_COST), + max_counter: z.number().int().min(CAPTCHA_MIN_MAX_COUNTER).max(CAPTCHA_MAX_MAX_COUNTER), +}; + +export const CaptchaConfigSchema = z.object({ + enabled: captchaConfigFields.enabled.default(true), + cost: captchaConfigFields.cost.default(5000), + max_counter: captchaConfigFields.max_counter.default(1000), +}); + +export type CaptchaConfig = z.infer; + +export const DEFAULT_CAPTCHA_CONFIG: CaptchaConfig = CaptchaConfigSchema.parse({}); + +export const CaptchaConfigUpdateRequest = z.object(captchaConfigFields).partial(); + +export type CaptchaConfigUpdateRequest = z.infer; + +export const CaptchaConfigResponse = CaptchaConfigSchema; + +export type CaptchaConfigResponse = z.infer; diff --git a/packages/schema/src/domains/experiment/ExperimentSchemas.ts b/packages/schema/src/domains/experiment/ExperimentSchemas.ts index 2caa55340..8607bfe55 100644 --- a/packages/schema/src/domains/experiment/ExperimentSchemas.ts +++ b/packages/schema/src/domains/experiment/ExperimentSchemas.ts @@ -1,6 +1,5 @@ // SPDX-License-Identifier: AGPL-3.0-or-later -import {AltchaCaptchaAssignmentResponse} from '@fluxer/schema/src/domains/admin/AltchaCaptchaSchemas'; import { DomainMigrationAssignmentResponse, INERT_DOMAIN_MIGRATION_ASSIGNMENT, @@ -43,7 +42,6 @@ export type ExperimentDeliveryConfigResponse = z.infer; -export const InstanceCaptchaProviderSchema = z.enum(['hcaptcha', 'turnstile', 'none']); -export type InstanceCaptchaProvider = z.infer; +export const InstanceCaptchaProviderSchema = z.enum(['altcha', 'none']); export const InstanceEndpointsSchema = z .object({ @@ -96,9 +95,7 @@ export type InstanceEndpoints = z.infer; export const InstanceCaptchaSchema = z .object({ - provider: InstanceCaptchaProviderSchema.describe('Captcha provider name (hcaptcha, turnstile, none)'), - hcaptcha_site_key: z.string().nullable().describe('hCaptcha site key if using hCaptcha'), - turnstile_site_key: z.string().nullable().describe('Cloudflare Turnstile site key if using Turnstile'), + provider: InstanceCaptchaProviderSchema.describe('Captcha provider (altcha or none)'), }) .describe('Captcha configuration'); export type InstanceCaptcha = z.infer; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 36388e125..df8c47eeb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -57,9 +57,6 @@ catalogs: '@floating-ui/react-dom': specifier: 2.1.9 version: 2.1.9 - '@hcaptcha/react-hcaptcha': - specifier: 2.2.0 - version: 2.2.0 '@hono/node-server': specifier: 2.1.1 version: 2.1.1 @@ -87,9 +84,6 @@ catalogs: '@livekit/components-react': specifier: 2.9.24 version: 2.9.24 - '@marsidev/react-turnstile': - specifier: 1.6.1 - version: 1.6.1 '@mdx-js/mdx': specifier: 3.1.1 version: 3.1.1 @@ -1417,9 +1411,6 @@ importers: '@fluxer/voice_engine_v2': specifier: workspace:* version: link:../packages/voice_engine_v2 - '@hcaptcha/react-hcaptcha': - specifier: 'catalog:' - version: 2.2.0 '@lexical/history': specifier: 'catalog:' version: 0.50.0(typescript@7.0.2) @@ -1441,9 +1432,6 @@ importers: '@livekit/components-react': specifier: 'catalog:' version: 2.9.24(livekit-client@fluxer_app+pkgs+livekit-client)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(tslib@2.8.1) - '@marsidev/react-turnstile': - specifier: 'catalog:' - version: 1.6.1(react-dom@19.3.0(react@19.3.0))(react@19.3.0) '@phosphor-icons/react': specifier: 'catalog:' version: 2.1.10(patch_hash=9b0b481de857aa7a7525f023baea9da72be4574ff72825e39d959e6979d78eea)(react-dom@19.3.0(react@19.3.0))(react@19.3.0) @@ -4596,9 +4584,6 @@ packages: cpu: [x64, arm64] os: [win32] - '@hcaptcha/react-hcaptcha@2.2.0': - resolution: {integrity: sha512-/HrPgNLRrJziLrh2s+qFRO33ubBSuHn9sdNsQcP0wQElpORxlpR6wnq3X9j/bZGd+uQtYIvPl4QSU2la+Jl9Hg==} - '@hexagon/base64@1.1.28': resolution: {integrity: sha512-lhqDEAvWixy3bZ+UOYbPwUbBkwBq5C1LAJ/xPC8Oi+lL54oyakv/npbA0aU2hgCsx/1NUd4IBvV03+aUBWxerw==} @@ -5190,12 +5175,6 @@ packages: '@marijn/find-cluster-break@1.0.4': resolution: {integrity: sha512-Wy0V7+SGUjnF9/TkiM1hKVDPj7jKXduPNboMVtHTA8dySMURWqfg/JZ9E2Sq8JgSJmkl7k7Qe9FLeMSrSraWmQ==} - '@marsidev/react-turnstile@1.6.1': - resolution: {integrity: sha512-ojI9NLYv821IRKi7KraTkxTto6KC/m58hNNyKxvYxm/cQBu5MI5eMkaiJs2JSQBFiXE3LPQI3seJVjv/2lgALA==} - peerDependencies: - react: ^17.0.2 || ^18.0.0 || ^19.0 - react-dom: ^17.0.2 || ^18.0.0 || ^19.0 - '@mdx-js/mdx@3.1.1': resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==} @@ -13686,8 +13665,6 @@ snapshots: '@fluxer/windows-input-hook@file:fluxer_desktop/native/windows-input-hook': optional: true - '@hcaptcha/react-hcaptcha@2.2.0': {} - '@hexagon/base64@1.1.28': {} '@hono/node-server@2.1.1(hono@4.13.8)': @@ -14276,11 +14253,6 @@ snapshots: '@marijn/find-cluster-break@1.0.4': {} - '@marsidev/react-turnstile@1.6.1(react-dom@19.3.0(react@19.3.0))(react@19.3.0)': - dependencies: - react: 19.3.0 - react-dom: 19.3.0(react@19.3.0) - '@mdx-js/mdx@3.1.1(supports-color@7.2.0)': dependencies: '@types/estree': 1.0.9 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index e4a8bbb78..d9246b0c1 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -50,7 +50,6 @@ catalog: '@elastic/elasticsearch': 9.5.1 '@floating-ui/react': 0.27.20 '@floating-ui/react-dom': 2.1.9 - '@hcaptcha/react-hcaptcha': 2.2.0 '@hono/node-server': 2.1.1 '@lexical/history': 0.50.0 '@lexical/react': 0.50.0 @@ -61,7 +60,6 @@ catalog: '@lingui/react': 6.7.0 '@lingui/swc-plugin': 6.7.0 '@livekit/components-react': 2.9.24 - '@marsidev/react-turnstile': 1.6.1 '@mdx-js/mdx': 3.1.1 '@messageformat/core': 3.4.0 '@messageformat/parser': 5.1.1