diff --git a/config/env/development.env b/config/env/development.env index ba3f59859..f04881927 100644 --- a/config/env/development.env +++ b/config/env/development.env @@ -104,7 +104,7 @@ FLUXER_EMAIL_SMTP_HOST=mailpit FLUXER_EMAIL_SMTP_PORT=1025 FLUXER_EMAIL_SMTP_USERNAME=dev FLUXER_EMAIL_SMTP_PASSWORD=dev -FLUXER_EMAIL_SMTP_SECURE=false +FLUXER_EMAIL_SMTP_TLS_MODE=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 e67b5a36c..7e0138780 100644 --- a/deploy/self-hosting/.env.example +++ b/deploy/self-hosting/.env.example @@ -318,7 +318,13 @@ FLUXER_EMAIL_SMTP_HOST= FLUXER_EMAIL_SMTP_PORT=587 FLUXER_EMAIL_SMTP_USERNAME= FLUXER_EMAIL_SMTP_PASSWORD= -FLUXER_EMAIL_SMTP_SECURE=true +# How the SMTP connection is encrypted: implicit, starttls, opportunistic or +# none. Leave it empty for implicit TLS on port 465 and required STARTTLS on any +# other port. +FLUXER_EMAIL_SMTP_TLS_MODE= +# The older switch, read only while the mode above is empty. true is implicit +# and false is opportunistic. +#FLUXER_EMAIL_SMTP_SECURE=false #FLUXER_EMAIL_WEBHOOK_SECRET= FLUXER_DISCOVERY_ENABLED=true diff --git a/deploy/self-hosting/docker-compose.yml b/deploy/self-hosting/docker-compose.yml index 6dc2623ba..f52de43fe 100644 --- a/deploy/self-hosting/docker-compose.yml +++ b/deploy/self-hosting/docker-compose.yml @@ -121,6 +121,7 @@ x-fluxer-env: &fluxer-env FLUXER_EMAIL_SMTP_PORT: ${FLUXER_EMAIL_SMTP_PORT:-} FLUXER_EMAIL_SMTP_USERNAME: ${FLUXER_EMAIL_SMTP_USERNAME:-} FLUXER_EMAIL_SMTP_PASSWORD: ${FLUXER_EMAIL_SMTP_PASSWORD:-} + FLUXER_EMAIL_SMTP_TLS_MODE: ${FLUXER_EMAIL_SMTP_TLS_MODE:-} FLUXER_EMAIL_SMTP_SECURE: ${FLUXER_EMAIL_SMTP_SECURE:-} FLUXER_STRIPE_ENABLED: ${FLUXER_STRIPE_ENABLED:-} diff --git a/fluxer_admin/openapi-admin.json b/fluxer_admin/openapi-admin.json index a5df3ceb8..2dc4452f2 100644 --- a/fluxer_admin/openapi-admin.json +++ b/fluxer_admin/openapi-admin.json @@ -4144,10 +4144,10 @@ "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}} } }, - "description": "Validates that an SMTP configuration can authenticate and accept a connection. Requires INSTANCE_CONFIG_UPDATE permission.", + "description": "Validates that an SMTP configuration can authenticate and accept a connection. Fields left out of the body come from the saved configuration, and the saved password is reused only for the saved host and username. An empty body tests what outgoing email uses and fails when email is off or incomplete. Requires INSTANCE_CONFIG_UPDATE permission.", "security": [{"adminApiKey": []}], "requestBody": { - "required": true, + "required": false, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/InstanceEmailSmtpTestRequest"}}} } } @@ -11523,9 +11523,34 @@ "port": {"nullable": true, "type": "integer", "minimum": 1, "maximum": 65535}, "username": {"nullable": true, "type": "string"}, "password_set": {"type": "boolean"}, - "secure": {"nullable": true, "type": "boolean"} + "tls_mode": { + "nullable": true, + "description": "Saved TLS mode, or null to pick one from the port", + "x-enumNames": ["IMPLICIT", "STARTTLS", "OPPORTUNISTIC", "NONE"], + "x-enumDescriptions": [ + "TLS from the first byte, usually on port 465", + "Plain connection that must upgrade with STARTTLS, usually on port 587", + "Plain connection upgraded with STARTTLS when the server offers it", + "No TLS, even when the server offers STARTTLS" + ], + "enum": ["implicit", "starttls", "opportunistic", "none"], + "type": "string" + }, + "effective_tls_mode": { + "nullable": true, + "description": "How the SMTP connection is encrypted", + "x-enumNames": ["IMPLICIT", "STARTTLS", "OPPORTUNISTIC", "NONE"], + "x-enumDescriptions": [ + "TLS from the first byte, usually on port 465", + "Plain connection that must upgrade with STARTTLS, usually on port 587", + "Plain connection upgraded with STARTTLS when the server offers it", + "No TLS, even when the server offers STARTTLS" + ], + "enum": ["implicit", "starttls", "opportunistic", "none"], + "type": "string" + } }, - "required": ["host", "port", "username", "password_set", "secure"], + "required": ["host", "port", "username", "password_set", "tls_mode", "effective_tls_mode"], "additionalProperties": false }, "disable_new_ip_authorization": {"type": "boolean"}, @@ -11788,13 +11813,24 @@ "InstanceEmailSmtpTestRequest": { "type": "object", "properties": { - "host": {"type": "string", "minLength": 1, "maxLength": 255}, - "port": {"type": "integer", "minimum": 1, "maximum": 65535}, - "username": {"type": "string", "minLength": 1, "maxLength": 320}, - "password": {"type": "string", "minLength": 1, "maxLength": 4096}, - "secure": {"default": true, "type": "boolean"} - }, - "required": ["host", "port", "username", "password"] + "host": {"nullable": true, "type": "string", "minLength": 1, "maxLength": 255}, + "port": {"nullable": true, "type": "integer", "minimum": 1, "maximum": 65535}, + "username": {"nullable": true, "type": "string", "minLength": 1, "maxLength": 320}, + "password": {"nullable": true, "type": "string", "minLength": 1, "maxLength": 4096}, + "tls_mode": { + "nullable": true, + "description": "How the SMTP connection is encrypted", + "x-enumNames": ["IMPLICIT", "STARTTLS", "OPPORTUNISTIC", "NONE"], + "x-enumDescriptions": [ + "TLS from the first byte, usually on port 465", + "Plain connection that must upgrade with STARTTLS, usually on port 587", + "Plain connection upgraded with STARTTLS when the server offers it", + "No TLS, even when the server offers STARTTLS" + ], + "enum": ["implicit", "starttls", "opportunistic", "none"], + "type": "string" + } + } }, "InstanceEmailSmtpTestResponse": { "type": "object", @@ -11923,7 +11959,20 @@ "port": {"nullable": true, "type": "integer", "minimum": 1, "maximum": 65535}, "username": {"nullable": true, "type": "string", "maxLength": 320}, "password": {"nullable": true, "type": "string", "maxLength": 4096}, - "secure": {"nullable": true, "type": "boolean"} + "tls_mode": { + "nullable": true, + "description": "How the SMTP connection is encrypted", + "x-enumNames": ["IMPLICIT", "STARTTLS", "OPPORTUNISTIC", "NONE"], + "x-enumDescriptions": [ + "TLS from the first byte, usually on port 465", + "Plain connection that must upgrade with STARTTLS, usually on port 587", + "Plain connection upgraded with STARTTLS when the server offers it", + "No TLS, even when the server offers STARTTLS" + ], + "enum": ["implicit", "starttls", "opportunistic", "none"], + "type": "string" + }, + "secure": {"description": "Deprecated, use tls_mode", "nullable": true, "type": "boolean"} } }, "disable_new_ip_authorization": {"nullable": true, "type": "boolean"} diff --git a/fluxer_admin/src/api/instance_config.rs b/fluxer_admin/src/api/instance_config.rs index 8651bd135..18af16830 100644 --- a/fluxer_admin/src/api/instance_config.rs +++ b/fluxer_admin/src/api/instance_config.rs @@ -4,7 +4,7 @@ use super::client::{AdminApiClient, ApiResult}; use super::types::{ AccountIdentitySettings, CreateRegistrationUrlRequest, CreateRegistrationUrlResponse, InstanceAccountIdentityDiscovery, InstanceConfigResponse, InstanceConfigUpdateRequest, - InstanceEmailSmtpTestRequest, InstanceEmailSmtpTestResponse, InstancePremiumDiscovery, + InstanceEmailSmtpTestResponse, InstancePremiumDiscovery, }; impl AdminApiClient { @@ -34,11 +34,10 @@ impl AdminApiClient { .await } - pub async fn test_instance_smtp_config( + pub async fn test_saved_instance_smtp_config( &self, - request: &InstanceEmailSmtpTestRequest, ) -> ApiResult { - self.post_typed("/admin/instance/config/smtp-tests", request) + self.post_typed("/admin/instance/config/smtp-tests", &serde_json::json!({})) .await } diff --git a/fluxer_admin/src/api/types/instance_config.rs b/fluxer_admin/src/api/types/instance_config.rs index 74c382462..4011a642b 100644 --- a/fluxer_admin/src/api/types/instance_config.rs +++ b/fluxer_admin/src/api/types/instance_config.rs @@ -229,7 +229,8 @@ pub struct InstanceEmailSmtpIntegrationResponse { pub username: Option, #[serde(default)] pub password_set: bool, - pub secure: Option, + pub tls_mode: Option, + pub effective_tls_mode: Option, } #[derive(Clone, Debug, Default, Deserialize, Serialize)] @@ -873,7 +874,7 @@ pub struct InstanceEmailSmtpIntegrationUpdateRequest { #[serde(skip_serializing_if = "Option::is_none")] pub password: Option, #[serde(skip_serializing_if = "Option::is_none")] - pub secure: Option, + pub tls_mode: Option>, } #[derive(Clone, Debug, Default, Serialize)] @@ -928,15 +929,6 @@ pub struct InstanceAttachmentDecayUpdateRequest { pub renew_window_days: Option, } -#[derive(Clone, Debug, Default, Serialize)] -pub struct InstanceEmailSmtpTestRequest { - pub host: String, - pub port: u16, - pub username: String, - pub password: String, - pub secure: bool, -} - #[derive(Clone, Debug, Default, Deserialize, Serialize)] pub struct InstanceEmailSmtpTestResponse { #[serde(default)] diff --git a/fluxer_admin/src/routes/system_actions.rs b/fluxer_admin/src/routes/system_actions.rs index 6eb698b1e..440b38391 100644 --- a/fluxer_admin/src/routes/system_actions.rs +++ b/fluxer_admin/src/routes/system_actions.rs @@ -14,7 +14,7 @@ use crate::{ InstanceAttachmentDecayUpdateRequest, InstanceBlueskyIntegrationUpdateRequest, InstanceBlueskyKeyIntegrationUpdateRequest, InstanceConfigUpdateRequest, InstanceEmailIntegrationUpdateRequest, InstanceEmailSmtpIntegrationUpdateRequest, - InstanceEmailSmtpTestRequest, InstanceGifIntegrationUpdateRequest, + InstanceEmailSmtpTestResponse, InstanceGifIntegrationUpdateRequest, InstanceIntegrationsUpdateRequest, InstanceMediaUpdateRequest, InstancePolicyUpdateRequest, InstanceRegistrationConfigUpdateRequest, InstanceServicesUpdateRequest, InstanceYoutubeIntegrationUpdateRequest, @@ -233,21 +233,19 @@ pub async fn instance_config_post( Ok(update) => instance_config_result(client.update_instance_config(&update).await), Err(message) => FlashData::error(message), }, - "test_smtp" => match build_smtp_test_request(&form) { - Ok(request) => match client.test_instance_smtp_config(&request).await { - Ok(response) if response.ok => FlashData::success("SMTP connection verified"), - Ok(response) => FlashData::error( - response - .error - .unwrap_or_else(|| "SMTP validation failed".to_owned()), - ), - Err(error) => { - tracing::warn!(%error, "admin API request failed: test SMTP config"); - FlashData::error("Failed to validate SMTP configuration") - } - }, - Err(message) => FlashData::error(message), - }, + "test_smtp" => { + let update = build_integrations_update(&form); + match client.update_instance_config(&update).await { + Ok(_) => match client.test_saved_instance_smtp_config().await { + Ok(response) => smtp_test_flash(response), + Err(error) => { + tracing::warn!(%error, "admin API request failed: test SMTP config"); + FlashData::error("Settings saved, but the SMTP test could not run") + } + }, + Err(error) => instance_config_result(Err::<(), _>(error)), + } + } "disable_single_community" => { let update = build_single_community_update(false); instance_config_result(client.update_instance_config(&update).await) @@ -420,6 +418,18 @@ fn instance_config_result(result: Result) -> } } +fn smtp_test_flash(response: InstanceEmailSmtpTestResponse) -> FlashData { + if response.ok { + return FlashData::success("Settings saved and SMTP connection verified"); + } + let reason = response + .error + .unwrap_or_else(|| "the server gave no reason".to_owned()); + FlashData::error(format!( + "Settings saved, but the SMTP test failed: {reason}" + )) +} + fn build_sso_update(form: &MultiValueForm) -> InstanceConfigUpdateRequest { let flag = |key: &str| form.bool_value(key); let get = |key: &str| Some(form.clean(key)); @@ -896,7 +906,9 @@ fn build_integrations_update(form: &MultiValueForm) -> InstanceConfigUpdateReque port: smtp_port, username: clean("integration_smtp_username"), password: clean("integration_smtp_password"), - secure: Some(form.bool_value("integration_smtp_secure")), + tls_mode: form + .first("integration_smtp_tls_mode") + .map(|value| Some(value.trim().to_owned()).filter(|mode| !mode.is_empty())), }), disable_new_ip_authorization: Some( form.bool_value("integration_email_disable_new_ip_authorization"), @@ -939,29 +951,6 @@ fn build_media_update(form: &MultiValueForm) -> InstanceConfigUpdateRequest { } } -fn build_smtp_test_request(form: &MultiValueForm) -> Result { - let host = form - .clean("integration_smtp_host") - .ok_or_else(|| "SMTP host is required".to_owned())?; - let port = form - .first("integration_smtp_port") - .and_then(|value| value.trim().parse::().ok()) - .ok_or_else(|| "SMTP port must be between 1 and 65535".to_owned())?; - let username = form - .clean("integration_smtp_username") - .ok_or_else(|| "SMTP username is required".to_owned())?; - let password = form - .clean("integration_smtp_password") - .ok_or_else(|| "SMTP password is required for validation".to_owned())?; - Ok(InstanceEmailSmtpTestRequest { - host, - port, - username, - password, - secure: form.bool_value("integration_smtp_secure"), - }) -} - fn build_single_community_update(enabled: bool) -> InstanceConfigUpdateRequest { InstanceConfigUpdateRequest { policy: Some(InstancePolicyUpdateRequest { @@ -1369,6 +1358,49 @@ mod tests { ); } + #[test] + fn build_integrations_update_sends_the_smtp_tls_mode_only_when_the_form_has_it() { + let smtp_update = |body: &[u8]| { + build_integrations_update(&MultiValueForm::parse(body)) + .integrations + .and_then(|integrations| integrations.email) + .and_then(|email| email.smtp) + .expect("smtp update") + }; + let body = |update| serde_json::to_value(update).expect("serialize smtp update"); + + let chosen = smtp_update(b"integration_email_present=1&integration_smtp_tls_mode=none"); + assert_eq!(body(chosen), serde_json::json!({"tls_mode": "none"})); + + let automatic = smtp_update(b"integration_email_present=1&integration_smtp_tls_mode="); + assert_eq!(body(automatic), serde_json::json!({"tls_mode": null})); + + let from_an_older_page = + smtp_update(b"integration_email_present=1&integration_smtp_secure=true"); + assert_eq!(body(from_an_older_page), serde_json::json!({})); + } + + #[test] + fn smtp_test_flash_says_the_settings_were_saved_either_way() { + let passed = smtp_test_flash(InstanceEmailSmtpTestResponse { + ok: true, + error: None, + }); + assert_eq!( + passed.message, + "Settings saved and SMTP connection verified" + ); + + let failed = smtp_test_flash(InstanceEmailSmtpTestResponse { + ok: false, + error: Some("wrong version number".to_owned()), + }); + assert_eq!( + failed.message, + "Settings saved, but the SMTP test failed: wrong version number" + ); + } + #[test] fn build_sso_update_keeps_repeated_allowed_domains() { let form = MultiValueForm::parse( diff --git a/fluxer_admin/src/templates/pages/instance_config.rs b/fluxer_admin/src/templates/pages/instance_config.rs index dfcc033c3..8c7ee0a93 100644 --- a/fluxer_admin/src/templates/pages/instance_config.rs +++ b/fluxer_admin/src/templates/pages/instance_config.rs @@ -546,6 +546,16 @@ fn password_input(name: &str, label: &str, helper: Option<&str>) -> Markup { ) } +fn smtp_tls_mode_summary(mode: &str) -> &str { + match mode { + "implicit" => "implicit TLS", + "starttls" => "required STARTTLS", + "opportunistic" => "STARTTLS when the server offers it", + "none" => "no encryption", + other => other, + } +} + fn account_identity_section(account_identity: &AccountIdentityConfigResponse) -> Markup { let description = match account_identity.mode { AccountIdentityMode::Username => { @@ -689,15 +699,34 @@ fn integrations_config_section( )) (password_input("integration_smtp_password", "SMTP password", Some("Leave blank to keep the current password."))) } - (checkbox("integration_smtp_secure", "true", "Use TLS", integrations.email.smtp.secure.unwrap_or(true), true)) + (select_input("integration_smtp_tls_mode", "SMTP encryption", &[ + ("", "Automatic"), + ("implicit", "Implicit TLS"), + ("starttls", "STARTTLS, required"), + ("opportunistic", "STARTTLS, when the server offers it"), + ("none", "None"), + ], integrations.email.smtp.tls_mode.as_deref().unwrap_or(""))) + p class="text-xs text-neutral-500" { + "Automatic follows FLUXER_EMAIL_SMTP_TLS_MODE when it is set, then the older FLUXER_EMAIL_SMTP_SECURE, where true means implicit TLS on any port. With neither set it uses implicit TLS on port 465 and requires STARTTLS on every other port." + } + @if let Some(mode) = integrations.email.smtp.effective_tls_mode.as_deref() { + p class="text-xs text-neutral-500" { + "Outgoing email currently uses " (smtp_tls_mode_summary(mode)) + @if let Some(port) = integrations.email.smtp.port { " on port " (port) } + "." + } + } (checkbox("integration_email_disable_new_ip_authorization", "true", "Disable new IP login authorization", integrations.email.disable_new_ip_authorization, true)) div class="flex flex-wrap gap-2" { button type="submit" formaction={(base) "/instance-config?action=test_smtp"} class="inline-flex w-fit items-center justify-center gap-2 rounded-lg border border-neutral-300 bg-neutral-50 px-4 py-2 font-medium text-base text-neutral-700 transition-all duration-150 hover:border-neutral-400 hover:text-neutral-900 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-white" { - span { "Test SMTP connection" } + span { "Save and test SMTP" } } } + p class="text-xs text-neutral-500" { + "The test saves this form first, then connects with the saved settings, the same ones outgoing email uses." + } } } diff --git a/fluxer_admin/tests/api_deserialization.rs b/fluxer_admin/tests/api_deserialization.rs index 54d52acd1..09823fe2c 100644 --- a/fluxer_admin/tests/api_deserialization.rs +++ b/fluxer_admin/tests/api_deserialization.rs @@ -500,7 +500,8 @@ fn deserialize_instance_config_response_with_unknown_keys() { "port": 587, "username": "fluxer", "password_set": true, - "secure": true + "tls_mode": null, + "effective_tls_mode": "starttls" }, "disable_new_ip_authorization": false, "effective_disable_new_ip_authorization": false diff --git a/fluxer_api/pkgs/email/package.json b/fluxer_api/pkgs/email/package.json index dd54e5242..85bed12f3 100644 --- a/fluxer_api/pkgs/email/package.json +++ b/fluxer_api/pkgs/email/package.json @@ -12,6 +12,7 @@ "typecheck": "tsc --noEmit" }, "dependencies": { + "@fluxer/constants": "workspace:*", "@fluxer/i18n": "workspace:*", "@fluxer/logger": "workspace:*", "itty-time": "catalog:", diff --git a/fluxer_api/pkgs/email/src/SmtpEmailProvider.test.ts b/fluxer_api/pkgs/email/src/SmtpEmailProvider.test.ts new file mode 100644 index 000000000..378014f1b --- /dev/null +++ b/fluxer_api/pkgs/email/src/SmtpEmailProvider.test.ts @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import {SmtpEmailProvider} from '@pkgs/email/src/SmtpEmailProvider'; +import {beforeEach, describe, expect, it, vi} from 'vitest'; + +const {createTransport} = vi.hoisted(() => ({createTransport: vi.fn()})); + +vi.mock('nodemailer', () => ({default: {createTransport}})); + +describe('SmtpEmailProvider', () => { + beforeEach(() => { + createTransport.mockReset(); + createTransport.mockReturnValue({sendMail: vi.fn(), verify: vi.fn()}); + }); + + it.each([ + {port: 465, tlsMode: undefined, secure: true, requireTLS: false, ignoreTLS: false}, + {port: 587, tlsMode: undefined, secure: false, requireTLS: true, ignoreTLS: false}, + {port: 587, tlsMode: null, secure: false, requireTLS: true, ignoreTLS: false}, + {port: 587, tlsMode: 'implicit', secure: true, requireTLS: false, ignoreTLS: false}, + {port: 465, tlsMode: 'starttls', secure: false, requireTLS: true, ignoreTLS: false}, + {port: 25, tlsMode: 'opportunistic', secure: false, requireTLS: false, ignoreTLS: false}, + {port: 587, tlsMode: 'none', secure: false, requireTLS: false, ignoreTLS: true}, + ] as const)('maps TLS mode $tlsMode on port $port to nodemailer options', ({port, tlsMode, ...expected}) => { + new SmtpEmailProvider({host: 'smtp.example.com', port, username: 'user', password: 'pass', tlsMode}); + expect(createTransport).toHaveBeenCalledWith(expect.objectContaining(expected)); + }); +}); diff --git a/fluxer_api/pkgs/email/src/SmtpEmailProvider.ts b/fluxer_api/pkgs/email/src/SmtpEmailProvider.ts index 58962b526..66b4d7e56 100644 --- a/fluxer_api/pkgs/email/src/SmtpEmailProvider.ts +++ b/fluxer_api/pkgs/email/src/SmtpEmailProvider.ts @@ -1,5 +1,6 @@ // SPDX-License-Identifier: AGPL-3.0-or-later +import {resolveSmtpTlsMode, type SmtpTlsMode, SmtpTlsModes} from '@fluxer/constants/src/SmtpConstants'; import {createLogger} from '@fluxer/logger/src/Logger'; import type {EmailMessage, IEmailProvider} from '@pkgs/email/src/EmailProviderTypes'; import nodemailer, {type Transporter} from 'nodemailer'; @@ -11,7 +12,7 @@ interface SmtpEmailConfig { port: number; username: string; password: string; - secure?: boolean; + tlsMode?: SmtpTlsMode | null; connectionTimeoutMs?: number; greetingTimeoutMs?: number; socketTimeoutMs?: number; @@ -19,12 +20,20 @@ interface SmtpEmailConfig { export class SmtpEmailProvider implements IEmailProvider { private readonly transporter: Transporter; + private readonly host: string; + private readonly port: number; + private readonly tlsMode: SmtpTlsMode; constructor(config: SmtpEmailConfig) { + this.host = config.host; + this.port = config.port; + this.tlsMode = resolveSmtpTlsMode(config.tlsMode, config.port); this.transporter = nodemailer.createTransport({ host: config.host, port: config.port, - secure: config.secure ?? true, + secure: this.tlsMode === SmtpTlsModes.IMPLICIT, + requireTLS: this.tlsMode === SmtpTlsModes.STARTTLS, + ignoreTLS: this.tlsMode === SmtpTlsModes.NONE, auth: { user: config.username, pass: config.password, @@ -52,7 +61,7 @@ export class SmtpEmailProvider implements IEmailProvider { logger.debug({to: message.to}, 'Email sent via SMTP'); return true; } catch (error) { - logger.error({error}, 'SMTP send failed'); + logger.error({error, host: this.host, port: this.port, tlsMode: this.tlsMode}, 'SMTP send failed'); return false; } } diff --git a/fluxer_api/src/api/Config.ts b/fluxer_api/src/api/Config.ts index 44f9dbcb5..a48fa6391 100644 --- a/fluxer_api/src/api/Config.ts +++ b/fluxer_api/src/api/Config.ts @@ -5,6 +5,7 @@ import {DonationRateLimitConfigs} from '@app/api/rate_limit_configs/DonationRate import {parseIpBanEntry} from '@app/api/utils/IpRangeUtils'; import type {WorkerTaskName} from '@app/api/worker/WorkerLaneConfig'; import type {MasterConfig} from '@fluxer/config/src/MasterConfig'; +import {smtpTlsModeFromSecure} from '@fluxer/constants/src/SmtpConstants'; import {parseIpAddress} from '@fluxer/ip_utils/src/IpAddress'; import {parseGeoipSourceConfig, resolveGeoipRuntimeSourceConfig} from '@pkgs/geoip/src/GeoipStartup'; @@ -280,7 +281,8 @@ export function buildAPIConfigFromMaster(master: MasterConfig): APIConfig { port: master.integrations.email.smtp.port, username: master.integrations.email.smtp.username, password: master.integrations.email.smtp.password, - secure: master.integrations.email.smtp.secure ?? true, + tlsMode: + master.integrations.email.smtp.tls_mode ?? smtpTlsModeFromSecure(master.integrations.email.smtp.secure), } : undefined, }, diff --git a/fluxer_api/src/api/admin/controllers/InstanceConfigAdminController.ts b/fluxer_api/src/api/admin/controllers/InstanceConfigAdminController.ts index e350acccb..2d6d2b2a0 100644 --- a/fluxer_api/src/api/admin/controllers/InstanceConfigAdminController.ts +++ b/fluxer_api/src/api/admin/controllers/InstanceConfigAdminController.ts @@ -25,6 +25,7 @@ import {RateLimitConfigs} from '@app/api/RateLimitConfig'; import type {HonoApp, HonoEnv} from '@app/api/types/HonoEnv'; import {Validator} from '@app/api/Validator'; import {AdminACLs} from '@fluxer/constants/src/AdminACLs'; +import {resolveSmtpTlsMode, type SmtpTlsMode, smtpTlsModeFromSecure} from '@fluxer/constants/src/SmtpConstants'; import {InputValidationError} from '@fluxer/errors/src/domains/core/InputValidationError'; import {InstancePolicyTransitionNotAllowedError} from '@fluxer/errors/src/domains/core/InstancePolicyTransitionNotAllowedError'; import { @@ -71,6 +72,16 @@ function readOptionalField(value: T, key: K return Object.hasOwn(value, key) ? value[key] : undefined; } +function readSmtpTlsModeUpdate(smtp: { + tls_mode?: SmtpTlsMode | null; + secure?: boolean | null; +}): SmtpTlsMode | null | undefined { + const tlsMode = readOptionalField(smtp, 'tls_mode'); + if (tlsMode !== undefined) return tlsMode; + const secure = readOptionalField(smtp, 'secure'); + return secure === undefined ? undefined : smtpTlsModeFromSecure(secure); +} + function mergeOptionalField(currentValue: T, nextValue: T | undefined): T { return nextValue === undefined ? currentValue : nextValue; } @@ -554,7 +565,7 @@ export function InstanceConfigAdminController(app: HonoApp) { port: readOptionalField(data.integrations.email.smtp, 'port'), username: readOptionalField(data.integrations.email.smtp, 'username'), password: readOptionalField(data.integrations.email.smtp, 'password'), - secure: readOptionalField(data.integrations.email.smtp, 'secure'), + tls_mode: readSmtpTlsModeUpdate(data.integrations.email.smtp), }) : undefined, } @@ -689,22 +700,19 @@ export function InstanceConfigAdminController(app: HonoApp) { operationId: 'create_admin_instance_smtp_test', summary: 'Run an SMTP configuration test', description: - 'Validates that an SMTP configuration can authenticate and accept a connection. Requires INSTANCE_CONFIG_UPDATE permission.', + 'Validates that an SMTP configuration can authenticate and accept a connection. Fields left out of the body come from the saved configuration, and the saved password is reused only for the saved host and username. An empty body tests what outgoing email uses and fails when email is off or incomplete. Requires INSTANCE_CONFIG_UPDATE permission.', responseSchema: InstanceEmailSmtpTestResponse, statusCode: 200, security: 'adminApiKey', tags: 'Admin', }), async (ctx) => { - const data = ctx.req.valid('json'); + const {smtp, problem} = await instanceConfigRepository.getSmtpTestConfig(ctx.req.valid('json')); let result: InstanceEmailSmtpTestResponse; try { + if (problem) throw new Error(problem); const provider = new SmtpEmailProvider({ - host: data.host, - port: data.port, - username: data.username, - password: data.password, - secure: data.secure, + ...smtp, connectionTimeoutMs: 10000, greetingTimeoutMs: 10000, socketTimeoutMs: 10000, @@ -718,7 +726,7 @@ export function InstanceConfigAdminController(app: HonoApp) { targetType: 'instance_config', targetId: 0n, action: 'test_smtp_connection', - metadata: {port: data.port, secure: data.secure, ok: result.ok}, + metadata: {port: smtp.port, tls_mode: resolveSmtpTlsMode(smtp.tlsMode, smtp.port), ok: result.ok}, }); return ctx.json(result); }, diff --git a/fluxer_api/src/api/admin/tests/InstanceConfigSmtpTest.test.ts b/fluxer_api/src/api/admin/tests/InstanceConfigSmtpTest.test.ts new file mode 100644 index 000000000..7fe756702 --- /dev/null +++ b/fluxer_api/src/api/admin/tests/InstanceConfigSmtpTest.test.ts @@ -0,0 +1,200 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import type {TestAccount} from '@app/api/auth/tests/AuthTestUtils'; +import {createTestAccount, setUserACLs} from '@app/api/auth/tests/AuthTestUtils'; +import {getConfig} from '@app/api/Config'; +import {type ApiTestHarness, createApiTestHarness} from '@app/api/test/ApiTestHarness'; +import {createBuilder} from '@app/api/test/TestRequestBuilder'; +import {AdminACLs} from '@fluxer/constants/src/AdminACLs'; +import type { + InstanceConfigResponse, + InstanceEmailSmtpTestResponse, +} from '@fluxer/schema/src/domains/admin/AdminSchemas'; +import nodemailer, {type Transporter} from 'nodemailer'; +import {afterAll, beforeAll, beforeEach, describe, expect, it, vi} from 'vitest'; + +describe('instance SMTP settings', () => { + let harness: ApiTestHarness; + let admin: TestAccount; + const verify = vi.fn(); + const createTransport = vi.spyOn(nodemailer, 'createTransport'); + + beforeAll(async () => { + harness = await createApiTestHarness(); + }); + + beforeEach(async () => { + await harness.reset(); + createTransport.mockReset(); + createTransport.mockReturnValue({verify} as unknown as Transporter); + verify.mockReset(); + verify.mockResolvedValue(true); + admin = await setUserACLs(harness, await createTestAccount(harness), [ + AdminACLs.AUTHENTICATE, + AdminACLs.INSTANCE_CONFIG_VIEW, + AdminACLs.INSTANCE_CONFIG_UPDATE, + ]); + }); + + afterAll(async () => { + await harness.shutdown(); + createTransport.mockRestore(); + }); + + async function patchSmtp(smtp: Record) { + const config = await createBuilder(harness, admin.token) + .patch('/admin/instance/config') + .body({integrations: {email: {smtp}}}) + .execute(); + return config.integrations.email.smtp; + } + + async function runSmtpTest(body: Record) { + return await createBuilder(harness, admin.token) + .post('/admin/instance/config/smtp-tests') + .body(body) + .execute(); + } + + it('tests the saved settings when the request names none', async () => { + await patchSmtp({ + host: 'smtp.example.com', + port: 587, + username: 'mailer', + password: 'saved-password', + tls_mode: 'implicit', + }); + await expect(runSmtpTest({})).resolves.toEqual({ok: true, error: null}); + expect(createTransport).toHaveBeenCalledWith( + expect.objectContaining({ + host: 'smtp.example.com', + port: 587, + secure: true, + requireTLS: false, + ignoreTLS: false, + auth: {user: 'mailer', pass: 'saved-password'}, + }), + ); + }); + + it('reports the failure a send with the saved settings would hit', async () => { + await patchSmtp({host: 'smtp.example.com', port: 587, username: 'mailer', password: 'saved-password'}); + verify.mockRejectedValue(new Error('wrong version number')); + await expect(runSmtpTest({})).resolves.toEqual({ok: false, error: 'wrong version number'}); + }); + + it('fills a draft for the saved host with the saved password', async () => { + await patchSmtp({ + host: 'smtp.example.com', + port: 465, + username: 'mailer', + password: 'saved-password', + tls_mode: 'implicit', + }); + await expect(runSmtpTest({host: 'SMTP.example.com', port: 2525, tls_mode: null})).resolves.toEqual({ + ok: true, + error: null, + }); + expect(createTransport).toHaveBeenCalledWith( + expect.objectContaining({ + host: 'SMTP.example.com', + port: 2525, + secure: false, + ignoreTLS: true, + auth: {user: 'mailer', pass: 'saved-password'}, + }), + ); + }); + + it.each([{host: 'draft.example.com'}, {username: 'someone-else'}, {host: 'draft.example.com', password: null}])( + 'keeps the saved password away from the draft %j', + async (draft) => { + await patchSmtp({host: 'smtp.example.com', port: 465, username: 'mailer', password: 'saved-password'}); + await expect(runSmtpTest(draft)).resolves.toEqual({ + ok: false, + error: 'Enter the SMTP password to test a different host or username', + }); + expect(createTransport).not.toHaveBeenCalled(); + }, + ); + + it('tests a draft for another host with the password it brings', async () => { + await patchSmtp({host: 'smtp.example.com', port: 465, username: 'mailer', password: 'saved-password'}); + await runSmtpTest({host: 'draft.example.com', username: 'drafter', password: 'draft-password'}); + expect(createTransport).toHaveBeenCalledWith( + expect.objectContaining({host: 'draft.example.com', auth: {user: 'drafter', pass: 'draft-password'}}), + ); + }); + + it.each([ + [{enabled: false}, 'Email is turned off'], + [{provider: 'none'}, 'The email provider is not SMTP'], + ])('fails the saved test when %j stops outgoing email', async (email, error) => { + await patchSmtp({host: 'smtp.example.com', port: 587, username: 'mailer', password: 'saved-password'}); + await createBuilder(harness, admin.token) + .patch('/admin/instance/config') + .body({integrations: {email}}) + .execute(); + await expect(runSmtpTest({})).resolves.toEqual({ok: false, error}); + expect(createTransport).not.toHaveBeenCalled(); + }); + + it.each([ + [{fromEmail: ''}, 'No from address is set'], + [{smtp: {host: '', port: 587, username: 'mailer', password: 'pass', tlsMode: null}}, 'No SMTP host is configured'], + [ + {smtp: {host: 'relay.internal', port: 25, username: '', password: '', tlsMode: null}}, + 'The SMTP username and password are both required', + ], + ])('fails the saved test when the environment leaves %j', async (environment, error) => { + const original = {...getConfig().email}; + Object.assign(getConfig().email, environment); + try { + await expect(runSmtpTest({})).resolves.toEqual({ok: false, error}); + expect(createTransport).not.toHaveBeenCalled(); + } finally { + Object.assign(getConfig().email, original); + } + }); + + it('picks the TLS mode from the port until one is saved', async () => { + const original = getConfig().email.smtp; + getConfig().email.smtp = original ? {...original, tlsMode: null} : original; + try { + expect(await patchSmtp({host: 'smtp.example.com', port: 587})).toMatchObject({ + tls_mode: null, + effective_tls_mode: 'starttls', + }); + expect(await patchSmtp({port: 465})).toMatchObject({tls_mode: null, effective_tls_mode: 'implicit'}); + expect(await patchSmtp({tls_mode: 'none'})).toMatchObject({tls_mode: 'none', effective_tls_mode: 'none'}); + } finally { + getConfig().email.smtp = original; + } + }); + + it('reads the legacy secure flag and lets the mode replace it', async () => { + expect(await patchSmtp({host: 'smtp.example.com', port: 587, secure: true})).toMatchObject({ + tls_mode: 'implicit', + }); + expect(await patchSmtp({secure: false})).toMatchObject({tls_mode: 'opportunistic'}); + expect(await patchSmtp({tls_mode: 'starttls'})).toMatchObject({tls_mode: 'starttls'}); + }); + + it('clears every saved field so the environment applies again', async () => { + await patchSmtp({ + host: 'smtp.example.com', + port: 465, + username: 'mailer', + password: 'saved-password', + tls_mode: 'implicit', + }); + const environment = getConfig().email.smtp; + expect(await patchSmtp({host: null, port: null, username: null, password: null, tls_mode: null})).toMatchObject({ + host: environment?.host, + port: environment?.port, + username: environment?.username, + tls_mode: null, + effective_tls_mode: 'none', + }); + }); +}); diff --git a/fluxer_api/src/api/admin/tests/audit_coverage/InstanceConfigAdminAuditCases.ts b/fluxer_api/src/api/admin/tests/audit_coverage/InstanceConfigAdminAuditCases.ts index 87e8e141f..f5035b859 100644 --- a/fluxer_api/src/api/admin/tests/audit_coverage/InstanceConfigAdminAuditCases.ts +++ b/fluxer_api/src/api/admin/tests/audit_coverage/InstanceConfigAdminAuditCases.ts @@ -102,13 +102,13 @@ export const InstanceConfigAdminAuditCases: ReadonlyArray; youtube?: Partial; email?: Partial> & { - smtp?: Partial; + smtp?: Partial>; }; bluesky?: Partial> & { keys?: Array>; @@ -826,6 +830,7 @@ const StoredInstanceIntegrationsSchema = z.object({ port: SmtpIntegrationUpdateSchema.shape.port.default(null), username: StoredIntegrationStringSchema, password: StoredIntegrationStringSchema, + tls_mode: SmtpIntegrationUpdateSchema.shape.tls_mode.default(null), secure: StoredNullableBooleanSchema, }) .prefault({}), @@ -980,15 +985,37 @@ function parseStoredInstanceMediaConfig(raw: string | null): InstanceMediaConfig return decodeInstanceMediaConfig(parseStoredConfigValue(raw, 'media')); } +type EffectiveSmtpConfig = NonNullable; + +interface SmtpTestConfig { + smtp: EffectiveSmtpConfig; + problem: string | null; +} + +function storedSmtpTlsMode(smtp: InstanceEmailSmtpIntegrationConfig): SmtpTlsMode | null { + return smtp.tls_mode ?? smtpTlsModeFromSecure(smtp.secure); +} + +function resolveEffectiveSmtpConfig(smtp: InstanceEmailSmtpIntegrationConfig): EffectiveSmtpConfig { + return { + host: smtp.host ?? Config.email.smtp?.host ?? '', + port: smtp.port ?? Config.email.smtp?.port ?? 587, + username: smtp.username ?? Config.email.smtp?.username ?? '', + password: smtp.password ?? Config.email.smtp?.password ?? '', + tlsMode: storedSmtpTlsMode(smtp) ?? Config.email.smtp?.tlsMode ?? null, + }; +} + +function describeIncompleteSmtpConfig(smtp: EffectiveSmtpConfig): string | null { + if (!smtp.host.trim()) return 'No SMTP host is configured'; + if (!smtp.port) return 'No SMTP port is configured'; + if (!smtp.username.trim() || !smtp.password.trim()) return 'The SMTP username and password are both required'; + return null; +} + function hasCompleteSmtpConfig(config: APIConfig['email']): boolean { if (config.provider !== 'smtp' || !config.smtp) return false; - return Boolean( - config.fromEmail.trim() && - config.smtp.host.trim() && - config.smtp.port && - config.smtp.username.trim() && - config.smtp.password.trim(), - ); + return Boolean(config.fromEmail.trim()) && describeIncompleteSmtpConfig(config.smtp) === null; } const StoredRegistrationConfigSchema = InstanceRegistrationSchema.extend({ @@ -1878,6 +1905,7 @@ export class InstanceConfigRepository { smtp: { ...current.email.smtp, ...(config.email?.smtp ?? {}), + ...(config.email?.smtp?.tls_mode === undefined ? {} : {secure: null}), }, }, bluesky: { @@ -1943,22 +1971,35 @@ export class InstanceConfigRepository { return integrations.youtube.api_key ?? normalizeOptionalString(Config.youtube.apiKey); } - async getEffectiveEmailConfig(): Promise { + async getSmtpTestConfig(draft: InstanceEmailSmtpTestRequest): Promise { + const saved = (await this.getInstanceIntegrationsConfig()).email.smtp; + const current = resolveEffectiveSmtpConfig(saved); + if (Object.values(draft).every((value) => value === undefined)) { + return {smtp: current, problem: await this.getEmailSendBlocker()}; + } + const retargeted = + (draft.host != null && draft.host.toLowerCase() !== current.host.toLowerCase()) || + (draft.username != null && draft.username !== current.username); + const smtp: EffectiveSmtpConfig = { + host: draft.host ?? current.host, + port: draft.port ?? current.port, + username: draft.username ?? current.username, + password: draft.password ?? (retargeted ? '' : current.password), + tlsMode: draft.tls_mode === undefined ? current.tlsMode : (draft.tls_mode ?? Config.email.smtp?.tlsMode ?? null), + }; + if (retargeted && !smtp.password) { + return {smtp, problem: 'Enter the SMTP password to test a different host or username'}; + } + return {smtp, problem: describeIncompleteSmtpConfig(smtp)}; + } + + private async resolveEmailConfig(): Promise<{email: APIConfig['email']; usernameMode: boolean}> { const integrations = await this.getInstanceIntegrationsConfig(); const provider = integrations.email.provider ?? Config.email.provider; const fromEmail = integrations.email.from_email ?? Config.email.fromEmail; const fromName = integrations.email.from_name ?? Config.email.fromName; - const smtp = - provider === 'smtp' - ? { - host: integrations.email.smtp.host ?? Config.email.smtp?.host ?? '', - port: integrations.email.smtp.port ?? Config.email.smtp?.port ?? 587, - username: integrations.email.smtp.username ?? Config.email.smtp?.username ?? '', - password: integrations.email.smtp.password ?? Config.email.smtp?.password ?? '', - secure: integrations.email.smtp.secure ?? Config.email.smtp?.secure ?? true, - } - : undefined; - const next: APIConfig['email'] = { + const smtp = provider === 'smtp' ? resolveEffectiveSmtpConfig(integrations.email.smtp) : undefined; + const email: APIConfig['email'] = { ...Config.email, enabled: integrations.email.enabled ?? Config.email.enabled, provider, @@ -1967,9 +2008,23 @@ export class InstanceConfigRepository { smtp, }; const usernameMode = (await this.getAccountIdentityMode()) === AccountIdentityModes.USERNAME; + return {email, usernameMode}; + } + + private async getEmailSendBlocker(): Promise { + const {email, usernameMode} = await this.resolveEmailConfig(); + if (usernameMode) return 'Email is off while accounts sign in with usernames'; + if (!email.enabled) return 'Email is turned off'; + if (email.provider !== 'smtp' || !email.smtp) return 'The email provider is not SMTP'; + if (!email.fromEmail.trim()) return 'No from address is set'; + return describeIncompleteSmtpConfig(email.smtp); + } + + async getEffectiveEmailConfig(): Promise { + const {email, usernameMode} = await this.resolveEmailConfig(); return { - ...next, - enabled: !usernameMode && next.enabled && hasCompleteSmtpConfig(next), + ...email, + enabled: !usernameMode && email.enabled && hasCompleteSmtpConfig(email), }; } @@ -2034,7 +2089,8 @@ export class InstanceConfigRepository { port: email.smtp?.port ?? null, username: email.smtp?.username || null, password_set: secretIsSet(integrations.email.smtp.password) || secretIsSet(Config.email.smtp?.password), - secure: email.smtp?.secure ?? null, + tls_mode: storedSmtpTlsMode(integrations.email.smtp), + effective_tls_mode: email.smtp ? resolveSmtpTlsMode(email.smtp.tlsMode, email.smtp.port) : null, }, disable_new_ip_authorization: integrations.email.disable_new_ip_authorization ?? false, effective_disable_new_ip_authorization: integrations.email.disable_new_ip_authorization || !email.enabled, diff --git a/fluxer_api/src/api/test/Setup.ts b/fluxer_api/src/api/test/Setup.ts index d97f610ea..dedb17389 100644 --- a/fluxer_api/src/api/test/Setup.ts +++ b/fluxer_api/src/api/test/Setup.ts @@ -81,7 +81,7 @@ function setDefaultTestEnv(): void { FLUXER_EMAIL_SMTP_PORT: '1025', FLUXER_EMAIL_SMTP_USERNAME: 'test', FLUXER_EMAIL_SMTP_PASSWORD: 'test', - FLUXER_EMAIL_SMTP_SECURE: 'false', + FLUXER_EMAIL_SMTP_TLS_MODE: 'none', FLUXER_LIVEKIT_ENABLED: 'false', FLUXER_STRIPE_ENABLED: 'true', FLUXER_SEARCH_ENGINE: 'elasticsearch', diff --git a/fluxer_app/src/features/app/components/setup/SelfHostedSetupWizardGate.tsx b/fluxer_app/src/features/app/components/setup/SelfHostedSetupWizardGate.tsx index 421aa0951..c42b2eacc 100644 --- a/fluxer_app/src/features/app/components/setup/SelfHostedSetupWizardGate.tsx +++ b/fluxer_app/src/features/app/components/setup/SelfHostedSetupWizardGate.tsx @@ -41,6 +41,7 @@ import { ServicesStep, SignInMethodStep, ThemeStep, + toSmtpTlsMode, WelcomeStep, } from '@app/features/app/components/setup/SetupWizardSteps'; import {resolveAppShellBranding} from '@app/features/app/state/AppShellBranding'; @@ -80,6 +81,7 @@ import { TagStyles, } from '@fluxer/constants/src/AccountIdentityConstants'; import {APIErrorCodes} from '@fluxer/constants/src/ApiErrorCodes'; +import type {SmtpTlsMode} from '@fluxer/constants/src/SmtpConstants'; import {type ThemeType, ThemeTypes} from '@fluxer/constants/src/UserConstants'; import type {InstanceConfigResponse} from '@fluxer/schema/src/domains/admin/AdminSchemas'; import type {MessageDescriptor} from '@lingui/core'; @@ -199,7 +201,7 @@ const DEFAULT_INTEGRATION_DRAFT: ServiceIntegrationDraft = { smtpPort: '587', smtpUsername: '', smtpPassword: '', - smtpSecure: true, + smtpTlsMode: 'auto', blueskyMode: 'later', blueskyEnabled: true, blueskyClientName: '', @@ -345,7 +347,7 @@ function buildIntegrationsPatch(draft: ServiceIntegrationDraft, accountIdentity: port: number; username: string; password: string; - secure: boolean; + tls_mode: SmtpTlsMode; }; }; bluesky?: { @@ -365,6 +367,7 @@ function buildIntegrationsPatch(draft: ServiceIntegrationDraft, accountIdentity: integrations.youtube = {api_key: draft.youtubeApiKey.trim()}; } if (draft.emailMode === 'configure' && accountIdentity === AccountIdentityModes.EMAIL) { + const smtpPort = parsePort(draft.smtpPort) ?? 587; integrations.email = { enabled: draft.emailEnabled, provider: 'smtp', @@ -372,10 +375,10 @@ function buildIntegrationsPatch(draft: ServiceIntegrationDraft, accountIdentity: from_name: draft.emailFromName.trim(), smtp: { host: draft.smtpHost.trim(), - port: parsePort(draft.smtpPort) ?? 587, + port: smtpPort, username: draft.smtpUsername.trim(), password: draft.smtpPassword.trim(), - secure: draft.smtpSecure, + tls_mode: toSmtpTlsMode(draft.smtpTlsMode, smtpPort), }, }; } @@ -599,7 +602,7 @@ export const SelfHostedSetupWizardGate = observer(() => { smtpHost: next.integrations.email.smtp.host ?? current.smtpHost, smtpPort: next.integrations.email.smtp.port ? String(next.integrations.email.smtp.port) : current.smtpPort, smtpUsername: next.integrations.email.smtp.username ?? current.smtpUsername, - smtpSecure: next.integrations.email.smtp.secure ?? current.smtpSecure, + smtpTlsMode: next.integrations.email.smtp.tls_mode ?? current.smtpTlsMode, blueskyEnabled: next.integrations.bluesky.effective_enabled || next.integrations.bluesky.enabled !== false, blueskyClientName: next.integrations.bluesky.client_name ?? current.blueskyClientName, blueskyClientUri: next.integrations.bluesky.client_uri ?? current.blueskyClientUri, @@ -864,7 +867,7 @@ export const SelfHostedSetupWizardGate = observer(() => { port, username: integrationDraft.smtpUsername.trim(), password: integrationDraft.smtpPassword, - secure: integrationDraft.smtpSecure, + tls_mode: toSmtpTlsMode(integrationDraft.smtpTlsMode, port), }); setSmtpTestResult(result.ok ? 'ok' : (result.error ?? 'failed')); } catch (error) { diff --git a/fluxer_app/src/features/app/components/setup/SetupWizardSteps.tsx b/fluxer_app/src/features/app/components/setup/SetupWizardSteps.tsx index b4212706b..49357d5b0 100644 --- a/fluxer_app/src/features/app/components/setup/SetupWizardSteps.tsx +++ b/fluxer_app/src/features/app/components/setup/SetupWizardSteps.tsx @@ -22,6 +22,7 @@ import { type TagStyle, TagStyles, } from '@fluxer/constants/src/AccountIdentityConstants'; +import {resolveSmtpTlsMode, type SmtpTlsMode, SmtpTlsModes} from '@fluxer/constants/src/SmtpConstants'; import type {ThemeType} from '@fluxer/constants/src/UserConstants'; import type {MessageDescriptor} from '@lingui/core'; import {msg} from '@lingui/core/macro'; @@ -1046,7 +1047,7 @@ export interface ServiceIntegrationDraft { smtpPort: string; smtpUsername: string; smtpPassword: string; - smtpSecure: boolean; + smtpTlsMode: SmtpTlsModeChoice; blueskyMode: IntegrationSetupMode; blueskyEnabled: boolean; blueskyClientName: string; @@ -1123,9 +1124,49 @@ const SMTP_HOST_LABEL_DESCRIPTOR = msg({message: 'SMTP host', comment: 'Label fo const SMTP_PORT_LABEL_DESCRIPTOR = msg({message: 'Port', comment: 'Label for SMTP port input.'}); const SMTP_USERNAME_LABEL_DESCRIPTOR = msg({message: 'Username', comment: 'Label for SMTP username input.'}); const SMTP_PASSWORD_LABEL_DESCRIPTOR = msg({message: 'Password', comment: 'Label for SMTP password input.'}); -const SMTP_SECURE_LABEL_DESCRIPTOR = msg({ - message: 'Use TLS', - comment: 'Label for SMTP TLS toggle.', +const SMTP_TLS_MODE_LABEL_DESCRIPTOR = msg({ + message: 'Encryption', + comment: 'Label for the choice of how the SMTP connection is encrypted.', +}); +const SMTP_TLS_MODE_AUTO_NAME_DESCRIPTOR = msg({ + message: 'Automatic', + comment: 'SMTP encryption option that picks the mode from the port.', +}); +const SMTP_TLS_MODE_AUTO_DESC_DESCRIPTOR = msg({ + message: 'Implicit TLS on port 465, required STARTTLS on any other port.', + comment: 'Description of the automatic SMTP encryption option.', +}); +const SMTP_TLS_MODE_IMPLICIT_NAME_DESCRIPTOR = msg({ + message: 'Implicit TLS', + comment: 'SMTP encryption option where the connection starts encrypted.', +}); +const SMTP_TLS_MODE_IMPLICIT_DESC_DESCRIPTOR = msg({ + message: 'The connection is encrypted from the start. Usually port 465.', + comment: 'Description of the implicit TLS SMTP encryption option.', +}); +const SMTP_TLS_MODE_STARTTLS_NAME_DESCRIPTOR = msg({ + message: 'STARTTLS', + comment: 'SMTP encryption option where a plain connection must upgrade with STARTTLS.', +}); +const SMTP_TLS_MODE_STARTTLS_DESC_DESCRIPTOR = msg({ + message: 'The connection must upgrade to TLS before signing in. Usually port 587.', + comment: 'Description of the required STARTTLS SMTP encryption option.', +}); +const SMTP_TLS_MODE_OPPORTUNISTIC_NAME_DESCRIPTOR = msg({ + message: 'STARTTLS when offered', + comment: 'SMTP encryption option where STARTTLS is used only if the server offers it.', +}); +const SMTP_TLS_MODE_OPPORTUNISTIC_DESC_DESCRIPTOR = msg({ + message: 'The connection upgrades to TLS only if the server offers it.', + comment: 'Description of the opportunistic STARTTLS SMTP encryption option.', +}); +const SMTP_TLS_MODE_NONE_NAME_DESCRIPTOR = msg({ + message: 'None', + comment: 'SMTP encryption option that never uses TLS.', +}); +const SMTP_TLS_MODE_NONE_DESC_DESCRIPTOR = msg({ + message: 'The connection is never encrypted. Only for a mail server on a network you trust.', + comment: 'Description of the SMTP encryption option that never uses TLS.', }); const SMTP_TEST_DESCRIPTOR = msg({ message: 'Test SMTP', @@ -1172,6 +1213,44 @@ const BLUESKY_PRIVATE_KEY_LABEL_DESCRIPTOR = msg({ comment: 'Label for Bluesky OAuth private key input.', }); +export type SmtpTlsModeChoice = SmtpTlsMode | 'auto'; + +export function toSmtpTlsMode(choice: SmtpTlsModeChoice, port: number): SmtpTlsMode { + return choice === 'auto' ? resolveSmtpTlsMode(null, port) : choice; +} + +function buildSmtpTlsModeOptions( + i18n: ReturnType['i18n'], +): ReadonlyArray> { + return [ + { + value: 'auto', + name: i18n._(SMTP_TLS_MODE_AUTO_NAME_DESCRIPTOR), + desc: i18n._(SMTP_TLS_MODE_AUTO_DESC_DESCRIPTOR), + }, + { + value: SmtpTlsModes.IMPLICIT, + name: i18n._(SMTP_TLS_MODE_IMPLICIT_NAME_DESCRIPTOR), + desc: i18n._(SMTP_TLS_MODE_IMPLICIT_DESC_DESCRIPTOR), + }, + { + value: SmtpTlsModes.STARTTLS, + name: i18n._(SMTP_TLS_MODE_STARTTLS_NAME_DESCRIPTOR), + desc: i18n._(SMTP_TLS_MODE_STARTTLS_DESC_DESCRIPTOR), + }, + { + value: SmtpTlsModes.OPPORTUNISTIC, + name: i18n._(SMTP_TLS_MODE_OPPORTUNISTIC_NAME_DESCRIPTOR), + desc: i18n._(SMTP_TLS_MODE_OPPORTUNISTIC_DESC_DESCRIPTOR), + }, + { + value: SmtpTlsModes.NONE, + name: i18n._(SMTP_TLS_MODE_NONE_NAME_DESCRIPTOR), + desc: i18n._(SMTP_TLS_MODE_NONE_DESC_DESCRIPTOR), + }, + ]; +} + function buildIntegrationModeOptions( i18n: ReturnType['i18n'], ): ReadonlyArray> { @@ -1490,12 +1569,19 @@ export const IntegrationStep = observer( disabled={disabled} data-flx="app.setup.setup-wizard-steps.integration-step.input.draft-change.password--2" /> - onDraftChange({smtpSecure: value})} +
+ {i18n._(SMTP_TLS_MODE_LABEL_DESCRIPTOR)} +
+ onDraftChange({smtpTlsMode: value})} disabled={disabled} - data-flx="app.setup.setup-wizard-steps.integration-step.switch.draft-change--2" + aria-label={i18n._(SMTP_TLS_MODE_LABEL_DESCRIPTOR)} + data-flx="app.setup.setup-wizard-steps.integration-step.radio-group.smtp-tls-mode" />
{countLabel}", + "STARTTLS", "Searching...", "Segoe UI", "Smileys", @@ -599,6 +605,7 @@ "Ping: {currentLatency}ms", "Ping: {latency}ms", "Premium", + "STARTTLS", "Searching...", "Segoe UI", "Shift", @@ -928,6 +935,7 @@ "Enable emoji and sticker cloning shortcuts", "Enable previews", "Enable the integrations whose credentials you have configured. Only available services are shown.", + "Encryption", "Ensures file messages appear in the order you sent them", "Enter a community name between 1 and 100 characters.", "Enter a message", @@ -1031,6 +1039,8 @@ "If you forget your password, this kit is the only way back into your account. Store it somewhere safe, like a password manager or a printed copy.", "Ignore this channel's slowmode cooldown.", "Image assets", + "Implicit TLS", + "Implicit TLS on port 465, required STARTTLS on any other port.", "Include my two-factor backup codes in the PDF and printout", "Incorrect PIN. Try again.", "Incorrect PIN. {retriesRemaining, plural, one {# attempt} other {# attempts}} left before the security key locks.", @@ -1336,6 +1346,8 @@ "Review who can message you", "Right now", "Run the instance as one community instead of many. This can only be enabled now, during setup.", + "STARTTLS", + "STARTTLS when offered", "Save a recovery kit", "Save your recovery kit", "Save {percent}%", @@ -1492,6 +1504,10 @@ "That doesn't look like an instance address. Try a domain such as {exampleInstanceDomain}.", "That image could not be used. Try a different file.", "The camera preview is still stopping. Try streaming again in a moment.", + "The connection is encrypted from the start. Usually port 465.", + "The connection is never encrypted. Only for a mail server on a network you trust.", + "The connection must upgrade to TLS before signing in. Usually port 587.", + "The connection upgrades to TLS only if the server offers it.", "The member to target.", "The message to send.", "The new price is already scheduled for {effectiveDate}.", @@ -1848,6 +1864,7 @@ "Portugal", "Premium", "Roles", + "STARTTLS", "Searching...", "Segoe UI", "Social", @@ -1967,6 +1984,7 @@ "Portugal", "Premium", "Roles", + "STARTTLS", "Searching...", "Segoe UI", "Social", @@ -2068,6 +2086,7 @@ "Ping", "Premium", "Romania", + "STARTTLS", "Searching...", "Segoe UI", "Slovakia", @@ -2221,6 +2240,7 @@ "Portugal", "Position", "Premium", + "STARTTLS", "Saturation", "Searching...", "Secret", @@ -2337,6 +2357,7 @@ "P2P", "PgDn", "PgUp", + "STARTTLS", "Searching...", "Segoe UI", "Shift", @@ -2372,10 +2393,12 @@ "Fluxer", "Google Lens", "HEVC", + "Implicit TLS", "OP", "P2P", "PgDn", "PgUp", + "STARTTLS", "Searching...", "Shift", "WebAuthn", @@ -2426,6 +2449,7 @@ "Portugal", "Premium", "Premium model", + "STARTTLS", "Searching...", "Segoe UI", "Shift", @@ -2517,6 +2541,7 @@ "Fluxer", "Google Lens", "HEVC", + "Implicit TLS", "Jitter", "Link", "Markdown", @@ -2531,6 +2556,7 @@ "Ping", "Platform", "Port", + "STARTTLS", "Searching...", "Segoe UI", "Shift", @@ -2687,6 +2713,7 @@ "Portugal", "Premium", "Prompt", + "STARTTLS", "Searching...", "Segoe UI", "Shift", @@ -2857,6 +2884,7 @@ "Premium", "Privacy", "Romania", + "STARTTLS", "Searching...", "Segoe UI", "Slovenia", @@ -2971,6 +2999,7 @@ "Ping", "Ping: {currentLatency}ms", "Ping: {latency}ms", + "STARTTLS", "Searching...", "Segoe UI", "Shift", @@ -3009,6 +3038,7 @@ "P2P", "PgDn", "PgUp", + "STARTTLS", "Searching...", "Segoe UI", "Shift", @@ -3055,6 +3085,7 @@ "PiP", "Ping", "Premium", + "STARTTLS", "Searching...", "Segoe UI", "Shift", @@ -3189,6 +3220,7 @@ "Privacy", "Relevant", "Reposts: <0>{countLabel}", + "STARTTLS", "Searching...", "Segoe UI", "Shift", @@ -3361,6 +3393,7 @@ "Premium", "Ring", "Romania", + "STARTTLS", "Searching...", "Segoe UI", "Send", @@ -3489,6 +3522,7 @@ "Plan", "Port", "Premium", + "STARTTLS", "Searching...", "Segoe UI", "Shift", @@ -3604,6 +3638,7 @@ "Portugal", "Premium", "Prompt", + "STARTTLS", "Searching...", "Segoe UI", "Shift", @@ -3758,6 +3793,7 @@ "Ping", "Port", "Premium", + "STARTTLS", "Searching...", "Secret", "Segoe UI", @@ -3876,6 +3912,7 @@ "P2P", "PgDn", "PgUp", + "STARTTLS", "Searching...", "Segoe UI", "Shift", @@ -3945,6 +3982,7 @@ "Premium", "Relevant", "Ring", + "STARTTLS", "Searching...", "Segoe UI", "Session", @@ -4061,6 +4099,7 @@ "PgDn", "PgUp", "PiP", + "STARTTLS", "Searching...", "Segoe UI", "Shift", @@ -4123,6 +4162,7 @@ "Port", "Premium", "Premium model", + "STARTTLS", "Searching...", "Segoe UI", "Shift", @@ -4213,6 +4253,7 @@ "P2P", "PgDn", "PgUp", + "STARTTLS", "Searching...", "Segoe UI", "Shift", @@ -4272,6 +4313,7 @@ "PgUp", "Ping", "Romania", + "STARTTLS", "Searching...", "Segoe UI", "Shift", @@ -4364,6 +4406,7 @@ "Markdown", "OP", "P2P", + "STARTTLS", "Searching...", "Segoe UI", "Shift", @@ -4406,6 +4449,7 @@ "P2P", "PgDn", "PgUp", + "STARTTLS", "Searching...", "Segoe UI", "Shift", diff --git a/fluxer_app/src/features/i18n/locales/bg/messages.po b/fluxer_app/src/features/i18n/locales/bg/messages.po index df1127221..96f72685e 100644 --- a/fluxer_app/src/features/i18n/locales/bg/messages.po +++ b/fluxer_app/src/features/i18n/locales/bg/messages.po @@ -5414,8 +5414,10 @@ msgstr "Предложение за автоматично довършване: #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. +#. SMTP encryption option that picks the mode from the port. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/RtcRegionSelect.tsx #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts @@ -14556,6 +14558,11 @@ msgstr "Предпочитан енкодер за нови споделяния msgid "Encoder, SVC, and bitrate presets" msgstr "Кодер, SVC и битрейт предварителни настройки" +#. Label for the choice of how the SMTP connection is encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Encryption" +msgstr "Криптиране" + #: src/features/input/utils/KeybindUtils.ts msgctxt "keyboard-key-name" msgid "End" @@ -18420,6 +18427,16 @@ msgstr "Изображения" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Изображенията, поставени от клипборда ти, се изпращат като прикачени файлове, а ти нямаш разрешение да прикачваш файлове в този канал." +#. SMTP encryption option where the connection starts encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS" +msgstr "Имплицитно TLS" + +#. Description of the automatic SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS on port 465, required STARTTLS on any other port." +msgstr "Неявен TLS на порт 465, задължителен STARTTLS на всеки друг порт." + #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx msgid "Import" @@ -23948,8 +23965,10 @@ msgstr "Без преобразуване" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. #. Library picker entry meaning no sound is selected for this scope. #. Member verification level option in the community moderation settings tab. Short standalone label for the lowest level (no verification). +#. SMTP encryption option that never uses TLS. #. Short label in the visual tab. Keep it concise. #. Summary row value on the confirm step when no items in the category were selected. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/channel_header_components/developer_tools/DeveloperToolsShared.ts #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx #: src/features/guild/utils/guild_tabs/audit_log/AuditLogSharedMessages.ts @@ -33153,6 +33172,16 @@ msgstr "Започнато от {name}" msgid "Started displaying members with this role separately" msgstr "Започна показването на членовете с тази роля отделно" +#. SMTP encryption option where a plain connection must upgrade with STARTTLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS" +msgstr "STARTTLS" + +#. SMTP encryption option where STARTTLS is used only if the server offers it. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS when offered" +msgstr "STARTTLS, ако се предлага" + #. 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 msgid "Startup" @@ -34625,6 +34654,26 @@ msgstr "Общността, от която произлиза това, е из msgid "The community you're looking for may have been deleted or you may not have access to it." msgstr "Общността, която търсиш, може да е изтрита или да нямаш достъп до нея." +#. Description of the implicit TLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is encrypted from the start. Usually port 465." +msgstr "Връзката е криптирана от самото начало. Обикновено порт 465." + +#. Description of the SMTP encryption option that never uses TLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is never encrypted. Only for a mail server on a network you trust." +msgstr "Връзката никога не е криптирана. Само за имейл сървър в мрежа, на която имате доверие." + +#. Description of the required STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection must upgrade to TLS before signing in. Usually port 587." +msgstr "Връзката трябва да бъде надградена до TLS преди влизане. Обикновено порт 587." + +#. Description of the opportunistic STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection upgrades to TLS only if the server offers it." +msgstr "Връзката се надгражда до TLS само ако сървърът го предлага." + #. Modal body shown when a desktop update download fails. #: src/features/updater/commands/UpdaterModalCommands.tsx msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable." @@ -38364,11 +38413,6 @@ msgstr "Използване на системната настройка за msgid "Use this device's system reduced motion preference, or customize it below." msgstr "Използвай системната настройка за намалено движение на това устройство или я персонализирай по-долу." -#. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx -msgid "Use TLS" -msgstr "Използване на TLS" - #. Permission name: allows voice activation instead of requiring push-to-talk. #: src/features/permissions/utils/PermissionLabelDescriptors.ts msgid "Use voice activity" diff --git a/fluxer_app/src/features/i18n/locales/cs/messages.po b/fluxer_app/src/features/i18n/locales/cs/messages.po index c88133159..4a50342fc 100644 --- a/fluxer_app/src/features/i18n/locales/cs/messages.po +++ b/fluxer_app/src/features/i18n/locales/cs/messages.po @@ -5414,8 +5414,10 @@ msgstr "Návrh automatického doplňování: {label}, {selectedOptionPosition} z #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. +#. SMTP encryption option that picks the mode from the port. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/RtcRegionSelect.tsx #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts @@ -14556,6 +14558,11 @@ msgstr "Preferovaný enkodér pro nová sdílení obrazovky." msgid "Encoder, SVC, and bitrate presets" msgstr "Kodér, SVC a předvolby přenosové rychlosti" +#. Label for the choice of how the SMTP connection is encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Encryption" +msgstr "Šifrování" + #: src/features/input/utils/KeybindUtils.ts msgctxt "keyboard-key-name" msgid "End" @@ -18420,6 +18427,16 @@ msgstr "Obrázky" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Obrázky vložené ze schránky se odesílají jako přílohy a vy nemáte oprávnění připojovat soubory v tomto kanálu." +#. SMTP encryption option where the connection starts encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS" +msgstr "Implicitní TLS" + +#. Description of the automatic SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS on port 465, required STARTTLS on any other port." +msgstr "Implicitní TLS na portu 465, vyžaduje STARTTLS na jakémkoli jiném portu." + #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx msgid "Import" @@ -23948,8 +23965,10 @@ msgstr "Bez převodu" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. #. Library picker entry meaning no sound is selected for this scope. #. Member verification level option in the community moderation settings tab. Short standalone label for the lowest level (no verification). +#. SMTP encryption option that never uses TLS. #. Short label in the visual tab. Keep it concise. #. Summary row value on the confirm step when no items in the category were selected. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/channel_header_components/developer_tools/DeveloperToolsShared.ts #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx #: src/features/guild/utils/guild_tabs/audit_log/AuditLogSharedMessages.ts @@ -33153,6 +33172,16 @@ msgstr "Zahájeno uživatelem {name}" msgid "Started displaying members with this role separately" msgstr "Zapnuto oddělené zobrazení členů s touto rolí" +#. SMTP encryption option where a plain connection must upgrade with STARTTLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS" +msgstr "STARTTLS" + +#. SMTP encryption option where STARTTLS is used only if the server offers it. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS when offered" +msgstr "STARTTLS, pokud je nabízeno" + #. 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 msgid "Startup" @@ -34625,6 +34654,26 @@ msgstr "Komunita, ze které tato položka pochází, zakázala klonování, tak msgid "The community you're looking for may have been deleted or you may not have access to it." msgstr "Komunita, kterou hledáte, mohla být smazána nebo k ní nemáte přístup." +#. Description of the implicit TLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is encrypted from the start. Usually port 465." +msgstr "Spojení je šifrované od začátku. Obvykle port 465." + +#. Description of the SMTP encryption option that never uses TLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is never encrypted. Only for a mail server on a network you trust." +msgstr "Připojení není nikdy šifrované. Pouze pro poštovní server v síti, které důvěřujete." + +#. Description of the required STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection must upgrade to TLS before signing in. Usually port 587." +msgstr "Připojení musí před přihlášením přejít na TLS. Obvykle port 587." + +#. Description of the opportunistic STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection upgrades to TLS only if the server offers it." +msgstr "Připojení se upgraduje na TLS pouze v případě, že jej server nabídne." + #. Modal body shown when a desktop update download fails. #: src/features/updater/commands/UpdaterModalCommands.tsx msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable." @@ -38364,11 +38413,6 @@ msgstr "Použít systémové nastavení omezeného pohybu tohoto zařízení" msgid "Use this device's system reduced motion preference, or customize it below." msgstr "Použít předvolbu omezeného pohybu systému tohoto zařízení, nebo si ji přizpůsobit níže." -#. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx -msgid "Use TLS" -msgstr "Použít TLS" - #. Permission name: allows voice activation instead of requiring push-to-talk. #: src/features/permissions/utils/PermissionLabelDescriptors.ts msgid "Use voice activity" diff --git a/fluxer_app/src/features/i18n/locales/da/messages.po b/fluxer_app/src/features/i18n/locales/da/messages.po index 4a1379e8f..53542bd8e 100644 --- a/fluxer_app/src/features/i18n/locales/da/messages.po +++ b/fluxer_app/src/features/i18n/locales/da/messages.po @@ -5414,8 +5414,10 @@ msgstr "Forslag til autoudfyldelse: {label}, {selectedOptionPosition} af {result #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. +#. SMTP encryption option that picks the mode from the port. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/RtcRegionSelect.tsx #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts @@ -14556,6 +14558,11 @@ msgstr "Encoderpræference for nye skærmdelinger." msgid "Encoder, SVC, and bitrate presets" msgstr "Encoder, SVC og bitrate-forudindstillinger" +#. Label for the choice of how the SMTP connection is encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Encryption" +msgstr "Kryptering" + #: src/features/input/utils/KeybindUtils.ts msgctxt "keyboard-key-name" msgid "End" @@ -18420,6 +18427,16 @@ msgstr "Billeder" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Billeder, der er indsat fra din udklipsholder, sendes som vedhæftede filer, og du har ikke tilladelse til at vedhæfte filer i denne kanal." +#. SMTP encryption option where the connection starts encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS" +msgstr "Implicit TLS" + +#. Description of the automatic SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS on port 465, required STARTTLS on any other port." +msgstr "Implicit TLS på port 465, påkrævet STARTTLS på enhver anden port." + #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx msgid "Import" @@ -23948,8 +23965,10 @@ msgstr "Ingen konvertering" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. #. Library picker entry meaning no sound is selected for this scope. #. Member verification level option in the community moderation settings tab. Short standalone label for the lowest level (no verification). +#. SMTP encryption option that never uses TLS. #. Short label in the visual tab. Keep it concise. #. Summary row value on the confirm step when no items in the category were selected. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/channel_header_components/developer_tools/DeveloperToolsShared.ts #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx #: src/features/guild/utils/guild_tabs/audit_log/AuditLogSharedMessages.ts @@ -33153,6 +33172,16 @@ msgstr "Startet af {name}" msgid "Started displaying members with this role separately" msgstr "Begyndte at vise medlemmer med denne rolle separat" +#. SMTP encryption option where a plain connection must upgrade with STARTTLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS" +msgstr "STARTTLS" + +#. SMTP encryption option where STARTTLS is used only if the server offers it. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS when offered" +msgstr "STARTTLS, når det tilbydes" + #. 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 msgid "Startup" @@ -34625,6 +34654,26 @@ msgstr "Fællesskabet, som dette stammer fra, har slået kloning fra, så det ka msgid "The community you're looking for may have been deleted or you may not have access to it." msgstr "Det fællesskab, du leder efter, er muligvis blevet slettet, eller også har du ikke adgang til det." +#. Description of the implicit TLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is encrypted from the start. Usually port 465." +msgstr "Forbindelsen er krypteret fra start. Normalt port 465." + +#. Description of the SMTP encryption option that never uses TLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is never encrypted. Only for a mail server on a network you trust." +msgstr "Forbindelsen krypteres aldrig. Kun til en mailserver på et netværk, du stoler på." + +#. Description of the required STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection must upgrade to TLS before signing in. Usually port 587." +msgstr "Forbindelsen skal opgraderes til TLS, før du logger ind. Normalt port 587." + +#. Description of the opportunistic STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection upgrades to TLS only if the server offers it." +msgstr "Forbindelsen opgraderes kun til TLS, hvis serveren tilbyder det." + #. Modal body shown when a desktop update download fails. #: src/features/updater/commands/UpdaterModalCommands.tsx msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable." @@ -38364,11 +38413,6 @@ msgstr "Brug enhedens systemindstilling for reduceret bevægelse" msgid "Use this device's system reduced motion preference, or customize it below." msgstr "Brug enhedens systemindstilling for reduceret bevægelse, eller tilpas den nedenfor." -#. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx -msgid "Use TLS" -msgstr "Brug TLS" - #. Permission name: allows voice activation instead of requiring push-to-talk. #: src/features/permissions/utils/PermissionLabelDescriptors.ts msgid "Use voice activity" diff --git a/fluxer_app/src/features/i18n/locales/de/messages.po b/fluxer_app/src/features/i18n/locales/de/messages.po index 3536e8e9e..15c7b0b5f 100644 --- a/fluxer_app/src/features/i18n/locales/de/messages.po +++ b/fluxer_app/src/features/i18n/locales/de/messages.po @@ -5414,8 +5414,10 @@ msgstr "Vervollständigungsvorschlag: {label}, {selectedOptionPosition} von {res #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. +#. SMTP encryption option that picks the mode from the port. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/RtcRegionSelect.tsx #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts @@ -14556,6 +14558,11 @@ msgstr "Encoder-Einstellung für neue Bildschirmfreigaben." msgid "Encoder, SVC, and bitrate presets" msgstr "Encoder, SVC und Bitraten-Voreinstellungen" +#. Label for the choice of how the SMTP connection is encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Encryption" +msgstr "Verschlüsselung" + #: src/features/input/utils/KeybindUtils.ts msgctxt "keyboard-key-name" msgid "End" @@ -18420,6 +18427,16 @@ msgstr "Bilder" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Aus deiner Zwischenablage eingefügte Bilder werden als Anhänge gesendet. Du hast in diesem Kanal keine Berechtigung, Dateien anzuhängen." +#. SMTP encryption option where the connection starts encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS" +msgstr "Implizites TLS" + +#. Description of the automatic SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS on port 465, required STARTTLS on any other port." +msgstr "Implizites TLS über Port 465, erforderliches STARTTLS über jeden anderen Port." + #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx msgid "Import" @@ -23948,8 +23965,10 @@ msgstr "Nicht konvertieren" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. #. Library picker entry meaning no sound is selected for this scope. #. Member verification level option in the community moderation settings tab. Short standalone label for the lowest level (no verification). +#. SMTP encryption option that never uses TLS. #. Short label in the visual tab. Keep it concise. #. Summary row value on the confirm step when no items in the category were selected. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/channel_header_components/developer_tools/DeveloperToolsShared.ts #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx #: src/features/guild/utils/guild_tabs/audit_log/AuditLogSharedMessages.ts @@ -33153,6 +33172,16 @@ msgstr "Gestartet von {name}" msgid "Started displaying members with this role separately" msgstr "Mitglieder mit dieser Rolle werden jetzt separat angezeigt" +#. SMTP encryption option where a plain connection must upgrade with STARTTLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS" +msgstr "STARTTLS" + +#. SMTP encryption option where STARTTLS is used only if the server offers it. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS when offered" +msgstr "STARTTLS, wenn angeboten" + #. 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 msgid "Startup" @@ -34625,6 +34654,26 @@ msgstr "Die Community, aus der dies stammt, hat das Klonen deaktiviert, daher ka msgid "The community you're looking for may have been deleted or you may not have access to it." msgstr "Die gesuchte Community wurde möglicherweise gelöscht oder du hast keinen Zugriff darauf." +#. Description of the implicit TLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is encrypted from the start. Usually port 465." +msgstr "Die Verbindung ist von Anfang an verschlüsselt. Normalerweise Port 465." + +#. Description of the SMTP encryption option that never uses TLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is never encrypted. Only for a mail server on a network you trust." +msgstr "Die Verbindung wird nie verschlüsselt. Nur für einen Mailserver in einem Netzwerk, dem du vertraust." + +#. Description of the required STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection must upgrade to TLS before signing in. Usually port 587." +msgstr "Die Verbindung muss vor der Anmeldung auf TLS aktualisiert werden. Normalerweise Port 587." + +#. Description of the opportunistic STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection upgrades to TLS only if the server offers it." +msgstr "Die Verbindung wird nur dann auf TLS aktualisiert, wenn der Server dies anbietet." + #. Modal body shown when a desktop update download fails. #: src/features/updater/commands/UpdaterModalCommands.tsx msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable." @@ -38364,11 +38413,6 @@ msgstr "Die Einstellung „Bewegung reduzieren“ des Systems dieses Geräts ver msgid "Use this device's system reduced motion preference, or customize it below." msgstr "Verwende die Einstellung für reduzierte Bewegung dieses Geräts oder passe sie unten an." -#. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx -msgid "Use TLS" -msgstr "TLS verwenden" - #. Permission name: allows voice activation instead of requiring push-to-talk. #: src/features/permissions/utils/PermissionLabelDescriptors.ts msgid "Use voice activity" diff --git a/fluxer_app/src/features/i18n/locales/el/messages.po b/fluxer_app/src/features/i18n/locales/el/messages.po index 48e156785..3a17375e9 100644 --- a/fluxer_app/src/features/i18n/locales/el/messages.po +++ b/fluxer_app/src/features/i18n/locales/el/messages.po @@ -5414,8 +5414,10 @@ msgstr "Πρόταση αυτόματης συμπλήρωσης: {label}, {sele #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. +#. SMTP encryption option that picks the mode from the port. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/RtcRegionSelect.tsx #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts @@ -14556,6 +14558,11 @@ msgstr "Προτιμώμενος κωδικοποιητής για νέα κοι msgid "Encoder, SVC, and bitrate presets" msgstr "Κωδικοποιητής, SVC και προεπιλογές ρυθμού μετάδοσης" +#. Label for the choice of how the SMTP connection is encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Encryption" +msgstr "Κρυπτογράφηση" + #: src/features/input/utils/KeybindUtils.ts msgctxt "keyboard-key-name" msgid "End" @@ -18420,6 +18427,16 @@ msgstr "Εικόνες" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Οι εικόνες που επικολλάτε από το πρόχειρό σας αποστέλλονται ως συνημμένα και δεν έχετε δικαίωμα επισύναψης αρχείων σε αυτό το κανάλι." +#. SMTP encryption option where the connection starts encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS" +msgstr "Ρητή TLS" + +#. Description of the automatic SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS on port 465, required STARTTLS on any other port." +msgstr "Ρητή κρυπτογράφηση TLS στη θύρα 465, απαιτείται STARTTLS σε οποιαδήποτε άλλη θύρα." + #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx msgid "Import" @@ -23948,8 +23965,10 @@ msgstr "Χωρίς μετατροπή" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. #. Library picker entry meaning no sound is selected for this scope. #. Member verification level option in the community moderation settings tab. Short standalone label for the lowest level (no verification). +#. SMTP encryption option that never uses TLS. #. Short label in the visual tab. Keep it concise. #. Summary row value on the confirm step when no items in the category were selected. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/channel_header_components/developer_tools/DeveloperToolsShared.ts #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx #: src/features/guild/utils/guild_tabs/audit_log/AuditLogSharedMessages.ts @@ -33153,6 +33172,16 @@ msgstr "Ξεκίνησε από τον/την {name}" msgid "Started displaying members with this role separately" msgstr "Άρχισε η ξεχωριστή εμφάνιση των μελών με αυτόν τον ρόλο" +#. SMTP encryption option where a plain connection must upgrade with STARTTLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS" +msgstr "STARTTLS" + +#. SMTP encryption option where STARTTLS is used only if the server offers it. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS when offered" +msgstr "STARTTLS όταν προσφέρεται" + #. 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 msgid "Startup" @@ -34625,6 +34654,26 @@ msgstr "Η κοινότητα από την οποία προήλθε έχει msgid "The community you're looking for may have been deleted or you may not have access to it." msgstr "Η κοινότητα που ψάχνετε μπορεί να έχει διαγραφεί ή να μην έχετε πρόσβαση σε αυτήν." +#. Description of the implicit TLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is encrypted from the start. Usually port 465." +msgstr "Η σύνδεση είναι κρυπτογραφημένη από την αρχή. Συνήθως η θύρα 465." + +#. Description of the SMTP encryption option that never uses TLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is never encrypted. Only for a mail server on a network you trust." +msgstr "Η σύνδεση δεν κρυπτογραφείται ποτέ. Μόνο για έναν διακομιστή αλληλογραφίας σε ένα δίκτυο που εμπιστεύεστε." + +#. Description of the required STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection must upgrade to TLS before signing in. Usually port 587." +msgstr "Η σύνδεση πρέπει να αναβαθμιστεί σε TLS πριν τη σύνδεση. Συνήθως θύρα 587." + +#. Description of the opportunistic STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection upgrades to TLS only if the server offers it." +msgstr "Η σύνδεση αναβαθμίζεται σε TLS μόνο εάν ο διακομιστής το προσφέρει." + #. Modal body shown when a desktop update download fails. #: src/features/updater/commands/UpdaterModalCommands.tsx msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable." @@ -38364,11 +38413,6 @@ msgstr "Χρήση της προτίμησης μειωμένης κίνησης msgid "Use this device's system reduced motion preference, or customize it below." msgstr "Χρησιμοποιήστε την προτίμηση μειωμένης κίνησης του συστήματος αυτής της συσκευής ή προσαρμόστε την παρακάτω." -#. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx -msgid "Use TLS" -msgstr "Χρήση TLS" - #. Permission name: allows voice activation instead of requiring push-to-talk. #: src/features/permissions/utils/PermissionLabelDescriptors.ts msgid "Use voice activity" 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 893449128..a6fdb9e8e 100644 --- a/fluxer_app/src/features/i18n/locales/en-GB/messages.po +++ b/fluxer_app/src/features/i18n/locales/en-GB/messages.po @@ -5414,8 +5414,10 @@ msgstr "Autocomplete suggestion: {label}, {selectedOptionPosition} of {resultCou #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. +#. SMTP encryption option that picks the mode from the port. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/RtcRegionSelect.tsx #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts @@ -14556,6 +14558,11 @@ msgstr "Encoder preference for new screen shares." msgid "Encoder, SVC, and bitrate presets" msgstr "Encoder, SVC and bitrate presets" +#. Label for the choice of how the SMTP connection is encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Encryption" +msgstr "Encryption" + #: src/features/input/utils/KeybindUtils.ts msgctxt "keyboard-key-name" msgid "End" @@ -18420,6 +18427,16 @@ msgstr "Images" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." +#. SMTP encryption option where the connection starts encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS" +msgstr "Implicit TLS" + +#. Description of the automatic SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS on port 465, required STARTTLS on any other port." +msgstr "Implicit TLS on port 465, required STARTTLS on any other port." + #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx msgid "Import" @@ -23948,8 +23965,10 @@ msgstr "Non-convert" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. #. Library picker entry meaning no sound is selected for this scope. #. Member verification level option in the community moderation settings tab. Short standalone label for the lowest level (no verification). +#. SMTP encryption option that never uses TLS. #. Short label in the visual tab. Keep it concise. #. Summary row value on the confirm step when no items in the category were selected. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/channel_header_components/developer_tools/DeveloperToolsShared.ts #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx #: src/features/guild/utils/guild_tabs/audit_log/AuditLogSharedMessages.ts @@ -33153,6 +33172,16 @@ msgstr "Started by {name}" msgid "Started displaying members with this role separately" msgstr "Started displaying members with this role separately" +#. SMTP encryption option where a plain connection must upgrade with STARTTLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS" +msgstr "STARTTLS" + +#. SMTP encryption option where STARTTLS is used only if the server offers it. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS when offered" +msgstr "STARTTLS when offered" + #. 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 msgid "Startup" @@ -34625,6 +34654,26 @@ msgstr "The community this came from has turned off cloning, so it cannot be cop msgid "The community you're looking for may have been deleted or you may not have access to it." msgstr "The community you're looking for may have been deleted or you may not have access to it." +#. Description of the implicit TLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is encrypted from the start. Usually port 465." +msgstr "The connection is encrypted from the start. Usually port 465." + +#. Description of the SMTP encryption option that never uses TLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is never encrypted. Only for a mail server on a network you trust." +msgstr "The connection is never encrypted. Only for a mail server on a network you trust." + +#. Description of the required STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection must upgrade to TLS before signing in. Usually port 587." +msgstr "The connection must upgrade to TLS before signing in. Usually port 587." + +#. Description of the opportunistic STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection upgrades to TLS only if the server offers it." +msgstr "The connection upgrades to TLS only if the server offers it." + #. Modal body shown when a desktop update download fails. #: src/features/updater/commands/UpdaterModalCommands.tsx msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable." @@ -38364,11 +38413,6 @@ msgstr "Use this device's system reduced motion preference" msgid "Use this device's system reduced motion preference, or customize it below." msgstr "Use this device's system reduced motion preference, or customise it below." -#. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx -msgid "Use TLS" -msgstr "Use TLS" - #. Permission name: allows voice activation instead of requiring push-to-talk. #: src/features/permissions/utils/PermissionLabelDescriptors.ts msgid "Use voice activity" 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 bbd3b349a..3a7588d61 100644 --- a/fluxer_app/src/features/i18n/locales/en-US/messages.po +++ b/fluxer_app/src/features/i18n/locales/en-US/messages.po @@ -5414,8 +5414,10 @@ msgstr "Autocomplete suggestion: {label}, {selectedOptionPosition} of {resultCou #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. +#. SMTP encryption option that picks the mode from the port. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/RtcRegionSelect.tsx #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts @@ -14556,6 +14558,11 @@ msgstr "Encoder preference for new screen shares." msgid "Encoder, SVC, and bitrate presets" msgstr "Encoder, SVC, and bitrate presets" +#. Label for the choice of how the SMTP connection is encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Encryption" +msgstr "Encryption" + #: src/features/input/utils/KeybindUtils.ts msgctxt "keyboard-key-name" msgid "End" @@ -18420,6 +18427,16 @@ msgstr "Images" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." +#. SMTP encryption option where the connection starts encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS" +msgstr "Implicit TLS" + +#. Description of the automatic SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS on port 465, required STARTTLS on any other port." +msgstr "Implicit TLS on port 465, required STARTTLS on any other port." + #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx msgid "Import" @@ -23948,8 +23965,10 @@ msgstr "Non-convert" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. #. Library picker entry meaning no sound is selected for this scope. #. Member verification level option in the community moderation settings tab. Short standalone label for the lowest level (no verification). +#. SMTP encryption option that never uses TLS. #. Short label in the visual tab. Keep it concise. #. Summary row value on the confirm step when no items in the category were selected. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/channel_header_components/developer_tools/DeveloperToolsShared.ts #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx #: src/features/guild/utils/guild_tabs/audit_log/AuditLogSharedMessages.ts @@ -33153,6 +33172,16 @@ msgstr "Started by {name}" msgid "Started displaying members with this role separately" msgstr "Started displaying members with this role separately" +#. SMTP encryption option where a plain connection must upgrade with STARTTLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS" +msgstr "STARTTLS" + +#. SMTP encryption option where STARTTLS is used only if the server offers it. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS when offered" +msgstr "STARTTLS when offered" + #. 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 msgid "Startup" @@ -34625,6 +34654,26 @@ msgstr "The community this came from has turned off cloning, so it cannot be cop msgid "The community you're looking for may have been deleted or you may not have access to it." msgstr "The community you're looking for may have been deleted or you may not have access to it." +#. Description of the implicit TLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is encrypted from the start. Usually port 465." +msgstr "The connection is encrypted from the start. Usually port 465." + +#. Description of the SMTP encryption option that never uses TLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is never encrypted. Only for a mail server on a network you trust." +msgstr "The connection is never encrypted. Only for a mail server on a network you trust." + +#. Description of the required STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection must upgrade to TLS before signing in. Usually port 587." +msgstr "The connection must upgrade to TLS before signing in. Usually port 587." + +#. Description of the opportunistic STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection upgrades to TLS only if the server offers it." +msgstr "The connection upgrades to TLS only if the server offers it." + #. Modal body shown when a desktop update download fails. #: src/features/updater/commands/UpdaterModalCommands.tsx msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable." @@ -38364,11 +38413,6 @@ msgstr "Use this device's system reduced motion preference" msgid "Use this device's system reduced motion preference, or customize it below." msgstr "Use this device's system reduced motion preference, or customize it below." -#. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx -msgid "Use TLS" -msgstr "Use TLS" - #. Permission name: allows voice activation instead of requiring push-to-talk. #: src/features/permissions/utils/PermissionLabelDescriptors.ts msgid "Use voice activity" 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 a01740e4c..6d7d65910 100644 --- a/fluxer_app/src/features/i18n/locales/es-419/messages.po +++ b/fluxer_app/src/features/i18n/locales/es-419/messages.po @@ -5414,8 +5414,10 @@ msgstr "Sugerencia de autocompletar: {label}, {selectedOptionPosition} de {resul #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. +#. SMTP encryption option that picks the mode from the port. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/RtcRegionSelect.tsx #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts @@ -14556,6 +14558,11 @@ msgstr "Preferencia de codificador para nuevas transmisiones de pantalla compart msgid "Encoder, SVC, and bitrate presets" msgstr "Codificador, SVC y ajustes preestablecidos de tasa de bits" +#. Label for the choice of how the SMTP connection is encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Encryption" +msgstr "Cifrado" + #: src/features/input/utils/KeybindUtils.ts msgctxt "keyboard-key-name" msgid "End" @@ -18420,6 +18427,16 @@ msgstr "Imágenes" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Las imágenes que pegas desde tu portapapeles se envían como archivos adjuntos, y no tienes permiso para adjuntar archivos en este canal." +#. SMTP encryption option where the connection starts encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS" +msgstr "TLS implícito" + +#. Description of the automatic SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS on port 465, required STARTTLS on any other port." +msgstr "TLS implícito en el puerto 465, STARTTLS requerido en cualquier otro puerto." + #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx msgid "Import" @@ -23948,8 +23965,10 @@ msgstr "No convertir" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. #. Library picker entry meaning no sound is selected for this scope. #. Member verification level option in the community moderation settings tab. Short standalone label for the lowest level (no verification). +#. SMTP encryption option that never uses TLS. #. Short label in the visual tab. Keep it concise. #. Summary row value on the confirm step when no items in the category were selected. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/channel_header_components/developer_tools/DeveloperToolsShared.ts #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx #: src/features/guild/utils/guild_tabs/audit_log/AuditLogSharedMessages.ts @@ -33153,6 +33172,16 @@ msgstr "Iniciado por {name}" msgid "Started displaying members with this role separately" msgstr "Se empezó a mostrar a los miembros con este rol por separado" +#. SMTP encryption option where a plain connection must upgrade with STARTTLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS" +msgstr "STARTTLS" + +#. SMTP encryption option where STARTTLS is used only if the server offers it. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS when offered" +msgstr "STARTTLS si se ofrece" + #. 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 msgid "Startup" @@ -34625,6 +34654,26 @@ msgstr "La comunidad de origen inhabilitó la clonación, por lo que no se puede msgid "The community you're looking for may have been deleted or you may not have access to it." msgstr "Es posible que la comunidad que buscas haya sido eliminada o que no tengas acceso a ella." +#. Description of the implicit TLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is encrypted from the start. Usually port 465." +msgstr "La conexión se cifra desde el principio. Normalmente el puerto 465." + +#. Description of the SMTP encryption option that never uses TLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is never encrypted. Only for a mail server on a network you trust." +msgstr "La conexión nunca se cifra. Solo para un servidor de correo en una red de confianza." + +#. Description of the required STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection must upgrade to TLS before signing in. Usually port 587." +msgstr "La conexión debe actualizarse a TLS antes de iniciar sesión. Usualmente el puerto 587." + +#. Description of the opportunistic STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection upgrades to TLS only if the server offers it." +msgstr "La conexión se actualiza a TLS solo si el servidor lo ofrece." + #. Modal body shown when a desktop update download fails. #: src/features/updater/commands/UpdaterModalCommands.tsx msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable." @@ -38364,11 +38413,6 @@ msgstr "Usar la preferencia de movimiento reducido del sistema de este dispositi msgid "Use this device's system reduced motion preference, or customize it below." msgstr "Usa la preferencia de movimiento reducido del sistema de este dispositivo o personalízala a continuación." -#. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx -msgid "Use TLS" -msgstr "Usar TLS" - #. Permission name: allows voice activation instead of requiring push-to-talk. #: src/features/permissions/utils/PermissionLabelDescriptors.ts msgid "Use voice activity" 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 10ee21cfd..2143e3101 100644 --- a/fluxer_app/src/features/i18n/locales/es-ES/messages.po +++ b/fluxer_app/src/features/i18n/locales/es-ES/messages.po @@ -5414,8 +5414,10 @@ msgstr "Sugerencia de autocompletar: {label}, {selectedOptionPosition} de {resul #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. +#. SMTP encryption option that picks the mode from the port. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/RtcRegionSelect.tsx #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts @@ -14556,6 +14558,11 @@ msgstr "Preferencia del codificador para nuevos flujos de pantalla compartida." msgid "Encoder, SVC, and bitrate presets" msgstr "Ajustes predeterminados de codificador, SVC y tasa de bits" +#. Label for the choice of how the SMTP connection is encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Encryption" +msgstr "Cifrado" + #: src/features/input/utils/KeybindUtils.ts msgctxt "keyboard-key-name" msgid "End" @@ -18420,6 +18427,16 @@ msgstr "Imágenes" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Las imágenes pegadas desde tu portapapeles se envían como archivos adjuntos y no tienes permiso para adjuntar archivos en este canal." +#. SMTP encryption option where the connection starts encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS" +msgstr "TLS implícito" + +#. Description of the automatic SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS on port 465, required STARTTLS on any other port." +msgstr "TLS implícito en el puerto 465, STARTTLS obligatorio en cualquier otro puerto." + #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx msgid "Import" @@ -23948,8 +23965,10 @@ msgstr "No convertir" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. #. Library picker entry meaning no sound is selected for this scope. #. Member verification level option in the community moderation settings tab. Short standalone label for the lowest level (no verification). +#. SMTP encryption option that never uses TLS. #. Short label in the visual tab. Keep it concise. #. Summary row value on the confirm step when no items in the category were selected. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/channel_header_components/developer_tools/DeveloperToolsShared.ts #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx #: src/features/guild/utils/guild_tabs/audit_log/AuditLogSharedMessages.ts @@ -33153,6 +33172,16 @@ msgstr "Iniciado por {name}" msgid "Started displaying members with this role separately" msgstr "Se empezó a mostrar a los miembros con este rol por separado" +#. SMTP encryption option where a plain connection must upgrade with STARTTLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS" +msgstr "STARTTLS" + +#. SMTP encryption option where STARTTLS is used only if the server offers it. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS when offered" +msgstr "STARTTLS si se ofrece" + #. 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 msgid "Startup" @@ -34625,6 +34654,26 @@ msgstr "La comunidad de origen ha desactivado la clonación, por lo que no se pu msgid "The community you're looking for may have been deleted or you may not have access to it." msgstr "Puede que la comunidad que buscas haya sido eliminada o que no tengas acceso a ella." +#. Description of the implicit TLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is encrypted from the start. Usually port 465." +msgstr "La conexión está cifrada desde el principio. Normalmente el puerto 465." + +#. Description of the SMTP encryption option that never uses TLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is never encrypted. Only for a mail server on a network you trust." +msgstr "La conexión nunca se cifra. Solo para un servidor de correo en una red de confianza." + +#. Description of the required STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection must upgrade to TLS before signing in. Usually port 587." +msgstr "La conexión debe actualizarse a TLS antes de iniciar sesión. Normalmente el puerto 587." + +#. Description of the opportunistic STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection upgrades to TLS only if the server offers it." +msgstr "La conexión se actualiza a TLS solo si el servidor lo ofrece." + #. Modal body shown when a desktop update download fails. #: src/features/updater/commands/UpdaterModalCommands.tsx msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable." @@ -38364,11 +38413,6 @@ msgstr "Usar la preferencia de movimiento reducido del sistema de este dispositi msgid "Use this device's system reduced motion preference, or customize it below." msgstr "Usa la preferencia de movimiento reducido del sistema de este dispositivo o personalízala a continuación." -#. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx -msgid "Use TLS" -msgstr "Usar TLS" - #. Permission name: allows voice activation instead of requiring push-to-talk. #: src/features/permissions/utils/PermissionLabelDescriptors.ts msgid "Use voice activity" diff --git a/fluxer_app/src/features/i18n/locales/fi/messages.po b/fluxer_app/src/features/i18n/locales/fi/messages.po index bf3cc7ba6..7a2f1fdb7 100644 --- a/fluxer_app/src/features/i18n/locales/fi/messages.po +++ b/fluxer_app/src/features/i18n/locales/fi/messages.po @@ -5414,8 +5414,10 @@ msgstr "Automaattinen täydennysehdotus: {label}, {selectedOptionPosition}/{resu #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. +#. SMTP encryption option that picks the mode from the port. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/RtcRegionSelect.tsx #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts @@ -14556,6 +14558,11 @@ msgstr "Ensisijainen enkooderi uusissa näytönjaoissa." msgid "Encoder, SVC, and bitrate presets" msgstr "Kooderi, SVC ja bittinopeusasetukset" +#. Label for the choice of how the SMTP connection is encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Encryption" +msgstr "Salaus" + #: src/features/input/utils/KeybindUtils.ts msgctxt "keyboard-key-name" msgid "End" @@ -18420,6 +18427,16 @@ msgstr "Kuvat" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Leikepöydältä liitetyt kuvat lähetetään liitteinä, eikä sinulla ole oikeutta liittää tiedostoja tälle kanavalle." +#. SMTP encryption option where the connection starts encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS" +msgstr "Implisiittinen TLS" + +#. Description of the automatic SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS on port 465, required STARTTLS on any other port." +msgstr "Implisiittinen TLS portissa 465, vaadittu STARTTLS muissa porteissa." + #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx msgid "Import" @@ -23948,8 +23965,10 @@ msgstr "Ei muunnosta" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. #. Library picker entry meaning no sound is selected for this scope. #. Member verification level option in the community moderation settings tab. Short standalone label for the lowest level (no verification). +#. SMTP encryption option that never uses TLS. #. Short label in the visual tab. Keep it concise. #. Summary row value on the confirm step when no items in the category were selected. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/channel_header_components/developer_tools/DeveloperToolsShared.ts #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx #: src/features/guild/utils/guild_tabs/audit_log/AuditLogSharedMessages.ts @@ -33153,6 +33172,16 @@ msgstr "Aloittanut {name}" msgid "Started displaying members with this role separately" msgstr "Tämän roolin jäsenet alettiin näyttää erikseen" +#. SMTP encryption option where a plain connection must upgrade with STARTTLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS" +msgstr "STARTTLS" + +#. SMTP encryption option where STARTTLS is used only if the server offers it. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS when offered" +msgstr "STARTTLS, jos tarjotaan" + #. 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 msgid "Startup" @@ -34625,6 +34654,26 @@ msgstr "Yhteisö, josta tämä on peräisin, on poistanut kloonauksen käytöst msgid "The community you're looking for may have been deleted or you may not have access to it." msgstr "Etsimääsi yhteisöä ei ehkä enää ole tai sinulla ei ole siihen pääsyä." +#. Description of the implicit TLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is encrypted from the start. Usually port 465." +msgstr "Yhteys on salattu alusta alkaen. Yleensä portti 465." + +#. Description of the SMTP encryption option that never uses TLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is never encrypted. Only for a mail server on a network you trust." +msgstr "Yhteys ei koskaan salata. Vain luottamassasi verkossa olevalle postipalvelimelle." + +#. Description of the required STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection must upgrade to TLS before signing in. Usually port 587." +msgstr "Yhteys on päivitettävä TLS-salausta käyttäväksi ennen sisäänkirjautumista. Yleensä portti 587." + +#. Description of the opportunistic STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection upgrades to TLS only if the server offers it." +msgstr "Yhteys päivitetään TLS-salausta käyttäväksi vain, jos palvelin tarjoaa sitä." + #. Modal body shown when a desktop update download fails. #: src/features/updater/commands/UpdaterModalCommands.tsx msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable." @@ -38364,11 +38413,6 @@ msgstr "Käytä tämän laitteen järjestelmän vähennetyn liikkeen asetusta" msgid "Use this device's system reduced motion preference, or customize it below." msgstr "Käytä tämän laitteen järjestelmän vähennetyn liikkeen asetusta tai mukauta sitä alla." -#. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx -msgid "Use TLS" -msgstr "Käytä TLS:ää" - #. Permission name: allows voice activation instead of requiring push-to-talk. #: src/features/permissions/utils/PermissionLabelDescriptors.ts msgid "Use voice activity" diff --git a/fluxer_app/src/features/i18n/locales/fr/messages.po b/fluxer_app/src/features/i18n/locales/fr/messages.po index 4c35c4447..fbb7d4972 100644 --- a/fluxer_app/src/features/i18n/locales/fr/messages.po +++ b/fluxer_app/src/features/i18n/locales/fr/messages.po @@ -5414,8 +5414,10 @@ msgstr "Suggestion de saisie semi-automatique : {label}, {selectedOptionPosition #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. +#. SMTP encryption option that picks the mode from the port. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/RtcRegionSelect.tsx #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts @@ -14556,6 +14558,11 @@ msgstr "Préférence d’encodeur pour les nouveaux partages d’écran." msgid "Encoder, SVC, and bitrate presets" msgstr "Encodeur, SVC et préréglages de débit" +#. Label for the choice of how the SMTP connection is encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Encryption" +msgstr "Chiffrement" + #: src/features/input/utils/KeybindUtils.ts msgctxt "keyboard-key-name" msgid "End" @@ -18420,6 +18427,16 @@ msgstr "Images" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Les images collées depuis votre presse-papiers sont envoyées en tant que pièces jointes, et vous n'avez pas l'autorisation de joindre des fichiers dans ce salon." +#. SMTP encryption option where the connection starts encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS" +msgstr "TLS implicite" + +#. Description of the automatic SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS on port 465, required STARTTLS on any other port." +msgstr "TLS implicite sur le port 465, STARTTLS requis sur tout autre port." + #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx msgid "Import" @@ -23948,8 +23965,10 @@ msgstr "Sans conversion" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. #. Library picker entry meaning no sound is selected for this scope. #. Member verification level option in the community moderation settings tab. Short standalone label for the lowest level (no verification). +#. SMTP encryption option that never uses TLS. #. Short label in the visual tab. Keep it concise. #. Summary row value on the confirm step when no items in the category were selected. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/channel_header_components/developer_tools/DeveloperToolsShared.ts #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx #: src/features/guild/utils/guild_tabs/audit_log/AuditLogSharedMessages.ts @@ -33153,6 +33172,16 @@ msgstr "Commencé par {name}" msgid "Started displaying members with this role separately" msgstr "A commencé à afficher séparément les membres ayant ce rôle" +#. SMTP encryption option where a plain connection must upgrade with STARTTLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS" +msgstr "STARTTLS" + +#. SMTP encryption option where STARTTLS is used only if the server offers it. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS when offered" +msgstr "STARTTLS si proposé" + #. 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 msgid "Startup" @@ -34625,6 +34654,26 @@ msgstr "La communauté d’origine a désactivé le clonage, il est donc impossi msgid "The community you're looking for may have been deleted or you may not have access to it." msgstr "La communauté que vous recherchez a peut-être été supprimée ou vous n'y avez peut-être pas accès." +#. Description of the implicit TLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is encrypted from the start. Usually port 465." +msgstr "La connexion est chiffrée dès le départ. Généralement le port 465." + +#. Description of the SMTP encryption option that never uses TLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is never encrypted. Only for a mail server on a network you trust." +msgstr "La connexion n'est jamais chiffrée. Uniquement pour un serveur de messagerie sur un réseau de confiance." + +#. Description of the required STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection must upgrade to TLS before signing in. Usually port 587." +msgstr "La connexion doit passer à TLS avant de vous connecter. Généralement le port 587." + +#. Description of the opportunistic STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection upgrades to TLS only if the server offers it." +msgstr "La connexion passe à TLS uniquement si le serveur le propose." + #. Modal body shown when a desktop update download fails. #: src/features/updater/commands/UpdaterModalCommands.tsx msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable." @@ -38364,11 +38413,6 @@ msgstr "Utiliser la préférence système de cet appareil pour la réduction des msgid "Use this device's system reduced motion preference, or customize it below." msgstr "Utilisez la préférence de réduction des animations du système de cet appareil ou personnalisez-la ci-dessous." -#. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx -msgid "Use TLS" -msgstr "Utiliser TLS" - #. Permission name: allows voice activation instead of requiring push-to-talk. #: src/features/permissions/utils/PermissionLabelDescriptors.ts msgid "Use voice activity" diff --git a/fluxer_app/src/features/i18n/locales/he/messages.po b/fluxer_app/src/features/i18n/locales/he/messages.po index c2d2ed52c..80ec58dfd 100644 --- a/fluxer_app/src/features/i18n/locales/he/messages.po +++ b/fluxer_app/src/features/i18n/locales/he/messages.po @@ -5414,8 +5414,10 @@ msgstr "הצעת השלמה אוטומטית: {label}, {selectedOptionPosition} #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. +#. SMTP encryption option that picks the mode from the port. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/RtcRegionSelect.tsx #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts @@ -14556,6 +14558,11 @@ msgstr "העדפת מקודד עבור שיתופי מסך חדשים." msgid "Encoder, SVC, and bitrate presets" msgstr "קידוד, SVC והגדרות קבועות מראש של קצב סיביות" +#. Label for the choice of how the SMTP connection is encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Encryption" +msgstr "הצפנה" + #: src/features/input/utils/KeybindUtils.ts msgctxt "keyboard-key-name" msgid "End" @@ -18420,6 +18427,16 @@ msgstr "תמונות" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "תמונות שהודבקו מהלוח נשלחות כקבצים מצורפים, ואין לך הרשאה לצרף קבצים בערוץ זה." +#. SMTP encryption option where the connection starts encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS" +msgstr "TLS מרומז" + +#. Description of the automatic SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS on port 465, required STARTTLS on any other port." +msgstr "TLS מרומז בפורט 465, STARTTLS נדרש בכל פורט אחר." + #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx msgid "Import" @@ -23948,8 +23965,10 @@ msgstr "ללא המרה" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. #. Library picker entry meaning no sound is selected for this scope. #. Member verification level option in the community moderation settings tab. Short standalone label for the lowest level (no verification). +#. SMTP encryption option that never uses TLS. #. Short label in the visual tab. Keep it concise. #. Summary row value on the confirm step when no items in the category were selected. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/channel_header_components/developer_tools/DeveloperToolsShared.ts #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx #: src/features/guild/utils/guild_tabs/audit_log/AuditLogSharedMessages.ts @@ -33153,6 +33172,16 @@ msgstr "התחל על ידי {name}" msgid "Started displaying members with this role separately" msgstr "תחילת הצגת חברים עם תפקיד זה בנפרד" +#. SMTP encryption option where a plain connection must upgrade with STARTTLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS" +msgstr "STARTTLS" + +#. SMTP encryption option where STARTTLS is used only if the server offers it. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS when offered" +msgstr "STARTTLS כשהוא מוצע" + #. 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 msgid "Startup" @@ -34625,6 +34654,26 @@ msgstr "הקהילה שממנה זה הגיע ביטלה את אפשרות הש msgid "The community you're looking for may have been deleted or you may not have access to it." msgstr "ייתכן שהקהילה שחיפשת נמחקה או שאין לך גישה אליה." +#. Description of the implicit TLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is encrypted from the start. Usually port 465." +msgstr "החיבור מוצפן מההתחלה. בדרך כלל פורט 465." + +#. Description of the SMTP encryption option that never uses TLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is never encrypted. Only for a mail server on a network you trust." +msgstr "החיבור לעולם אינו מוצפן. מיועד רק לשרת דואר ברשת שאתה סומך עליה." + +#. Description of the required STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection must upgrade to TLS before signing in. Usually port 587." +msgstr "החיבור חייב לשדרג ל-TLS לפני הכניסה. בדרך כלל פורט 587." + +#. Description of the opportunistic STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection upgrades to TLS only if the server offers it." +msgstr "החיבור משודרג ל-TLS רק אם השרת מציע זאת." + #. Modal body shown when a desktop update download fails. #: src/features/updater/commands/UpdaterModalCommands.tsx msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable." @@ -38364,11 +38413,6 @@ msgstr "השתמש בהעדפת התנועה המופחתת של המערכת ב msgid "Use this device's system reduced motion preference, or customize it below." msgstr "השתמש בהעדפת התנועה המופחתת של המערכת במכשיר זה, או התאם אותה אישית למטה." -#. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx -msgid "Use TLS" -msgstr "השתמש ב-TLS" - #. Permission name: allows voice activation instead of requiring push-to-talk. #: src/features/permissions/utils/PermissionLabelDescriptors.ts msgid "Use voice activity" diff --git a/fluxer_app/src/features/i18n/locales/hi/messages.po b/fluxer_app/src/features/i18n/locales/hi/messages.po index 744346b2a..823ee56f0 100644 --- a/fluxer_app/src/features/i18n/locales/hi/messages.po +++ b/fluxer_app/src/features/i18n/locales/hi/messages.po @@ -5414,8 +5414,10 @@ msgstr "ऑटो-कम्प्लीट सुझाव: {label}, {resultCoun #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. +#. SMTP encryption option that picks the mode from the port. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/RtcRegionSelect.tsx #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts @@ -14556,6 +14558,11 @@ msgstr "नए स्क्रीन शेयर के लिए एन्क msgid "Encoder, SVC, and bitrate presets" msgstr "एनकोडर, एसवीसी और बिटरेट प्रीसेट" +#. Label for the choice of how the SMTP connection is encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Encryption" +msgstr "एन्क्रिप्शन" + #: src/features/input/utils/KeybindUtils.ts msgctxt "keyboard-key-name" msgid "End" @@ -18420,6 +18427,16 @@ msgstr "इमेज" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "आपके क्लिपबोर्ड से पेस्ट की गई इमेज अटैचमेंट के तौर पर भेजी जाती हैं, और आपको इस चैनल में फ़ाइलें अटैच करने की अनुमति नहीं है।" +#. SMTP encryption option where the connection starts encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS" +msgstr "Implicit TLS" + +#. Description of the automatic SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS on port 465, required STARTTLS on any other port." +msgstr "पोर्ट 465 पर इम्प्लिसिट टीएलएस, किसी भी अन्य पोर्ट पर स्टार्टटीएलएस आवश्यक है।" + #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx msgid "Import" @@ -23948,8 +23965,10 @@ msgstr "रूपांतरण नहीं" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. #. Library picker entry meaning no sound is selected for this scope. #. Member verification level option in the community moderation settings tab. Short standalone label for the lowest level (no verification). +#. SMTP encryption option that never uses TLS. #. Short label in the visual tab. Keep it concise. #. Summary row value on the confirm step when no items in the category were selected. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/channel_header_components/developer_tools/DeveloperToolsShared.ts #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx #: src/features/guild/utils/guild_tabs/audit_log/AuditLogSharedMessages.ts @@ -33153,6 +33172,16 @@ msgstr "{name} ने शुरू किया" msgid "Started displaying members with this role separately" msgstr "इस रोल वाले सदस्यों को अलग से दिखाना शुरू किया गया" +#. SMTP encryption option where a plain connection must upgrade with STARTTLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS" +msgstr "STARTTLS" + +#. SMTP encryption option where STARTTLS is used only if the server offers it. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS when offered" +msgstr "STARTTLS जब उपलब्ध हो" + #. 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 msgid "Startup" @@ -34625,6 +34654,26 @@ msgstr "जिस कम्युनिटी से यह आया है, msgid "The community you're looking for may have been deleted or you may not have access to it." msgstr "आप जिस कम्युनिटी को ढूंढ रहे हैं, हो सकता है उसे डिलीट कर दिया गया हो या आपके पास उसका एक्सेस न हो।" +#. Description of the implicit TLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is encrypted from the start. Usually port 465." +msgstr "कनेक्शन शुरू से ही एन्क्रिप्टेड होता है। आमतौर पर पोर्ट 465।" + +#. Description of the SMTP encryption option that never uses TLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is never encrypted. Only for a mail server on a network you trust." +msgstr "कनेक्शन कभी भी एन्क्रिप्ट नहीं होता है। केवल उस मेल सर्वर के लिए जिस पर आप भरोसा करते हैं।" + +#. Description of the required STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection must upgrade to TLS before signing in. Usually port 587." +msgstr "कनेक्शन को साइन इन करने से पहले TLS में अपग्रेड करना होगा। आमतौर पर पोर्ट 587।" + +#. Description of the opportunistic STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection upgrades to TLS only if the server offers it." +msgstr "सर्वर द्वारा प्रदान किए जाने पर ही कनेक्शन TLS में अपग्रेड होता है।" + #. Modal body shown when a desktop update download fails. #: src/features/updater/commands/UpdaterModalCommands.tsx msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable." @@ -38364,11 +38413,6 @@ msgstr "इस डिवाइस की सिस्टम रिड्यू msgid "Use this device's system reduced motion preference, or customize it below." msgstr "इस डिवाइस की सिस्टम रिड्यूस्ड मोशन प्राथमिकता का उपयोग करें या इसे नीचे कस्टमाइज़ करें।" -#. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx -msgid "Use TLS" -msgstr "TLS का उपयोग करें" - #. Permission name: allows voice activation instead of requiring push-to-talk. #: src/features/permissions/utils/PermissionLabelDescriptors.ts msgid "Use voice activity" diff --git a/fluxer_app/src/features/i18n/locales/hr/messages.po b/fluxer_app/src/features/i18n/locales/hr/messages.po index 9babbc4c1..2c29f1bf6 100644 --- a/fluxer_app/src/features/i18n/locales/hr/messages.po +++ b/fluxer_app/src/features/i18n/locales/hr/messages.po @@ -5414,8 +5414,10 @@ msgstr "Prijedlog automatskog dovršavanja: {label}, {selectedOptionPosition} od #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. +#. SMTP encryption option that picks the mode from the port. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/RtcRegionSelect.tsx #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts @@ -14556,6 +14558,11 @@ msgstr "Željeni način kodiranja za nova dijeljenja zaslona." msgid "Encoder, SVC, and bitrate presets" msgstr "Kodeci, SVC i unaprijed postavljene vrijednosti protoka" +#. Label for the choice of how the SMTP connection is encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Encryption" +msgstr "Šifriranje" + #: src/features/input/utils/KeybindUtils.ts msgctxt "keyboard-key-name" msgid "End" @@ -18420,6 +18427,16 @@ msgstr "Slike" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Slike zalijepljene iz međuspremnika šalju se kao privici, a vi nemate dopuštenje za prilaganje datoteka u ovom kanalu." +#. SMTP encryption option where the connection starts encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS" +msgstr "Implicitni TLS" + +#. Description of the automatic SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS on port 465, required STARTTLS on any other port." +msgstr "Implicitni TLS na portu 465, obavezan STARTTLS na bilo kojem drugom portu." + #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx msgid "Import" @@ -23948,8 +23965,10 @@ msgstr "Bez pretvorbe" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. #. Library picker entry meaning no sound is selected for this scope. #. Member verification level option in the community moderation settings tab. Short standalone label for the lowest level (no verification). +#. SMTP encryption option that never uses TLS. #. Short label in the visual tab. Keep it concise. #. Summary row value on the confirm step when no items in the category were selected. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/channel_header_components/developer_tools/DeveloperToolsShared.ts #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx #: src/features/guild/utils/guild_tabs/audit_log/AuditLogSharedMessages.ts @@ -33153,6 +33172,16 @@ msgstr "Pokrenuo/la {name}" msgid "Started displaying members with this role separately" msgstr "Članovi s ovom ulogom počeli su se prikazivati odvojeno" +#. SMTP encryption option where a plain connection must upgrade with STARTTLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS" +msgstr "STARTTLS" + +#. SMTP encryption option where STARTTLS is used only if the server offers it. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS when offered" +msgstr "STARTTLS kada je ponuđeno" + #. 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 msgid "Startup" @@ -34625,6 +34654,26 @@ msgstr "Zajednica iz koje ovo potječe isključila je kloniranje, tako da se ne msgid "The community you're looking for may have been deleted or you may not have access to it." msgstr "Zajednica koju tražite možda je izbrisana ili joj možda nemate pristup." +#. Description of the implicit TLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is encrypted from the start. Usually port 465." +msgstr "Veza je šifrirana od početka. Obično luka 465." + +#. Description of the SMTP encryption option that never uses TLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is never encrypted. Only for a mail server on a network you trust." +msgstr "Veza se nikada ne šifrira. Samo za poslužitelj pošte u mreži kojoj vjerujete." + +#. Description of the required STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection must upgrade to TLS before signing in. Usually port 587." +msgstr "Veza se mora nadograditi na TLS prije prijave. Obično luka 587." + +#. Description of the opportunistic STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection upgrades to TLS only if the server offers it." +msgstr "Veza se nadograđuje na TLS samo ako je poslužitelj ponudi." + #. Modal body shown when a desktop update download fails. #: src/features/updater/commands/UpdaterModalCommands.tsx msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable." @@ -38364,11 +38413,6 @@ msgstr "Koristite postavku sustava ovog uređaja za smanjeno kretanje" msgid "Use this device's system reduced motion preference, or customize it below." msgstr "Koristite postavku sustava ovog uređaja za smanjeno kretanje ili je prilagodite u nastavku." -#. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx -msgid "Use TLS" -msgstr "Koristi TLS" - #. Permission name: allows voice activation instead of requiring push-to-talk. #: src/features/permissions/utils/PermissionLabelDescriptors.ts msgid "Use voice activity" diff --git a/fluxer_app/src/features/i18n/locales/hu/messages.po b/fluxer_app/src/features/i18n/locales/hu/messages.po index 9b3f804da..e63c1728a 100644 --- a/fluxer_app/src/features/i18n/locales/hu/messages.po +++ b/fluxer_app/src/features/i18n/locales/hu/messages.po @@ -5414,8 +5414,10 @@ msgstr "Automatikus kiegészítési javaslat: {label}, {selectedOptionPosition}/ #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. +#. SMTP encryption option that picks the mode from the port. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/RtcRegionSelect.tsx #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts @@ -14556,6 +14558,11 @@ msgstr "Az új képernyőmegosztásokhoz használt kódoló beállításai." msgid "Encoder, SVC, and bitrate presets" msgstr "Kódoló, SVC és bitráta előbeállítások" +#. Label for the choice of how the SMTP connection is encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Encryption" +msgstr "Titkosítás" + #: src/features/input/utils/KeybindUtils.ts msgctxt "keyboard-key-name" msgid "End" @@ -18420,6 +18427,16 @@ msgstr "Képek" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "A vágólapról beillesztett képek mellékletként kerülnek elküldésre, de nincs jogosultságod fájlok csatolására ezen a csatornán." +#. SMTP encryption option where the connection starts encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS" +msgstr "Implicit TLS" + +#. Description of the automatic SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS on port 465, required STARTTLS on any other port." +msgstr "Implicit TLS 465-ös porton, STARTTLS szükséges minden más porton." + #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx msgid "Import" @@ -23948,8 +23965,10 @@ msgstr "Nincs átalakítás" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. #. Library picker entry meaning no sound is selected for this scope. #. Member verification level option in the community moderation settings tab. Short standalone label for the lowest level (no verification). +#. SMTP encryption option that never uses TLS. #. Short label in the visual tab. Keep it concise. #. Summary row value on the confirm step when no items in the category were selected. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/channel_header_components/developer_tools/DeveloperToolsShared.ts #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx #: src/features/guild/utils/guild_tabs/audit_log/AuditLogSharedMessages.ts @@ -33153,6 +33172,16 @@ msgstr "Indította: {name}" msgid "Started displaying members with this role separately" msgstr "A szerepkörrel rendelkező tagok külön megjelenítése elindult" +#. SMTP encryption option where a plain connection must upgrade with STARTTLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS" +msgstr "STARTTLS" + +#. SMTP encryption option where STARTTLS is used only if the server offers it. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS when offered" +msgstr "STARTTLS, ha felajánlja" + #. 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 msgid "Startup" @@ -34625,6 +34654,26 @@ msgstr "A forrásközösség letiltotta a másolást, ezért ez nem másolható. msgid "The community you're looking for may have been deleted or you may not have access to it." msgstr "Lehet, hogy a keresett közösséget törölték, vagy nincs hozzáférésed." +#. Description of the implicit TLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is encrypted from the start. Usually port 465." +msgstr "A kapcsolat a kezdetektől titkosított. Általában a 465-ös porton." + +#. Description of the SMTP encryption option that never uses TLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is never encrypted. Only for a mail server on a network you trust." +msgstr "A kapcsolat soha nem titkosított. Csak megbízható hálózaton lévő levelezőszerver esetén." + +#. Description of the required STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection must upgrade to TLS before signing in. Usually port 587." +msgstr "A kapcsolódásnak TLS-re kell frissülnie a bejelentkezés előtt. Általában 587-es porton." + +#. Description of the opportunistic STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection upgrades to TLS only if the server offers it." +msgstr "A kapcsolat csak akkor frissül TLS-re, ha a szerver felajánlja azt." + #. Modal body shown when a desktop update download fails. #: src/features/updater/commands/UpdaterModalCommands.tsx msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable." @@ -38364,11 +38413,6 @@ msgstr "A készülék rendszerbeállításaiban megadott mozgáscsökkentési be msgid "Use this device's system reduced motion preference, or customize it below." msgstr "Használd az eszközöd rendszerének mozgáscsökkentési beállítását, vagy szabd testre alább." -#. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx -msgid "Use TLS" -msgstr "TLS használata" - #. Permission name: allows voice activation instead of requiring push-to-talk. #: src/features/permissions/utils/PermissionLabelDescriptors.ts msgid "Use voice activity" diff --git a/fluxer_app/src/features/i18n/locales/id/messages.po b/fluxer_app/src/features/i18n/locales/id/messages.po index dd167c60c..7b42bc5e9 100644 --- a/fluxer_app/src/features/i18n/locales/id/messages.po +++ b/fluxer_app/src/features/i18n/locales/id/messages.po @@ -5414,8 +5414,10 @@ msgstr "Saran pelengkapan otomatis: {label}, {selectedOptionPosition} dari {resu #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. +#. SMTP encryption option that picks the mode from the port. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/RtcRegionSelect.tsx #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts @@ -14556,6 +14558,11 @@ msgstr "Preferensi encoder untuk berbagi layar baru." msgid "Encoder, SVC, and bitrate presets" msgstr "Encoder, preset SVC, dan bitrate" +#. Label for the choice of how the SMTP connection is encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Encryption" +msgstr "Enkripsi" + #: src/features/input/utils/KeybindUtils.ts msgctxt "keyboard-key-name" msgid "End" @@ -18420,6 +18427,16 @@ msgstr "Gambar" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Gambar yang ditempel dari papan klipmu akan dikirim sebagai lampiran, dan kamu tidak memiliki izin untuk melampirkan file di saluran ini." +#. SMTP encryption option where the connection starts encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS" +msgstr "TLS Implisit" + +#. Description of the automatic SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS on port 465, required STARTTLS on any other port." +msgstr "TLS implisit di port 465, STARTTLS wajib di port lain." + #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx msgid "Import" @@ -23948,8 +23965,10 @@ msgstr "Tanpa konversi" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. #. Library picker entry meaning no sound is selected for this scope. #. Member verification level option in the community moderation settings tab. Short standalone label for the lowest level (no verification). +#. SMTP encryption option that never uses TLS. #. Short label in the visual tab. Keep it concise. #. Summary row value on the confirm step when no items in the category were selected. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/channel_header_components/developer_tools/DeveloperToolsShared.ts #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx #: src/features/guild/utils/guild_tabs/audit_log/AuditLogSharedMessages.ts @@ -33153,6 +33172,16 @@ msgstr "Dimulai oleh {name}" msgid "Started displaying members with this role separately" msgstr "Mulai menampilkan anggota dengan peran ini secara terpisah" +#. SMTP encryption option where a plain connection must upgrade with STARTTLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS" +msgstr "STARTTLS" + +#. SMTP encryption option where STARTTLS is used only if the server offers it. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS when offered" +msgstr "STARTTLS jika ditawarkan" + #. 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 msgid "Startup" @@ -34625,6 +34654,26 @@ msgstr "Komunitas asal telah menonaktifkan kloning, jadi tidak dapat disalin." msgid "The community you're looking for may have been deleted or you may not have access to it." msgstr "Komunitas yang kamu cari mungkin sudah dihapus atau kamu tidak punya akses ke sana." +#. Description of the implicit TLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is encrypted from the start. Usually port 465." +msgstr "Koneksi terenkripsi sejak awal. Biasanya port 465." + +#. Description of the SMTP encryption option that never uses TLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is never encrypted. Only for a mail server on a network you trust." +msgstr "Koneksi tidak pernah dienkripsi. Hanya untuk server email di jaringan yang Anda percayai." + +#. Description of the required STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection must upgrade to TLS before signing in. Usually port 587." +msgstr "Koneksi harus ditingkatkan ke TLS sebelum masuk. Biasanya port 587." + +#. Description of the opportunistic STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection upgrades to TLS only if the server offers it." +msgstr "Koneksi ditingkatkan ke TLS hanya jika server menawarkannya." + #. Modal body shown when a desktop update download fails. #: src/features/updater/commands/UpdaterModalCommands.tsx msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable." @@ -38364,11 +38413,6 @@ msgstr "Gunakan preferensi gerakan yang dikurangi dari sistem perangkat ini" msgid "Use this device's system reduced motion preference, or customize it below." msgstr "Gunakan preferensi gerakan yang dikurangi dari sistem perangkat ini, atau sesuaikan di bawah." -#. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx -msgid "Use TLS" -msgstr "Gunakan TLS" - #. Permission name: allows voice activation instead of requiring push-to-talk. #: src/features/permissions/utils/PermissionLabelDescriptors.ts msgid "Use voice activity" diff --git a/fluxer_app/src/features/i18n/locales/it/messages.po b/fluxer_app/src/features/i18n/locales/it/messages.po index 341d9bf19..a7ef27fe4 100644 --- a/fluxer_app/src/features/i18n/locales/it/messages.po +++ b/fluxer_app/src/features/i18n/locales/it/messages.po @@ -5414,8 +5414,10 @@ msgstr "Suggerimento di completamento automatico: {label}, {selectedOptionPositi #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. +#. SMTP encryption option that picks the mode from the port. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/RtcRegionSelect.tsx #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts @@ -14556,6 +14558,11 @@ msgstr "Preferenza dell'encoder per le nuove condivisioni schermo." msgid "Encoder, SVC, and bitrate presets" msgstr "Codifica, SVC e preimpostazioni bitrate" +#. Label for the choice of how the SMTP connection is encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Encryption" +msgstr "Crittografia" + #: src/features/input/utils/KeybindUtils.ts msgctxt "keyboard-key-name" msgid "End" @@ -18420,6 +18427,16 @@ msgstr "Immagini" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Le immagini incollate dagli appunti vengono inviate come allegati e non hai il permesso di allegare file in questo canale." +#. SMTP encryption option where the connection starts encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS" +msgstr "TLS implicito" + +#. Description of the automatic SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS on port 465, required STARTTLS on any other port." +msgstr "TLS implicito sulla porta 465, STARTTLS obbligatorio su qualsiasi altra porta." + #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx msgid "Import" @@ -23948,8 +23965,10 @@ msgstr "Nessuna conversione" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. #. Library picker entry meaning no sound is selected for this scope. #. Member verification level option in the community moderation settings tab. Short standalone label for the lowest level (no verification). +#. SMTP encryption option that never uses TLS. #. Short label in the visual tab. Keep it concise. #. Summary row value on the confirm step when no items in the category were selected. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/channel_header_components/developer_tools/DeveloperToolsShared.ts #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx #: src/features/guild/utils/guild_tabs/audit_log/AuditLogSharedMessages.ts @@ -33153,6 +33172,16 @@ msgstr "Iniziato da {name}" msgid "Started displaying members with this role separately" msgstr "I membri con questo ruolo vengono ora mostrati separatamente" +#. SMTP encryption option where a plain connection must upgrade with STARTTLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS" +msgstr "STARTTLS" + +#. SMTP encryption option where STARTTLS is used only if the server offers it. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS when offered" +msgstr "STARTTLS quando offerto" + #. 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 msgid "Startup" @@ -34625,6 +34654,26 @@ msgstr "La community da cui proviene ha disabilitato la clonazione, quindi non p msgid "The community you're looking for may have been deleted or you may not have access to it." msgstr "La community che cerchi potrebbe essere stata eliminata o potresti non avere accesso." +#. Description of the implicit TLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is encrypted from the start. Usually port 465." +msgstr "La connessione è crittografata fin dall'inizio. Solitamente porta 465." + +#. Description of the SMTP encryption option that never uses TLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is never encrypted. Only for a mail server on a network you trust." +msgstr "La connessione non viene mai crittografata. Solo per un server di posta su una rete di cui ti fidi." + +#. Description of the required STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection must upgrade to TLS before signing in. Usually port 587." +msgstr "La connessione deve passare a TLS prima di accedere. Solitamente porta 587." + +#. Description of the opportunistic STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection upgrades to TLS only if the server offers it." +msgstr "La connessione viene aggiornata a TLS solo se il server lo offre." + #. Modal body shown when a desktop update download fails. #: src/features/updater/commands/UpdaterModalCommands.tsx msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable." @@ -38364,11 +38413,6 @@ msgstr "Usa la preferenza di sistema del dispositivo per la riduzione del movime msgid "Use this device's system reduced motion preference, or customize it below." msgstr "Usa la preferenza di movimento ridotto del sistema di questo dispositivo, oppure personalizzala qui sotto." -#. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx -msgid "Use TLS" -msgstr "Usa TLS" - #. Permission name: allows voice activation instead of requiring push-to-talk. #: src/features/permissions/utils/PermissionLabelDescriptors.ts msgid "Use voice activity" diff --git a/fluxer_app/src/features/i18n/locales/ja/messages.po b/fluxer_app/src/features/i18n/locales/ja/messages.po index a9d7e4cd1..4b43c0ead 100644 --- a/fluxer_app/src/features/i18n/locales/ja/messages.po +++ b/fluxer_app/src/features/i18n/locales/ja/messages.po @@ -5414,8 +5414,10 @@ msgstr "入力候補: {label}、{resultCount}件中{selectedOptionPosition}番 #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. +#. SMTP encryption option that picks the mode from the port. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/RtcRegionSelect.tsx #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts @@ -14556,6 +14558,11 @@ msgstr "新しい画面共有のエンコーダー設定" msgid "Encoder, SVC, and bitrate presets" msgstr "エンコーダー、SVC、ビットレートプリセット" +#. Label for the choice of how the SMTP connection is encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Encryption" +msgstr "暗号化" + #: src/features/input/utils/KeybindUtils.ts msgctxt "keyboard-key-name" msgid "End" @@ -18420,6 +18427,16 @@ msgstr "画像" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "クリップボードから貼り付けた画像は添付ファイルとして送信されますが、このチャンネルではファイルを添付する権限がありません。" +#. SMTP encryption option where the connection starts encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS" +msgstr "暗黙的TLS" + +#. Description of the automatic SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS on port 465, required STARTTLS on any other port." +msgstr "ポート465では暗黙的なTLS、それ以外のポートではSTARTTLSが必須です。" + #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx msgid "Import" @@ -23948,8 +23965,10 @@ msgstr "無変換" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. #. Library picker entry meaning no sound is selected for this scope. #. Member verification level option in the community moderation settings tab. Short standalone label for the lowest level (no verification). +#. SMTP encryption option that never uses TLS. #. Short label in the visual tab. Keep it concise. #. Summary row value on the confirm step when no items in the category were selected. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/channel_header_components/developer_tools/DeveloperToolsShared.ts #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx #: src/features/guild/utils/guild_tabs/audit_log/AuditLogSharedMessages.ts @@ -33153,6 +33172,16 @@ msgstr "{name}さんが開始しました" msgid "Started displaying members with this role separately" msgstr "このロールを持つメンバーを個別に表示するようにしました" +#. SMTP encryption option where a plain connection must upgrade with STARTTLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS" +msgstr "STARTTLS" + +#. SMTP encryption option where STARTTLS is used only if the server offers it. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS when offered" +msgstr "提供されている場合にSTARTTLS" + #. 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 msgid "Startup" @@ -34625,6 +34654,26 @@ msgstr "このコミュニティではクローン作成が無効になってい msgid "The community you're looking for may have been deleted or you may not have access to it." msgstr "お探しのコミュニティは削除されたか、アクセス権がない可能性があります。" +#. Description of the implicit TLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is encrypted from the start. Usually port 465." +msgstr "接続は最初から暗号化されます。通常はポート465です。" + +#. Description of the SMTP encryption option that never uses TLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is never encrypted. Only for a mail server on a network you trust." +msgstr "接続は暗号化されません。信頼できるネットワーク上のメールサーバーでのみ使用してください。" + +#. Description of the required STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection must upgrade to TLS before signing in. Usually port 587." +msgstr "接続はサインイン前にTLSにアップグレードする必要があります。通常はポート587です。" + +#. Description of the opportunistic STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection upgrades to TLS only if the server offers it." +msgstr "サーバーが提供する場合にのみ、接続はTLSにアップグレードされます。" + #. Modal body shown when a desktop update download fails. #: src/features/updater/commands/UpdaterModalCommands.tsx msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable." @@ -38364,11 +38413,6 @@ msgstr "このデバイスのシステムの視差効果設定を使用する" msgid "Use this device's system reduced motion preference, or customize it below." msgstr "このデバイスのシステムの視差効果設定に従うか、以下でカスタマイズしてください。" -#. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx -msgid "Use TLS" -msgstr "TLSを使用" - #. Permission name: allows voice activation instead of requiring push-to-talk. #: src/features/permissions/utils/PermissionLabelDescriptors.ts msgid "Use voice activity" diff --git a/fluxer_app/src/features/i18n/locales/ko/messages.po b/fluxer_app/src/features/i18n/locales/ko/messages.po index 998ad381e..40f5f5f89 100644 --- a/fluxer_app/src/features/i18n/locales/ko/messages.po +++ b/fluxer_app/src/features/i18n/locales/ko/messages.po @@ -5414,8 +5414,10 @@ msgstr "자동 완성 제안: {label}, {resultCount}개 중 {selectedOptionPosit #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. +#. SMTP encryption option that picks the mode from the port. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/RtcRegionSelect.tsx #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts @@ -14556,6 +14558,11 @@ msgstr "새 화면 공유에 사용할 인코더 설정입니다." msgid "Encoder, SVC, and bitrate presets" msgstr "인코더, SVC 및 비트 전송률 사전 설정" +#. Label for the choice of how the SMTP connection is encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Encryption" +msgstr "암호화" + #: src/features/input/utils/KeybindUtils.ts msgctxt "keyboard-key-name" msgid "End" @@ -18420,6 +18427,16 @@ msgstr "이미지" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "클립보드에서 붙여넣은 이미지는 첨부파일로 전송됩니다. 이 채널에서는 파일을 첨부할 권한이 없습니다." +#. SMTP encryption option where the connection starts encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS" +msgstr "암시적 TLS" + +#. Description of the automatic SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS on port 465, required STARTTLS on any other port." +msgstr "465번 포트에서는 암시적 TLS를 사용하고, 다른 포트에서는 STARTTLS를 사용합니다." + #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx msgid "Import" @@ -23948,8 +23965,10 @@ msgstr "무변환" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. #. Library picker entry meaning no sound is selected for this scope. #. Member verification level option in the community moderation settings tab. Short standalone label for the lowest level (no verification). +#. SMTP encryption option that never uses TLS. #. Short label in the visual tab. Keep it concise. #. Summary row value on the confirm step when no items in the category were selected. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/channel_header_components/developer_tools/DeveloperToolsShared.ts #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx #: src/features/guild/utils/guild_tabs/audit_log/AuditLogSharedMessages.ts @@ -33153,6 +33172,16 @@ msgstr "{name}님이 시작했습니다." msgid "Started displaying members with this role separately" msgstr "이 역할이 있는 멤버를 별도로 표시하기 시작했습니다" +#. SMTP encryption option where a plain connection must upgrade with STARTTLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS" +msgstr "STARTTLS" + +#. SMTP encryption option where STARTTLS is used only if the server offers it. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS when offered" +msgstr "STARTTLS (제공 시)" + #. 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 msgid "Startup" @@ -34625,6 +34654,26 @@ msgstr "이 표현을 가져온 커뮤니티에서 복제를 꺼 두어 복사 msgid "The community you're looking for may have been deleted or you may not have access to it." msgstr "찾으시는 커뮤니티가 삭제되었거나 접근 권한이 없을 수 있습니다." +#. Description of the implicit TLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is encrypted from the start. Usually port 465." +msgstr "연결은 처음부터 암호화됩니다. 보통 포트 465입니다." + +#. Description of the SMTP encryption option that never uses TLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is never encrypted. Only for a mail server on a network you trust." +msgstr "연결이 암호화되지 않습니다. 신뢰할 수 있는 네트워크의 메일 서버에만 사용하세요." + +#. Description of the required STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection must upgrade to TLS before signing in. Usually port 587." +msgstr "로그인 전에 연결이 TLS로 업그레이드되어야 합니다. 보통 포트 587입니다." + +#. Description of the opportunistic STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection upgrades to TLS only if the server offers it." +msgstr "서버에서 제공하는 경우에만 연결이 TLS로 업그레이드됩니다." + #. Modal body shown when a desktop update download fails. #: src/features/updater/commands/UpdaterModalCommands.tsx msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable." @@ -38364,11 +38413,6 @@ msgstr "이 기기의 시스템 동작 줄이기 설정 사용" msgid "Use this device's system reduced motion preference, or customize it below." msgstr "이 기기의 시스템 동작 줄이기 설정을 사용하거나 아래에서 직접 조정하세요." -#. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx -msgid "Use TLS" -msgstr "TLS 사용" - #. Permission name: allows voice activation instead of requiring push-to-talk. #: src/features/permissions/utils/PermissionLabelDescriptors.ts msgid "Use voice activity" diff --git a/fluxer_app/src/features/i18n/locales/lt/messages.po b/fluxer_app/src/features/i18n/locales/lt/messages.po index 45c45e816..91236871b 100644 --- a/fluxer_app/src/features/i18n/locales/lt/messages.po +++ b/fluxer_app/src/features/i18n/locales/lt/messages.po @@ -5414,8 +5414,10 @@ msgstr "Automatinio užbaigimo pasiūlymas: {label}, {selectedOptionPosition} i #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. +#. SMTP encryption option that picks the mode from the port. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/RtcRegionSelect.tsx #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts @@ -14556,6 +14558,11 @@ msgstr "Pageidaujamas naujų ekrano bendrinimų kodavimo būdas." msgid "Encoder, SVC, and bitrate presets" msgstr "Encoderio, SVC ir bitų perdavimo spartos išankstiniai nustatymai" +#. Label for the choice of how the SMTP connection is encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Encryption" +msgstr "Šifravimas" + #: src/features/input/utils/KeybindUtils.ts msgctxt "keyboard-key-name" msgid "End" @@ -18421,6 +18428,16 @@ msgstr "Vaizdai" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Iš iškarpinės įklijuoti vaizdai siunčiami kaip priedai, o jūs neturite leidimo pridėti failų šiame kanale." +#. SMTP encryption option where the connection starts encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS" +msgstr "Implicitinis TLS" + +#. Description of the automatic SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS on port 465, required STARTTLS on any other port." +msgstr "Numatytasis TLS 465 prievade, privalomas STARTTLS bet kuriame kitame prievade." + #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx msgid "Import" @@ -23949,8 +23966,10 @@ msgstr "Non-convert" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. #. Library picker entry meaning no sound is selected for this scope. #. Member verification level option in the community moderation settings tab. Short standalone label for the lowest level (no verification). +#. SMTP encryption option that never uses TLS. #. Short label in the visual tab. Keep it concise. #. Summary row value on the confirm step when no items in the category were selected. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/channel_header_components/developer_tools/DeveloperToolsShared.ts #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx #: src/features/guild/utils/guild_tabs/audit_log/AuditLogSharedMessages.ts @@ -33154,6 +33173,16 @@ msgstr "Pradėjo {name}" msgid "Started displaying members with this role separately" msgstr "Nuo šiol nariai, turintys šį vaidmenį, bus rodomi atskirai" +#. SMTP encryption option where a plain connection must upgrade with STARTTLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS" +msgstr "STARTTLS" + +#. SMTP encryption option where STARTTLS is used only if the server offers it. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS when offered" +msgstr "STARTTLS, jei siūloma" + #. 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 msgid "Startup" @@ -34626,6 +34655,26 @@ msgstr "Bendruomenė, iš kurios tai gauta, išjungė klonavimą, todėl to nuko msgid "The community you're looking for may have been deleted or you may not have access to it." msgstr "Bendruomenė, kurios ieškote, galėjo būti ištrinta arba neturite prieigos prie jos." +#. Description of the implicit TLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is encrypted from the start. Usually port 465." +msgstr "Ryšys užšifruojamas nuo pat pradžių. Paprastai 465 prievadas." + +#. Description of the SMTP encryption option that never uses TLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is never encrypted. Only for a mail server on a network you trust." +msgstr "Ryšys niekada nebūna užšifruotas. Tik pašto serveriui jūsų patikimame tinkle." + +#. Description of the required STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection must upgrade to TLS before signing in. Usually port 587." +msgstr "Ryšys turi būti atnaujintas į TLS prieš prisijungiant. Paprastai 587 prievadas." + +#. Description of the opportunistic STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection upgrades to TLS only if the server offers it." +msgstr "Ryšys atnaujinamas į TLS tik tuo atveju, jei jį siūlo serveris." + #. Modal body shown when a desktop update download fails. #: src/features/updater/commands/UpdaterModalCommands.tsx msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable." @@ -38365,11 +38414,6 @@ msgstr "Naudoti šio įrenginio sistemos sumažinto judesio nuostatą" msgid "Use this device's system reduced motion preference, or customize it below." msgstr "Naudoti šio įrenginio sistemos sumažinto judesio nuostatą arba tinkinti ją toliau." -#. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx -msgid "Use TLS" -msgstr "Naudoti TLS" - #. Permission name: allows voice activation instead of requiring push-to-talk. #: src/features/permissions/utils/PermissionLabelDescriptors.ts msgid "Use voice activity" diff --git a/fluxer_app/src/features/i18n/locales/nl/messages.po b/fluxer_app/src/features/i18n/locales/nl/messages.po index 2a513c8f9..422d7f9aa 100644 --- a/fluxer_app/src/features/i18n/locales/nl/messages.po +++ b/fluxer_app/src/features/i18n/locales/nl/messages.po @@ -5414,8 +5414,10 @@ msgstr "Automatische aanvulling: {label}, {selectedOptionPosition} van {resultCo #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. +#. SMTP encryption option that picks the mode from the port. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/RtcRegionSelect.tsx #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts @@ -14556,6 +14558,11 @@ msgstr "Encodervoorkeur voor nieuwe schermdeelsessies." msgid "Encoder, SVC, and bitrate presets" msgstr "Encoder-, SVC- en bitrate-presets" +#. Label for the choice of how the SMTP connection is encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Encryption" +msgstr "Encryptie" + #: src/features/input/utils/KeybindUtils.ts msgctxt "keyboard-key-name" msgid "End" @@ -18420,6 +18427,16 @@ msgstr "Afbeeldingen" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Afbeeldingen die je vanuit je klembord plakt, worden als bijlagen verzonden. Je hebt geen toestemming om bestanden bij te voegen in dit kanaal." +#. SMTP encryption option where the connection starts encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS" +msgstr "Standaard TLS" + +#. Description of the automatic SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS on port 465, required STARTTLS on any other port." +msgstr "Standaard TLS op poort 465, vereist STARTTLS op elke andere poort." + #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx msgid "Import" @@ -23948,8 +23965,10 @@ msgstr "Niet converteren" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. #. Library picker entry meaning no sound is selected for this scope. #. Member verification level option in the community moderation settings tab. Short standalone label for the lowest level (no verification). +#. SMTP encryption option that never uses TLS. #. Short label in the visual tab. Keep it concise. #. Summary row value on the confirm step when no items in the category were selected. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/channel_header_components/developer_tools/DeveloperToolsShared.ts #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx #: src/features/guild/utils/guild_tabs/audit_log/AuditLogSharedMessages.ts @@ -33153,6 +33172,16 @@ msgstr "Gestart door {name}" msgid "Started displaying members with this role separately" msgstr "Leden met deze rol worden nu apart weergegeven" +#. SMTP encryption option where a plain connection must upgrade with STARTTLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS" +msgstr "STARTTLS" + +#. SMTP encryption option where STARTTLS is used only if the server offers it. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS when offered" +msgstr "STARTTLS indien aangeboden" + #. 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 msgid "Startup" @@ -34625,6 +34654,26 @@ msgstr "De community waar dit vandaan komt, heeft klonen uitgeschakeld, dus het msgid "The community you're looking for may have been deleted or you may not have access to it." msgstr "De community die je zoekt is mogelijk verwijderd of je hebt er geen toegang toe." +#. Description of the implicit TLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is encrypted from the start. Usually port 465." +msgstr "De verbinding is vanaf het begin versleuteld. Meestal poort 465." + +#. Description of the SMTP encryption option that never uses TLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is never encrypted. Only for a mail server on a network you trust." +msgstr "De verbinding wordt nooit versleuteld. Alleen voor een mailserver op een netwerk dat je vertrouwt." + +#. Description of the required STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection must upgrade to TLS before signing in. Usually port 587." +msgstr "De verbinding moet worden geüpgraded naar TLS voordat u zich aanmeldt. Meestal poort 587." + +#. Description of the opportunistic STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection upgrades to TLS only if the server offers it." +msgstr "De verbinding wordt alleen opgewaardeerd naar TLS als de server dit aanbiedt." + #. Modal body shown when a desktop update download fails. #: src/features/updater/commands/UpdaterModalCommands.tsx msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable." @@ -38364,11 +38413,6 @@ msgstr "Gebruik de systeemvoorkeur voor verminderde beweging van dit apparaat" msgid "Use this device's system reduced motion preference, or customize it below." msgstr "Gebruik de voorkeur voor verminderde beweging van dit apparaat, of pas deze hieronder aan." -#. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx -msgid "Use TLS" -msgstr "Gebruik TLS" - #. Permission name: allows voice activation instead of requiring push-to-talk. #: src/features/permissions/utils/PermissionLabelDescriptors.ts msgid "Use voice activity" diff --git a/fluxer_app/src/features/i18n/locales/no/messages.po b/fluxer_app/src/features/i18n/locales/no/messages.po index f7c18b7fb..1da70d454 100644 --- a/fluxer_app/src/features/i18n/locales/no/messages.po +++ b/fluxer_app/src/features/i18n/locales/no/messages.po @@ -5414,8 +5414,10 @@ msgstr "Autofullføringsforslag: {label}, {selectedOptionPosition} av {resultCou #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. +#. SMTP encryption option that picks the mode from the port. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/RtcRegionSelect.tsx #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts @@ -14556,6 +14558,11 @@ msgstr "Foretrukket kodingsmetode for nye skjermdelinger." msgid "Encoder, SVC, and bitrate presets" msgstr "Koder, SVC og bitratemaler" +#. Label for the choice of how the SMTP connection is encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Encryption" +msgstr "Kryptering" + #: src/features/input/utils/KeybindUtils.ts msgctxt "keyboard-key-name" msgid "End" @@ -18420,6 +18427,16 @@ msgstr "Bilder" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Bilder limt inn fra utklippstavlen sendes som vedlegg, og du har ikke tillatelse til å legge ved filer i denne kanalen." +#. SMTP encryption option where the connection starts encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS" +msgstr "Implisitt TLS" + +#. Description of the automatic SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS on port 465, required STARTTLS on any other port." +msgstr "Implisitt TLS på port 465, krever STARTTLS på andre porter." + #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx msgid "Import" @@ -23948,8 +23965,10 @@ msgstr "Ingen konvertering" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. #. Library picker entry meaning no sound is selected for this scope. #. Member verification level option in the community moderation settings tab. Short standalone label for the lowest level (no verification). +#. SMTP encryption option that never uses TLS. #. Short label in the visual tab. Keep it concise. #. Summary row value on the confirm step when no items in the category were selected. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/channel_header_components/developer_tools/DeveloperToolsShared.ts #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx #: src/features/guild/utils/guild_tabs/audit_log/AuditLogSharedMessages.ts @@ -33153,6 +33172,16 @@ msgstr "Startet av {name}" msgid "Started displaying members with this role separately" msgstr "Begynte å vise medlemmer med denne rollen separat" +#. SMTP encryption option where a plain connection must upgrade with STARTTLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS" +msgstr "STARTTLS" + +#. SMTP encryption option where STARTTLS is used only if the server offers it. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS when offered" +msgstr "STARTTLS når det tilbys" + #. 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 msgid "Startup" @@ -34625,6 +34654,26 @@ msgstr "Fellesskapet denne kom fra, har slått av kloning, så den kan ikke kopi msgid "The community you're looking for may have been deleted or you may not have access to it." msgstr "Fellesskapet du leter etter kan ha blitt slettet, eller du har kanskje ikke tilgang til det." +#. Description of the implicit TLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is encrypted from the start. Usually port 465." +msgstr "Forbindelsen krypteres fra starten. Vanligvis port 465." + +#. Description of the SMTP encryption option that never uses TLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is never encrypted. Only for a mail server on a network you trust." +msgstr "Tilkoblingen krypteres aldri. Kun for en e-postserver på et nettverk du stoler på." + +#. Description of the required STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection must upgrade to TLS before signing in. Usually port 587." +msgstr "Tilkoblingen må oppgraderes til TLS før innlogging. Vanligvis port 587." + +#. Description of the opportunistic STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection upgrades to TLS only if the server offers it." +msgstr "Tilkoblingen oppgraderes til TLS kun hvis serveren tilbyr det." + #. Modal body shown when a desktop update download fails. #: src/features/updater/commands/UpdaterModalCommands.tsx msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable." @@ -38364,11 +38413,6 @@ msgstr "Bruk enhetens systeminnstilling for redusert bevegelse" msgid "Use this device's system reduced motion preference, or customize it below." msgstr "Bruk enhetens systeminnstilling for redusert bevegelse, eller tilpass den nedenfor." -#. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx -msgid "Use TLS" -msgstr "Bruk TLS" - #. Permission name: allows voice activation instead of requiring push-to-talk. #: src/features/permissions/utils/PermissionLabelDescriptors.ts msgid "Use voice activity" diff --git a/fluxer_app/src/features/i18n/locales/pl/messages.po b/fluxer_app/src/features/i18n/locales/pl/messages.po index a4fc5d885..df7b88d1c 100644 --- a/fluxer_app/src/features/i18n/locales/pl/messages.po +++ b/fluxer_app/src/features/i18n/locales/pl/messages.po @@ -5414,8 +5414,10 @@ msgstr "Sugestia autouzupełniania: {label}, {selectedOptionPosition} z {resultC #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. +#. SMTP encryption option that picks the mode from the port. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/RtcRegionSelect.tsx #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts @@ -14556,6 +14558,11 @@ msgstr "Preferowana metoda kodowania dla nowych udostępnień ekranu." msgid "Encoder, SVC, and bitrate presets" msgstr "Koder, SVC i presety przepustowości" +#. Label for the choice of how the SMTP connection is encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Encryption" +msgstr "Szyfrowanie" + #: src/features/input/utils/KeybindUtils.ts msgctxt "keyboard-key-name" msgid "End" @@ -18420,6 +18427,16 @@ msgstr "Obrazy" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Obrazy wklejone ze schowka są wysyłane jako załączniki, a Ty nie masz uprawnień do załączania plików na tym kanale." +#. SMTP encryption option where the connection starts encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS" +msgstr "Niejawne TLS" + +#. Description of the automatic SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS on port 465, required STARTTLS on any other port." +msgstr "Niejawne TLS na porcie 465, wymagane STARTTLS na każdym innym porcie." + #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx msgid "Import" @@ -23948,8 +23965,10 @@ msgstr "Bez konwersji" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. #. Library picker entry meaning no sound is selected for this scope. #. Member verification level option in the community moderation settings tab. Short standalone label for the lowest level (no verification). +#. SMTP encryption option that never uses TLS. #. Short label in the visual tab. Keep it concise. #. Summary row value on the confirm step when no items in the category were selected. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/channel_header_components/developer_tools/DeveloperToolsShared.ts #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx #: src/features/guild/utils/guild_tabs/audit_log/AuditLogSharedMessages.ts @@ -33153,6 +33172,16 @@ msgstr "Rozpoczęte przez {name}" msgid "Started displaying members with this role separately" msgstr "Zaczęto wyświetlać członków z tą rolą osobno" +#. SMTP encryption option where a plain connection must upgrade with STARTTLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS" +msgstr "STARTTLS" + +#. SMTP encryption option where STARTTLS is used only if the server offers it. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS when offered" +msgstr "STARTTLS, gdy jest oferowany" + #. 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 msgid "Startup" @@ -34625,6 +34654,26 @@ msgstr "Społeczność, z której pochodzi ta treść, wyłączyła klonowanie, msgid "The community you're looking for may have been deleted or you may not have access to it." msgstr "Społeczność, której szukasz, mogła zostać usunięta lub możesz nie mieć do niej dostępu." +#. Description of the implicit TLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is encrypted from the start. Usually port 465." +msgstr "Połączenie jest szyfrowane od samego początku. Zazwyczaj port 465." + +#. Description of the SMTP encryption option that never uses TLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is never encrypted. Only for a mail server on a network you trust." +msgstr "Połączenie nigdy nie jest szyfrowane. Tylko dla serwera poczty w zaufanej sieci." + +#. Description of the required STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection must upgrade to TLS before signing in. Usually port 587." +msgstr "Połączenie musi zostać uaktualnione do TLS przed zalogowaniem. Zwykle port 587." + +#. Description of the opportunistic STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection upgrades to TLS only if the server offers it." +msgstr "Połączenie jest szyfrowane protokołem TLS tylko wtedy, gdy serwer go oferuje." + #. Modal body shown when a desktop update download fails. #: src/features/updater/commands/UpdaterModalCommands.tsx msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable." @@ -38364,11 +38413,6 @@ msgstr "Użyj systemowego ustawienia ograniczenia animacji na tym urządzeniu" msgid "Use this device's system reduced motion preference, or customize it below." msgstr "Użyj systemowego ustawienia ograniczenia animacji na tym urządzeniu lub dostosuj je poniżej." -#. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx -msgid "Use TLS" -msgstr "Użyj TLS" - #. Permission name: allows voice activation instead of requiring push-to-talk. #: src/features/permissions/utils/PermissionLabelDescriptors.ts msgid "Use voice activity" 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 9e32d4713..1eedbf5d4 100644 --- a/fluxer_app/src/features/i18n/locales/pt-BR/messages.po +++ b/fluxer_app/src/features/i18n/locales/pt-BR/messages.po @@ -5414,8 +5414,10 @@ msgstr "Sugestão de preenchimento automático: {label}, {selectedOptionPosition #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. +#. SMTP encryption option that picks the mode from the port. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/RtcRegionSelect.tsx #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts @@ -14556,6 +14558,11 @@ msgstr "Preferência do codificador para novos compartilhamentos de tela." msgid "Encoder, SVC, and bitrate presets" msgstr "Codificador, SVC e predefinições de taxa de bits" +#. Label for the choice of how the SMTP connection is encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Encryption" +msgstr "Criptografia" + #: src/features/input/utils/KeybindUtils.ts msgctxt "keyboard-key-name" msgid "End" @@ -18420,6 +18427,16 @@ msgstr "Imagens" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "As imagens coladas da sua área de transferência são enviadas como anexos, e você não tem permissão para anexar arquivos neste canal." +#. SMTP encryption option where the connection starts encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS" +msgstr "TLS implícito" + +#. Description of the automatic SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS on port 465, required STARTTLS on any other port." +msgstr "TLS implícito na porta 465, STARTTLS obrigatório em qualquer outra porta." + #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx msgid "Import" @@ -23948,8 +23965,10 @@ msgstr "Não converter" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. #. Library picker entry meaning no sound is selected for this scope. #. Member verification level option in the community moderation settings tab. Short standalone label for the lowest level (no verification). +#. SMTP encryption option that never uses TLS. #. Short label in the visual tab. Keep it concise. #. Summary row value on the confirm step when no items in the category were selected. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/channel_header_components/developer_tools/DeveloperToolsShared.ts #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx #: src/features/guild/utils/guild_tabs/audit_log/AuditLogSharedMessages.ts @@ -33153,6 +33172,16 @@ msgstr "Iniciado por {name}" msgid "Started displaying members with this role separately" msgstr "Começou a exibir os membros com este cargo separadamente" +#. SMTP encryption option where a plain connection must upgrade with STARTTLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS" +msgstr "STARTTLS" + +#. SMTP encryption option where STARTTLS is used only if the server offers it. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS when offered" +msgstr "STARTTLS se oferecida" + #. 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 msgid "Startup" @@ -34625,6 +34654,26 @@ msgstr "A comunidade de origem desativou a clonagem, então não é possível co msgid "The community you're looking for may have been deleted or you may not have access to it." msgstr "A comunidade que você procura pode ter sido excluída ou você não tem acesso a ela." +#. Description of the implicit TLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is encrypted from the start. Usually port 465." +msgstr "A conexão é criptografada desde o início. Geralmente porta 465." + +#. Description of the SMTP encryption option that never uses TLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is never encrypted. Only for a mail server on a network you trust." +msgstr "A conexão nunca é criptografada. Apenas para um servidor de e-mail em uma rede em que você confia." + +#. Description of the required STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection must upgrade to TLS before signing in. Usually port 587." +msgstr "A conexão deve ser atualizada para TLS antes de entrar. Geralmente, porta 587." + +#. Description of the opportunistic STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection upgrades to TLS only if the server offers it." +msgstr "A conexão é atualizada para TLS somente se o servidor a oferecer." + #. Modal body shown when a desktop update download fails. #: src/features/updater/commands/UpdaterModalCommands.tsx msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable." @@ -38364,11 +38413,6 @@ msgstr "Usar a preferência de movimento reduzido do sistema deste aparelho" msgid "Use this device's system reduced motion preference, or customize it below." msgstr "Use a preferência de movimento reduzido do sistema deste aparelho ou personalize abaixo." -#. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx -msgid "Use TLS" -msgstr "Usar TLS" - #. Permission name: allows voice activation instead of requiring push-to-talk. #: src/features/permissions/utils/PermissionLabelDescriptors.ts msgid "Use voice activity" diff --git a/fluxer_app/src/features/i18n/locales/ro/messages.po b/fluxer_app/src/features/i18n/locales/ro/messages.po index 6474df859..9a39c4e99 100644 --- a/fluxer_app/src/features/i18n/locales/ro/messages.po +++ b/fluxer_app/src/features/i18n/locales/ro/messages.po @@ -5414,8 +5414,10 @@ msgstr "Sugestie de completare automată: {label}, {selectedOptionPosition} din #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. +#. SMTP encryption option that picks the mode from the port. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/RtcRegionSelect.tsx #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts @@ -14556,6 +14558,11 @@ msgstr "Preferința codificatorului pentru noile partajări de ecran." msgid "Encoder, SVC, and bitrate presets" msgstr "Codificator, SVC și presetări de bitrate" +#. Label for the choice of how the SMTP connection is encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Encryption" +msgstr "Criptare" + #: src/features/input/utils/KeybindUtils.ts msgctxt "keyboard-key-name" msgid "End" @@ -18420,6 +18427,16 @@ msgstr "Imagini" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Imaginile copiate din clipboard sunt trimise ca atașamente, iar tu nu ai permisiunea să atașezi fișiere în acest canal." +#. SMTP encryption option where the connection starts encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS" +msgstr "TLS implicit" + +#. Description of the automatic SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS on port 465, required STARTTLS on any other port." +msgstr "TLS implicit pe portul 465, STARTTLS obligatoriu pe orice alt port." + #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx msgid "Import" @@ -23948,8 +23965,10 @@ msgstr "Fără conversie" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. #. Library picker entry meaning no sound is selected for this scope. #. Member verification level option in the community moderation settings tab. Short standalone label for the lowest level (no verification). +#. SMTP encryption option that never uses TLS. #. Short label in the visual tab. Keep it concise. #. Summary row value on the confirm step when no items in the category were selected. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/channel_header_components/developer_tools/DeveloperToolsShared.ts #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx #: src/features/guild/utils/guild_tabs/audit_log/AuditLogSharedMessages.ts @@ -33153,6 +33172,16 @@ msgstr "Pornit de {name}" msgid "Started displaying members with this role separately" msgstr "A început afișarea separată a membrilor cu acest rol" +#. SMTP encryption option where a plain connection must upgrade with STARTTLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS" +msgstr "STARTTLS" + +#. SMTP encryption option where STARTTLS is used only if the server offers it. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS when offered" +msgstr "STARTTLS când este oferit" + #. 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 msgid "Startup" @@ -34625,6 +34654,26 @@ msgstr "Comunitatea de la care provine a dezactivat clonarea, așa că nu poate msgid "The community you're looking for may have been deleted or you may not have access to it." msgstr "Comunitatea pe care o cauți ar fi putut fi ștearsă sau este posibil să nu ai acces la ea." +#. Description of the implicit TLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is encrypted from the start. Usually port 465." +msgstr "Conexiunea este criptată de la început. De obicei, portul 465." + +#. Description of the SMTP encryption option that never uses TLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is never encrypted. Only for a mail server on a network you trust." +msgstr "Conexiunea nu este niciodată criptată. Doar pentru un server de mail dintr-o rețea în care aveți încredere." + +#. Description of the required STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection must upgrade to TLS before signing in. Usually port 587." +msgstr "Conexiunea trebuie să facă upgrade la TLS înainte de autentificare. De obicei, portul 587." + +#. Description of the opportunistic STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection upgrades to TLS only if the server offers it." +msgstr "Conexiunea este actualizată la TLS doar dacă serverul o oferă." + #. Modal body shown when a desktop update download fails. #: src/features/updater/commands/UpdaterModalCommands.tsx msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable." @@ -38364,11 +38413,6 @@ msgstr "Folosește preferința de mișcare redusă a sistemului acestui dispozit msgid "Use this device's system reduced motion preference, or customize it below." msgstr "Folosește preferința de mișcare redusă a sistemului acestui dispozitiv sau personalizeaz-o mai jos." -#. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx -msgid "Use TLS" -msgstr "Folosește TLS" - #. Permission name: allows voice activation instead of requiring push-to-talk. #: src/features/permissions/utils/PermissionLabelDescriptors.ts msgid "Use voice activity" diff --git a/fluxer_app/src/features/i18n/locales/ru/messages.po b/fluxer_app/src/features/i18n/locales/ru/messages.po index cfcdf5fd5..de18be49a 100644 --- a/fluxer_app/src/features/i18n/locales/ru/messages.po +++ b/fluxer_app/src/features/i18n/locales/ru/messages.po @@ -5414,8 +5414,10 @@ msgstr "Подсказка: {label}, {selectedOptionPosition} из {resultCount} #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. +#. SMTP encryption option that picks the mode from the port. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/RtcRegionSelect.tsx #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts @@ -14556,6 +14558,11 @@ msgstr "Предпочтительный кодировщик для новых msgid "Encoder, SVC, and bitrate presets" msgstr "Кодировщик, SVC и предустановки битрейта" +#. Label for the choice of how the SMTP connection is encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Encryption" +msgstr "Шифрование" + #: src/features/input/utils/KeybindUtils.ts msgctxt "keyboard-key-name" msgid "End" @@ -18420,6 +18427,16 @@ msgstr "Изображения" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Изображения, вставленные из буфера обмена, отправляются как вложения, но у вас нет разрешения прикреплять файлы в этом канале." +#. SMTP encryption option where the connection starts encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS" +msgstr "Неявный TLS" + +#. Description of the automatic SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS on port 465, required STARTTLS on any other port." +msgstr "Неявный TLS на порту 465, обязательный STARTTLS на любом другом порту." + #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx msgid "Import" @@ -23948,8 +23965,10 @@ msgstr "Без преобразования" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. #. Library picker entry meaning no sound is selected for this scope. #. Member verification level option in the community moderation settings tab. Short standalone label for the lowest level (no verification). +#. SMTP encryption option that never uses TLS. #. Short label in the visual tab. Keep it concise. #. Summary row value on the confirm step when no items in the category were selected. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/channel_header_components/developer_tools/DeveloperToolsShared.ts #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx #: src/features/guild/utils/guild_tabs/audit_log/AuditLogSharedMessages.ts @@ -33153,6 +33172,16 @@ msgstr "Начал {name}" msgid "Started displaying members with this role separately" msgstr "Участники с этой ролью теперь отображаются отдельно" +#. SMTP encryption option where a plain connection must upgrade with STARTTLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS" +msgstr "STARTTLS" + +#. SMTP encryption option where STARTTLS is used only if the server offers it. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS when offered" +msgstr "STARTTLS, если предлагается" + #. 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 msgid "Startup" @@ -34625,6 +34654,26 @@ msgstr "Сообщество, откуда это взято, отключило msgid "The community you're looking for may have been deleted or you may not have access to it." msgstr "Возможно, сообщество, которое вы ищете, было удалено или у вас нет к нему доступа." +#. Description of the implicit TLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is encrypted from the start. Usually port 465." +msgstr "Соединение зашифровано с самого начала. Обычно порт 465." + +#. Description of the SMTP encryption option that never uses TLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is never encrypted. Only for a mail server on a network you trust." +msgstr "Соединение никогда не шифруется. Только для почтового сервера в доверенной сети." + +#. Description of the required STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection must upgrade to TLS before signing in. Usually port 587." +msgstr "Соединение должно быть обновлено до TLS перед входом. Обычно порт 587." + +#. Description of the opportunistic STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection upgrades to TLS only if the server offers it." +msgstr "Соединение будет обновлено до TLS только в том случае, если сервер предложит его." + #. Modal body shown when a desktop update download fails. #: src/features/updater/commands/UpdaterModalCommands.tsx msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable." @@ -38364,11 +38413,6 @@ msgstr "Использовать системные настройки устр msgid "Use this device's system reduced motion preference, or customize it below." msgstr "Используйте системные настройки устройства для уменьшения движения или настройте их ниже." -#. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx -msgid "Use TLS" -msgstr "Использовать TLS" - #. Permission name: allows voice activation instead of requiring push-to-talk. #: src/features/permissions/utils/PermissionLabelDescriptors.ts msgid "Use voice activity" 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 c33ce710f..2826a16e3 100644 --- a/fluxer_app/src/features/i18n/locales/sv-SE/messages.po +++ b/fluxer_app/src/features/i18n/locales/sv-SE/messages.po @@ -5414,8 +5414,10 @@ msgstr "Föreslagen komplettering: {label}, {selectedOptionPosition} av {resultC #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. +#. SMTP encryption option that picks the mode from the port. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/RtcRegionSelect.tsx #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts @@ -14556,6 +14558,11 @@ msgstr "Önskad kodare för nya skärmdelningar." msgid "Encoder, SVC, and bitrate presets" msgstr "Kodare, SVC och bithastighetsförinställningar" +#. Label for the choice of how the SMTP connection is encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Encryption" +msgstr "Kryptering" + #: src/features/input/utils/KeybindUtils.ts msgctxt "keyboard-key-name" msgid "End" @@ -18420,6 +18427,16 @@ msgstr "Bilder" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Bilder som klistras in från urklipp skickas som bilagor, och du har inte behörighet att bifoga filer i den här kanalen." +#. SMTP encryption option where the connection starts encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS" +msgstr "Implicit-TLS" + +#. Description of the automatic SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS on port 465, required STARTTLS on any other port." +msgstr "Implicitisk TLS på port 465, kräver STARTTLS på alla andra portar." + #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx msgid "Import" @@ -23948,8 +23965,10 @@ msgstr "Ingen konvertering" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. #. Library picker entry meaning no sound is selected for this scope. #. Member verification level option in the community moderation settings tab. Short standalone label for the lowest level (no verification). +#. SMTP encryption option that never uses TLS. #. Short label in the visual tab. Keep it concise. #. Summary row value on the confirm step when no items in the category were selected. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/channel_header_components/developer_tools/DeveloperToolsShared.ts #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx #: src/features/guild/utils/guild_tabs/audit_log/AuditLogSharedMessages.ts @@ -33153,6 +33172,16 @@ msgstr "Startad av {name}" msgid "Started displaying members with this role separately" msgstr "Började visa medlemmar med den här rollen separat" +#. SMTP encryption option where a plain connection must upgrade with STARTTLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS" +msgstr "STARTTLS" + +#. SMTP encryption option where STARTTLS is used only if the server offers it. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS when offered" +msgstr "STARTTLS om det erbjuds" + #. 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 msgid "Startup" @@ -34625,6 +34654,26 @@ msgstr "Communityn som det här kom ifrån har inaktiverat kloning, så det kan msgid "The community you're looking for may have been deleted or you may not have access to it." msgstr "Communityn du letar efter kan ha raderats eller så har du inte åtkomst till den." +#. Description of the implicit TLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is encrypted from the start. Usually port 465." +msgstr "Anslutningen krypteras från början. Vanligtvis port 465." + +#. Description of the SMTP encryption option that never uses TLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is never encrypted. Only for a mail server on a network you trust." +msgstr "Anslutningen krypteras aldrig. Endast för en e-postserver på ett nätverk du litar på." + +#. Description of the required STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection must upgrade to TLS before signing in. Usually port 587." +msgstr "Anslutningen måste uppgraderas till TLS innan du loggar in. Vanligtvis port 587." + +#. Description of the opportunistic STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection upgrades to TLS only if the server offers it." +msgstr "Anslutningen uppgraderas till TLS endast om servern erbjuder det." + #. Modal body shown when a desktop update download fails. #: src/features/updater/commands/UpdaterModalCommands.tsx msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable." @@ -38364,11 +38413,6 @@ msgstr "Använd enhetens systeminställning för minskad rörelse" msgid "Use this device's system reduced motion preference, or customize it below." msgstr "Använd enhetens systeminställning för minskad rörelse, eller anpassa den nedan." -#. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx -msgid "Use TLS" -msgstr "Använd TLS" - #. Permission name: allows voice activation instead of requiring push-to-talk. #: src/features/permissions/utils/PermissionLabelDescriptors.ts msgid "Use voice activity" diff --git a/fluxer_app/src/features/i18n/locales/th/messages.po b/fluxer_app/src/features/i18n/locales/th/messages.po index 143039711..e2879e42c 100644 --- a/fluxer_app/src/features/i18n/locales/th/messages.po +++ b/fluxer_app/src/features/i18n/locales/th/messages.po @@ -5414,8 +5414,10 @@ msgstr "คำแนะนำการเติมข้อความอัต #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. +#. SMTP encryption option that picks the mode from the port. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/RtcRegionSelect.tsx #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts @@ -14556,6 +14558,11 @@ msgstr "การตั้งค่าตัวเข้ารหัสสำห msgid "Encoder, SVC, and bitrate presets" msgstr "การตั้งค่าล่วงหน้าสำหรับตัวเข้ารหัส, SVC และบิตเรต" +#. Label for the choice of how the SMTP connection is encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Encryption" +msgstr "การเข้ารหัส" + #: src/features/input/utils/KeybindUtils.ts msgctxt "keyboard-key-name" msgid "End" @@ -18420,6 +18427,16 @@ msgstr "รูปภาพ" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "รูปภาพที่วางจากคลิปบอร์ดจะถูกส่งเป็นไฟล์แนบ และคุณไม่มีสิทธิ์แนบไฟล์ในช่องนี้" +#. SMTP encryption option where the connection starts encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS" +msgstr "TLS โดยปริยาย" + +#. Description of the automatic SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS on port 465, required STARTTLS on any other port." +msgstr "TLS อัตโนมัติที่พอร์ต 465, ต้องใช้ STARTTLS ที่พอร์ตอื่น" + #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx msgid "Import" @@ -23948,8 +23965,10 @@ msgstr "ไม่แปลง" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. #. Library picker entry meaning no sound is selected for this scope. #. Member verification level option in the community moderation settings tab. Short standalone label for the lowest level (no verification). +#. SMTP encryption option that never uses TLS. #. Short label in the visual tab. Keep it concise. #. Summary row value on the confirm step when no items in the category were selected. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/channel_header_components/developer_tools/DeveloperToolsShared.ts #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx #: src/features/guild/utils/guild_tabs/audit_log/AuditLogSharedMessages.ts @@ -33153,6 +33172,16 @@ msgstr "เริ่มโดย {name}" msgid "Started displaying members with this role separately" msgstr "เริ่มแสดงสมาชิกที่มีบทบาทนี้แยกต่างหาก" +#. SMTP encryption option where a plain connection must upgrade with STARTTLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS" +msgstr "STARTTLS" + +#. SMTP encryption option where STARTTLS is used only if the server offers it. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS when offered" +msgstr "STARTTLS เมื่อมีให้" + #. 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 msgid "Startup" @@ -34625,6 +34654,26 @@ msgstr "คอมมูนิตี้ต้นทางปิดการโค msgid "The community you're looking for may have been deleted or you may not have access to it." msgstr "คอมมูนิตี้ที่คุณกำลังมองหาอาจถูกลบไปแล้ว หรือคุณอาจไม่ได้รับสิทธิ์เข้าถึง" +#. Description of the implicit TLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is encrypted from the start. Usually port 465." +msgstr "การเชื่อมต่อจะถูกเข้ารหัสตั้งแต่ต้น โดยปกติคือพอร์ต 465" + +#. Description of the SMTP encryption option that never uses TLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is never encrypted. Only for a mail server on a network you trust." +msgstr "การเชื่อมต่อจะไม่ถูกเข้ารหัส ใช้สำหรับเซิร์ฟเวอร์อีเมลในเครือข่ายที่คุณเชื่อถือเท่านั้น" + +#. Description of the required STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection must upgrade to TLS before signing in. Usually port 587." +msgstr "การเชื่อมต่อต้องอัปเกรดเป็น TLS ก่อนลงชื่อเข้าใช้ โดยปกติคือพอร์ต 587" + +#. Description of the opportunistic STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection upgrades to TLS only if the server offers it." +msgstr "การเชื่อมต่อจะอัปเกรดเป็น TLS เฉพาะเมื่อเซิร์ฟเวอร์มีให้เท่านั้น" + #. Modal body shown when a desktop update download fails. #: src/features/updater/commands/UpdaterModalCommands.tsx msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable." @@ -38364,11 +38413,6 @@ msgstr "ใช้การตั้งค่าลดการเคลื่อ msgid "Use this device's system reduced motion preference, or customize it below." msgstr "ใช้การตั้งค่าลดการเคลื่อนไหวของระบบในอุปกรณ์นี้ หรือปรับแต่งด้านล่าง" -#. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx -msgid "Use TLS" -msgstr "ใช้ TLS" - #. Permission name: allows voice activation instead of requiring push-to-talk. #: src/features/permissions/utils/PermissionLabelDescriptors.ts msgid "Use voice activity" diff --git a/fluxer_app/src/features/i18n/locales/tr/messages.po b/fluxer_app/src/features/i18n/locales/tr/messages.po index 68c71c5d4..1dfe72236 100644 --- a/fluxer_app/src/features/i18n/locales/tr/messages.po +++ b/fluxer_app/src/features/i18n/locales/tr/messages.po @@ -5414,8 +5414,10 @@ msgstr "Otomatik tamamlama önerisi: {label}, {resultCount} sonuçtan {selectedO #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. +#. SMTP encryption option that picks the mode from the port. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/RtcRegionSelect.tsx #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts @@ -14556,6 +14558,11 @@ msgstr "Yeni ekran paylaşımları için kodlayıcı tercihi." msgid "Encoder, SVC, and bitrate presets" msgstr "Kodlayıcı, SVC ve bit hızı ön ayarları" +#. Label for the choice of how the SMTP connection is encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Encryption" +msgstr "Şifreleme" + #: src/features/input/utils/KeybindUtils.ts msgctxt "keyboard-key-name" msgid "End" @@ -18420,6 +18427,16 @@ msgstr "Görseller" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Panodan yapıştırdığınız görseller ek olarak gönderilir ve bu kanalda dosya ekleme izniniz yok." +#. SMTP encryption option where the connection starts encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS" +msgstr "Açık TLS" + +#. Description of the automatic SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS on port 465, required STARTTLS on any other port." +msgstr "465 numaralı bağlantı noktasında örtük TLS, diğer herhangi bir bağlantı noktasında STARTTLS gerektirir." + #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx msgid "Import" @@ -23948,8 +23965,10 @@ msgstr "Dönüştürme yok" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. #. Library picker entry meaning no sound is selected for this scope. #. Member verification level option in the community moderation settings tab. Short standalone label for the lowest level (no verification). +#. SMTP encryption option that never uses TLS. #. Short label in the visual tab. Keep it concise. #. Summary row value on the confirm step when no items in the category were selected. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/channel_header_components/developer_tools/DeveloperToolsShared.ts #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx #: src/features/guild/utils/guild_tabs/audit_log/AuditLogSharedMessages.ts @@ -33153,6 +33172,16 @@ msgstr "{name} başlattı" msgid "Started displaying members with this role separately" msgstr "Bu role sahip üyeler ayrı olarak gösterilmeye başlandı" +#. SMTP encryption option where a plain connection must upgrade with STARTTLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS" +msgstr "STARTTLS" + +#. SMTP encryption option where STARTTLS is used only if the server offers it. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS when offered" +msgstr "Sunulursa STARTTLS" + #. 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 msgid "Startup" @@ -34625,6 +34654,26 @@ msgstr "Bu ifadenin geldiği topluluk kopyalamayı kapattığı için kopyalanam msgid "The community you're looking for may have been deleted or you may not have access to it." msgstr "Aradığınız topluluk silinmiş olabilir veya erişim izniniz olmayabilir." +#. Description of the implicit TLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is encrypted from the start. Usually port 465." +msgstr "Bağlantı en başından itibaren şifrelenir. Genellikle 465 numaralı bağlantı noktası kullanılır." + +#. Description of the SMTP encryption option that never uses TLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is never encrypted. Only for a mail server on a network you trust." +msgstr "Bağlantı asla şifrelenmez. Yalnızca güvendiğiniz bir ağdaki posta sunucusu için." + +#. Description of the required STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection must upgrade to TLS before signing in. Usually port 587." +msgstr "Bağlantı, oturum açmadan önce TLS'ye yükseltilmelidir. Genellikle 587 numaralı bağlantı noktası kullanılır." + +#. Description of the opportunistic STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection upgrades to TLS only if the server offers it." +msgstr "Sunucu teklif ederse bağlantı TLS'ye yükseltilir." + #. Modal body shown when a desktop update download fails. #: src/features/updater/commands/UpdaterModalCommands.tsx msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable." @@ -38364,11 +38413,6 @@ msgstr "Bu cihazın sistem azaltılmış hareket tercihini kullan" msgid "Use this device's system reduced motion preference, or customize it below." msgstr "Bu cihazın sistem azaltılmış hareket tercihini kullanın veya aşağıdan özelleştirin." -#. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx -msgid "Use TLS" -msgstr "TLS kullan" - #. Permission name: allows voice activation instead of requiring push-to-talk. #: src/features/permissions/utils/PermissionLabelDescriptors.ts msgid "Use voice activity" diff --git a/fluxer_app/src/features/i18n/locales/uk/messages.po b/fluxer_app/src/features/i18n/locales/uk/messages.po index e502c99b3..e02fcd8fb 100644 --- a/fluxer_app/src/features/i18n/locales/uk/messages.po +++ b/fluxer_app/src/features/i18n/locales/uk/messages.po @@ -5414,8 +5414,10 @@ msgstr "Пропозиція автозаповнення: {label}, {selectedOpt #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. +#. SMTP encryption option that picks the mode from the port. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/RtcRegionSelect.tsx #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts @@ -14556,6 +14558,11 @@ msgstr "Вибір кодувальника для нових демонстра msgid "Encoder, SVC, and bitrate presets" msgstr "Кодувальник, SVC та попередні налаштування бітрейту" +#. Label for the choice of how the SMTP connection is encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Encryption" +msgstr "Шифрування" + #: src/features/input/utils/KeybindUtils.ts msgctxt "keyboard-key-name" msgid "End" @@ -18420,6 +18427,16 @@ msgstr "Зображення" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Зображення, вставлені з буфера обміну, надсилаються як вкладення, а у вас немає дозволу на прикріплення файлів у цьому каналі." +#. SMTP encryption option where the connection starts encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS" +msgstr "Неявний TLS" + +#. Description of the automatic SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS on port 465, required STARTTLS on any other port." +msgstr "Неявний TLS на порту 465, обов'язковий STARTTLS на будь-якому іншому порту." + #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx msgid "Import" @@ -23948,8 +23965,10 @@ msgstr "Без перетворення" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. #. Library picker entry meaning no sound is selected for this scope. #. Member verification level option in the community moderation settings tab. Short standalone label for the lowest level (no verification). +#. SMTP encryption option that never uses TLS. #. Short label in the visual tab. Keep it concise. #. Summary row value on the confirm step when no items in the category were selected. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/channel_header_components/developer_tools/DeveloperToolsShared.ts #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx #: src/features/guild/utils/guild_tabs/audit_log/AuditLogSharedMessages.ts @@ -33153,6 +33172,16 @@ msgstr "Розпочато {name}" msgid "Started displaying members with this role separately" msgstr "Розпочато окреме відображення учасників із цією роллю" +#. SMTP encryption option where a plain connection must upgrade with STARTTLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS" +msgstr "STARTTLS" + +#. SMTP encryption option where STARTTLS is used only if the server offers it. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS when offered" +msgstr "STARTTLS, якщо запропоновано" + #. 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 msgid "Startup" @@ -34625,6 +34654,26 @@ msgstr "Спільнота, з якої це походить, вимкнула msgid "The community you're looking for may have been deleted or you may not have access to it." msgstr "Спільноту, яку ви шукаєте, можливо, було видалено або у вас немає доступу до неї." +#. Description of the implicit TLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is encrypted from the start. Usually port 465." +msgstr "З'єднання шифрується з самого початку. Зазвичай порт 465." + +#. Description of the SMTP encryption option that never uses TLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is never encrypted. Only for a mail server on a network you trust." +msgstr "З'єднання ніколи не шифрується. Тільки для поштового сервера в мережі, якій ви довіряєте." + +#. Description of the required STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection must upgrade to TLS before signing in. Usually port 587." +msgstr "З'єднання має бути оновлено до TLS перед входом. Зазвичай порт 587." + +#. Description of the opportunistic STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection upgrades to TLS only if the server offers it." +msgstr "З'єднання оновлюється до TLS лише тоді, коли його пропонує сервер." + #. Modal body shown when a desktop update download fails. #: src/features/updater/commands/UpdaterModalCommands.tsx msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable." @@ -38364,11 +38413,6 @@ msgstr "Використовувати системні налаштування msgid "Use this device's system reduced motion preference, or customize it below." msgstr "Використовувати системні налаштування пристрою для зменшення руху або налаштувати нижче." -#. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx -msgid "Use TLS" -msgstr "Використовувати TLS" - #. Permission name: allows voice activation instead of requiring push-to-talk. #: src/features/permissions/utils/PermissionLabelDescriptors.ts msgid "Use voice activity" diff --git a/fluxer_app/src/features/i18n/locales/vi/messages.po b/fluxer_app/src/features/i18n/locales/vi/messages.po index a7b9b3e80..559a78c99 100644 --- a/fluxer_app/src/features/i18n/locales/vi/messages.po +++ b/fluxer_app/src/features/i18n/locales/vi/messages.po @@ -5414,8 +5414,10 @@ msgstr "Gợi ý tự động hoàn tất: {label}, {selectedOptionPosition} tr #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. +#. SMTP encryption option that picks the mode from the port. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/RtcRegionSelect.tsx #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts @@ -14556,6 +14558,11 @@ msgstr "Ưu tiên bộ mã hóa cho các lần chia sẻ màn hình mới." msgid "Encoder, SVC, and bitrate presets" msgstr "Bộ mã hóa, SVC và cài đặt trước tốc độ bit" +#. Label for the choice of how the SMTP connection is encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Encryption" +msgstr "Mã hóa" + #: src/features/input/utils/KeybindUtils.ts msgctxt "keyboard-key-name" msgid "End" @@ -18420,6 +18427,16 @@ msgstr "Hình ảnh" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "Ảnh dán từ bảng nhớ tạm sẽ được gửi dưới dạng tệp đính kèm và bạn không có quyền đính kèm tệp trong kênh này." +#. SMTP encryption option where the connection starts encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS" +msgstr "TLS ngầm" + +#. Description of the automatic SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS on port 465, required STARTTLS on any other port." +msgstr "TLS ngầm định trên cổng 465, yêu cầu STARTTLS trên bất kỳ cổng nào khác." + #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx msgid "Import" @@ -23948,8 +23965,10 @@ msgstr "Không chuyển đổi" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. #. Library picker entry meaning no sound is selected for this scope. #. Member verification level option in the community moderation settings tab. Short standalone label for the lowest level (no verification). +#. SMTP encryption option that never uses TLS. #. Short label in the visual tab. Keep it concise. #. Summary row value on the confirm step when no items in the category were selected. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/channel_header_components/developer_tools/DeveloperToolsShared.ts #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx #: src/features/guild/utils/guild_tabs/audit_log/AuditLogSharedMessages.ts @@ -33153,6 +33172,16 @@ msgstr "Bắt đầu bởi {name}" msgid "Started displaying members with this role separately" msgstr "Đã bắt đầu hiển thị riêng các thành viên có vai trò này" +#. SMTP encryption option where a plain connection must upgrade with STARTTLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS" +msgstr "STARTTLS" + +#. SMTP encryption option where STARTTLS is used only if the server offers it. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS when offered" +msgstr "STARTTLS khi được 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/search_index/DesktopSettingsIndex.ts msgid "Startup" @@ -34625,6 +34654,26 @@ msgstr "Cộng đồng nguồn đã tắt tính năng nhân bản, nên không t msgid "The community you're looking for may have been deleted or you may not have access to it." msgstr "Cộng đồng bạn tìm kiếm có thể đã bị xóa hoặc bạn không có quyền truy cập." +#. Description of the implicit TLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is encrypted from the start. Usually port 465." +msgstr "Kết nối được mã hóa ngay từ đầu. Thường là cổng 465." + +#. Description of the SMTP encryption option that never uses TLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is never encrypted. Only for a mail server on a network you trust." +msgstr "Kết nối này không bao giờ được mã hóa. Chỉ dành cho máy chủ thư trên mạng mà bạn tin cậy." + +#. Description of the required STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection must upgrade to TLS before signing in. Usually port 587." +msgstr "Kết nối phải nâng cấp lên TLS trước khi đăng nhập. Thường là cổng 587." + +#. Description of the opportunistic STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection upgrades to TLS only if the server offers it." +msgstr "Kết nối sẽ nâng cấp lên TLS chỉ khi máy chủ cung cấp tùy chọn này." + #. Modal body shown when a desktop update download fails. #: src/features/updater/commands/UpdaterModalCommands.tsx msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable." @@ -38364,11 +38413,6 @@ msgstr "Sử dụng tùy chọn giảm chuyển động của hệ thống trên msgid "Use this device's system reduced motion preference, or customize it below." msgstr "Sử dụng tùy chọn giảm chuyển động của hệ thống trên thiết bị này hoặc tùy chỉnh bên dưới." -#. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx -msgid "Use TLS" -msgstr "Sử dụng TLS" - #. Permission name: allows voice activation instead of requiring push-to-talk. #: src/features/permissions/utils/PermissionLabelDescriptors.ts msgid "Use voice activity" 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 44d2258cf..a2e732eb9 100644 --- a/fluxer_app/src/features/i18n/locales/zh-CN/messages.po +++ b/fluxer_app/src/features/i18n/locales/zh-CN/messages.po @@ -5414,8 +5414,10 @@ msgstr "自动补全建议:{label},第 {selectedOptionPosition} 项,共 {r #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. +#. SMTP encryption option that picks the mode from the port. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/RtcRegionSelect.tsx #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts @@ -14556,6 +14558,11 @@ msgstr "新屏幕共享的首选编码器。" msgid "Encoder, SVC, and bitrate presets" msgstr "编码器、SVC 和比特率预设" +#. Label for the choice of how the SMTP connection is encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Encryption" +msgstr "加密" + #: src/features/input/utils/KeybindUtils.ts msgctxt "keyboard-key-name" msgid "End" @@ -18420,6 +18427,16 @@ msgstr "图片" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "从剪贴板粘贴的图片将作为附件发送,但你没有在此频道中附加文件的权限。" +#. SMTP encryption option where the connection starts encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS" +msgstr "隐式 TLS" + +#. Description of the automatic SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS on port 465, required STARTTLS on any other port." +msgstr "端口 465 上的隐式 TLS,其他端口上需要 STARTTLS。" + #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx msgid "Import" @@ -23948,8 +23965,10 @@ msgstr "无转换" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. #. Library picker entry meaning no sound is selected for this scope. #. Member verification level option in the community moderation settings tab. Short standalone label for the lowest level (no verification). +#. SMTP encryption option that never uses TLS. #. Short label in the visual tab. Keep it concise. #. Summary row value on the confirm step when no items in the category were selected. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/channel_header_components/developer_tools/DeveloperToolsShared.ts #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx #: src/features/guild/utils/guild_tabs/audit_log/AuditLogSharedMessages.ts @@ -33153,6 +33172,16 @@ msgstr "{name} 发起" msgid "Started displaying members with this role separately" msgstr "开始单独显示拥有此身份组的成员" +#. SMTP encryption option where a plain connection must upgrade with STARTTLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS" +msgstr "STARTTLS" + +#. SMTP encryption option where STARTTLS is used only if the server offers it. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS when offered" +msgstr "STARTTLS(如果提供)" + #. 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 msgid "Startup" @@ -34625,6 +34654,26 @@ msgstr "此内容所属的社区已关闭克隆功能,因此无法复制。" msgid "The community you're looking for may have been deleted or you may not have access to it." msgstr "你要找的社区可能已被删除,或者你没有访问权限。" +#. Description of the implicit TLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is encrypted from the start. Usually port 465." +msgstr "连接从一开始就已加密。通常使用 465 端口。" + +#. Description of the SMTP encryption option that never uses TLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is never encrypted. Only for a mail server on a network you trust." +msgstr "连接永远不会加密。仅适用于您信任的网络上的邮件服务器。" + +#. Description of the required STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection must upgrade to TLS before signing in. Usually port 587." +msgstr "连接必须先升级到 TLS 才能登录。通常是端口 587。" + +#. Description of the opportunistic STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection upgrades to TLS only if the server offers it." +msgstr "如果服务器提供该选项,连接将升级到 TLS。" + #. Modal body shown when a desktop update download fails. #: src/features/updater/commands/UpdaterModalCommands.tsx msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable." @@ -38364,11 +38413,6 @@ msgstr "使用此设备的系统减弱动态效果偏好设置" msgid "Use this device's system reduced motion preference, or customize it below." msgstr "使用此设备的系统减弱动态效果偏好设置,或在下方自定义。" -#. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx -msgid "Use TLS" -msgstr "使用 TLS" - #. Permission name: allows voice activation instead of requiring push-to-talk. #: src/features/permissions/utils/PermissionLabelDescriptors.ts msgid "Use voice activity" 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 c2b556d8f..a603f1323 100644 --- a/fluxer_app/src/features/i18n/locales/zh-TW/messages.po +++ b/fluxer_app/src/features/i18n/locales/zh-TW/messages.po @@ -5414,8 +5414,10 @@ msgstr "自動完成建議:{label},第 {selectedOptionPosition} 項,共 {r #. Option label for a WebRTC content hint select. #. Option label for an SVC mode select. #. Option label for an encoder path select. +#. SMTP encryption option that picks the mode from the port. #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #. Voice region option label in the voice settings menu meaning let Fluxer pick the best region automatically. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/modals/channel_tabs/channel_overview_tab/RtcRegionSelect.tsx #: src/features/user/components/modals/tabs/advanced_settings_tab/AdvancedVideoControls.tsx #: src/features/user/components/settings_utils/section_registry/NotificationsSections.ts @@ -14556,6 +14558,11 @@ msgstr "新螢幕分享的編碼器偏好設定。" msgid "Encoder, SVC, and bitrate presets" msgstr "編碼器、SVC 和位元率預設" +#. Label for the choice of how the SMTP connection is encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Encryption" +msgstr "加密" + #: src/features/input/utils/KeybindUtils.ts msgctxt "keyboard-key-name" msgid "End" @@ -18420,6 +18427,16 @@ msgstr "圖片" msgid "Images pasted from your clipboard are sent as attachments, and you don't have permission to attach files in this channel." msgstr "從剪貼簿貼上的圖片會以附件形式傳送,但您沒有權限在此頻道中附加檔案。" +#. SMTP encryption option where the connection starts encrypted. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS" +msgstr "隱含 TLS" + +#. Description of the automatic SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "Implicit TLS on port 465, required STARTTLS on any other port." +msgstr "埠號 465 使用隱含 TLS,其他埠號則需要 STARTTLS。" + #. Primary button in the favorite GIF import modal. Starts importing pasted GIF URLs. #: src/features/channel/components/pickers/gif/ImportFavoriteGifsModal.tsx msgid "Import" @@ -23948,8 +23965,10 @@ msgstr "無轉換" #. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse. #. Library picker entry meaning no sound is selected for this scope. #. Member verification level option in the community moderation settings tab. Short standalone label for the lowest level (no verification). +#. SMTP encryption option that never uses TLS. #. Short label in the visual tab. Keep it concise. #. Summary row value on the confirm step when no items in the category were selected. +#: src/features/app/components/setup/SetupWizardSteps.tsx #: src/features/channel/components/channel_header_components/developer_tools/DeveloperToolsShared.ts #: src/features/guild/components/modals/guild_tabs/GuildModerationTab.tsx #: src/features/guild/utils/guild_tabs/audit_log/AuditLogSharedMessages.ts @@ -33153,6 +33172,16 @@ msgstr "由 {name} 發起" msgid "Started displaying members with this role separately" msgstr "開始將擁有此身分組的成員獨立顯示" +#. SMTP encryption option where a plain connection must upgrade with STARTTLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS" +msgstr "STARTTLS" + +#. SMTP encryption option where STARTTLS is used only if the server offers it. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "STARTTLS when offered" +msgstr "STARTTLS (若伺服器提供時)" + #. 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 msgid "Startup" @@ -34625,6 +34654,26 @@ msgstr "此內容的來源社群已關閉複製功能,因此無法複製。" msgid "The community you're looking for may have been deleted or you may not have access to it." msgstr "您要找的社群可能已被刪除,或是您沒有權限存取。" +#. Description of the implicit TLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is encrypted from the start. Usually port 465." +msgstr "連線一開始即加密。通常是連接埠 465。" + +#. Description of the SMTP encryption option that never uses TLS. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection is never encrypted. Only for a mail server on a network you trust." +msgstr "連線永遠不會加密。僅適用於您信任的網路上的郵件伺服器。" + +#. Description of the required STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection must upgrade to TLS before signing in. Usually port 587." +msgstr "連線必須在登入前升級至 TLS。通常是連接埠 587。" + +#. Description of the opportunistic STARTTLS SMTP encryption option. +#: src/features/app/components/setup/SetupWizardSteps.tsx +msgid "The connection upgrades to TLS only if the server offers it." +msgstr "如果伺服器提供,連線才會升級至 TLS。" + #. Modal body shown when a desktop update download fails. #: src/features/updater/commands/UpdaterModalCommands.tsx msgid "The desktop update could not be downloaded. Try again from the update button when your connection is stable." @@ -38364,11 +38413,6 @@ msgstr "使用此裝置的系統減少動態偏好設定" msgid "Use this device's system reduced motion preference, or customize it below." msgstr "使用此裝置的系統減少動態偏好設定,或在下方自訂。" -#. Label for SMTP TLS toggle. -#: src/features/app/components/setup/SetupWizardSteps.tsx -msgid "Use TLS" -msgstr "使用 TLS" - #. Permission name: allows voice activation instead of requiring push-to-talk. #: src/features/permissions/utils/PermissionLabelDescriptors.ts msgid "Use voice activity" diff --git a/fluxer_docs/src/content/docs/admin-api/instance.mdx b/fluxer_docs/src/content/docs/admin-api/instance.mdx index 337951427..cdb06ad6c 100644 --- a/fluxer_docs/src/content/docs/admin-api/instance.mdx +++ b/fluxer_docs/src/content/docs/admin-api/instance.mdx @@ -398,11 +398,11 @@ Outbound email settings, and the provider resolved from them. | effective_provider | string | Provider in use, either `smtp` or `none` | | from_email | ?string | Envelope sender address | | from_name | ?string | Envelope sender name, or null when none is set and mail is sent under the instance product name | -| smtp1 | object | `host`, `port`, `username`, `secure`, and `password_set` | +| smtp1 | object | The SMTP server settings | | disable_new_ip_authorization | boolean | Whether new-IP authorisation email is suppressed by the stored setting | | effective_disable_new_ip_authorization2 | boolean | Whether it is suppressed once outbound email state is taken into account | -1 `host`, `username`, and `secure` are nullable, `port` is a nullable integer from 1 to 65535, and `password_set` is a plain boolean +1 Holds `host`, `port`, `username`, `tls_mode`, `effective_tls_mode`, and `password_set`. `host` and `username` are nullable, `port` is a nullable integer from 1 to 65535, and `password_set` is a plain boolean. `tls_mode` is the saved [SMTP TLS mode](#smtp-tls-mode), or null when none is saved. `effective_tls_mode` is the mode outgoing email uses, or null while the provider is not `smtp` 2 True whenever the stored setting is true or outbound email is not in force @@ -503,6 +503,19 @@ Fluxer clears `max_size_mb` when it is not above `min_size_mb`, clears `max_elig | wordmark | Writes `branding.wordmark_url` | | favicon | Writes `branding.favicon_url` | +## SMTP TLS mode + +How the connection to the SMTP server is encrypted. + +| Value | Description | +| --- | --- | +| implicit | TLS from the first byte, usually on port 465 | +| starttls | A plain connection that must upgrade with STARTTLS, usually on port 587 | +| opportunistic | A plain connection that upgrades with STARTTLS when the server offers it | +| none | No TLS, even when the server offers STARTTLS | + +With no mode saved, Fluxer follows `FLUXER_EMAIL_SMTP_TLS_MODE`, then the older `FLUXER_EMAIL_SMTP_SECURE`. With neither set it uses `implicit` on port 465 and `starttls` on every other port. + ## SMTP test result object Whether one [Create SMTP test](#create-smtp-test) connection attempt succeeded, and the failure text when it did not. @@ -672,7 +685,7 @@ The body has one optional object for each section. Fluxer leaves an absent secti `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`, 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.email.smtp` takes `host`, `port`, `username`, `password`, and `tls_mode`, an [SMTP TLS mode](#smtp-tls-mode), and null clears a saved value so the environment applies again. The older boolean `secure` is still read when `tls_mode` is absent, with true as `implicit` and false as `opportunistic`. `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 @@ -763,7 +776,7 @@ The operation records one [Admin audit entry](/admin-api/#admin-audit-entry-obje -Opens a connection to the supplied SMTP server, authenticates against it, and reports the outcome as an [SMTP test result](#smtp-test-result-object) object without storing anything. Requires `instance:config:update`, or a session credential until setup is marked complete. +Opens a connection to an SMTP server, authenticates against it, and reports the outcome as an [SMTP test result](#smtp-test-result-object) object without storing anything. Requires `instance:config:update`, or a session credential until setup is marked complete. :::note[A rejected credential is still a successful test] A test that runs to completion answers 200 whether or not the server accepted the connection. The `ok` field is the verdict and `error` is the failure text. @@ -773,11 +786,17 @@ A test that runs to completion answers 200 whether or not the server accepted th | Field | Type | Description | | --- | --- | --- | -| host | string | SMTP host to connect to (1-255 characters after trimming) | -| port | integer | SMTP port to connect to (1-65535) | -| username | string | SMTP username to authenticate with (1-320 characters after trimming) | -| password | string | SMTP password to authenticate with (1-4096 characters after trimming) | -| secure? | boolean | Whether to connect with implicit TLS (default true) | +| host? | ?string | SMTP host to connect to (1-255 characters after trimming) | +| port? | ?integer | SMTP port to connect to (1-65535) | +| username? | ?string | SMTP username to authenticate with (1-320 characters after trimming) | +| password? | ?string | SMTP password to authenticate with (1-4096 characters after trimming) | +| tls_mode?1 | ?string | [SMTP TLS mode](#smtp-tls-mode) to connect with | + +Every field left out or sent as null is filled from the saved configuration, the one outgoing email uses. The saved password is filled in only while `host` and `username` are left out or match the saved ones. A test that names another host or username without a `password` fails before any connection is made. + +An empty body tests exactly what a send would use. It fails without connecting while outgoing email is not in force, which covers email turned off, a provider other than `smtp`, a missing from address, a missing host, username or password, and an instance that signs in with usernames. A test with fields in the body fails the same way when the host, username or password ends up empty. + +1 Left out, the saved mode applies. Sent as null, the mode follows `FLUXER_EMAIL_SMTP_TLS_MODE`, then the port ### Response @@ -789,7 +808,7 @@ A test that runs to completion answers 200 whether or not the server accepted th No configuration is written and the supplied credentials are discarded when the request completes. The connection, greeting, and socket each have a ten-second deadline. -The operation records one [Admin audit entry](/admin-api/#admin-audit-entry-object) with action `test_smtp_connection`, target type `instance_config`, target ID `0`, and metadata keys `port`, `secure`, and `ok`. The host, username, password, and failure text are not recorded. +The operation records one [Admin audit entry](/admin-api/#admin-audit-entry-object) with action `test_smtp_connection`, target type `instance_config`, target ID `0`, and metadata keys `port`, `tls_mode`, and `ok`. The host, username, password, and failure text are not recorded. ### Rate limit diff --git a/fluxer_docs/src/content/docs/operator/configuration.mdx b/fluxer_docs/src/content/docs/operator/configuration.mdx index dc3cb3ae3..e8876740d 100644 --- a/fluxer_docs/src/content/docs/operator/configuration.mdx +++ b/fluxer_docs/src/content/docs/operator/configuration.mdx @@ -804,9 +804,24 @@ Default empty. The address replies go to, sent as the `Reply-To` header on every `.env.example` empty. The SMTP password. Part of the completeness check. Compose forwards it from `.env`. +#### `FLUXER_EMAIL_SMTP_TLS_MODE` + +`.env.example` empty. How the SMTP connection is encrypted. Anything other than the four values below fails startup. Compose forwards it from `.env`. + +| Value | Connection | +| ----- | ---------- | +| `implicit` | TLS from the first byte. Most providers serve this on port 465 | +| `starttls` | A plain connection that must upgrade with STARTTLS before the login. Most providers serve this on port 587 | +| `opportunistic` | A plain connection that upgrades with STARTTLS when the server offers it, and stays plain when it does not | +| `none` | No TLS, even when the server offers STARTTLS. Only for a mail server on a network you trust | + +An empty value picks the mode from the port: `implicit` on port 465 and `starttls` on every other port. A mode saved in the admin dashboard wins over this variable, and choosing Automatic there hands the choice back to it. The dashboard shows the mode outgoing email ends up with. Automatic in the setup wizard saves the mode the port calls for, so it never follows this variable or `FLUXER_EMAIL_SMTP_SECURE`. + #### `FLUXER_EMAIL_SMTP_SECURE` -`.env.example` `true`. Implicit TLS. Defaults to `true` whenever the provider is `smtp`. Compose forwards it from `.env`. +`.env.example` unset. The older switch, read only while `FLUXER_EMAIL_SMTP_TLS_MODE` is empty. `true` means `implicit` and `false` means `opportunistic`. Compose forwards it from `.env`, and `.env.example` lists it commented out. An older `.env` can hold `FLUXER_EMAIL_SMTP_SECURE=true` next to port 587, and that pair fails against a STARTTLS server with `wrong version number`. Remove the line or set `FLUXER_EMAIL_SMTP_TLS_MODE`. + +The Save and test button in the admin dashboard, and [Create SMTP test](/admin-api/instance/#create-smtp-test) with an empty body, connect with the saved settings, the same ones outgoing email uses, and fail with the reason when outgoing email is turned off or incomplete. A send that fails is logged by `api` or `worker` as `SMTP send failed` with the host, port and TLS mode. The API reads `FLUXER_EMAIL_WEBHOOK_SECRET` for inbound delivery webhooks. Compose forwards it from `.env`, and `.env.example` lists it commented out. diff --git a/knip.json b/knip.json index c90bd4c34..682ea6dbd 100644 --- a/knip.json +++ b/knip.json @@ -39,7 +39,6 @@ "emoji-regex", "ioredis", "maxmind", - "nodemailer", "pg", "pino", "undici", diff --git a/packages/config/src/MasterConfig.ts b/packages/config/src/MasterConfig.ts index 1ba134780..1593fa4bf 100644 --- a/packages/config/src/MasterConfig.ts +++ b/packages/config/src/MasterConfig.ts @@ -13,6 +13,7 @@ export const ACCOUNT_IDENTITY_MODE_NAMES = ['email', 'username'] as const; type AccountIdentityModeName = (typeof ACCOUNT_IDENTITY_MODE_NAMES)[number]; export const TAG_STYLE_NAMES = ['none', 'random'] as const; type TagStyleName = (typeof TAG_STYLE_NAMES)[number]; +type SmtpTlsModeName = 'implicit' | 'starttls' | 'opportunistic' | 'none'; interface InstanceBrandingConfig { product_name: string; @@ -189,7 +190,8 @@ export interface MasterConfig { port: number; username: string; password: string; - secure: boolean; + tls_mode?: SmtpTlsModeName; + secure?: boolean; }; }; voice: { diff --git a/packages/config/src/__tests__/ConfigLoader.test.ts b/packages/config/src/__tests__/ConfigLoader.test.ts index 53843b777..93637e12d 100644 --- a/packages/config/src/__tests__/ConfigLoader.test.ts +++ b/packages/config/src/__tests__/ConfigLoader.test.ts @@ -474,6 +474,25 @@ describe('ConfigLoader', () => { expect(config.instance.tag_style).toBe(expected); }); + test.each([ + ['implicit', 'implicit'], + [' StartTLS ', 'starttls'], + ['opportunistic', 'opportunistic'], + ['none', 'none'], + ['', undefined], + ])('parses FLUXER_EMAIL_SMTP_TLS_MODE=%j', async (raw, expected) => { + stubMinimalEnv({FLUXER_EMAIL_SMTP_HOST: 'smtp.example.com', FLUXER_EMAIL_SMTP_TLS_MODE: raw}); + const config = await loadConfig(); + expect(config.integrations.email.smtp?.tls_mode).toBe(expected); + }); + + test.each(['tls', 'true'])('rejects the SMTP TLS mode %j', async (raw) => { + stubMinimalEnv({FLUXER_EMAIL_SMTP_TLS_MODE: raw}); + await expect(loadConfig()).rejects.toThrow( + 'FLUXER_EMAIL_SMTP_TLS_MODE must be implicit, starttls, opportunistic or none', + ); + }); + test.each(['sequential', 'zero_first'])('rejects the tag style %j', async (raw) => { stubMinimalEnv({FLUXER_TAG_STYLE: raw}); await expect(loadConfig()).rejects.toThrow('FLUXER_TAG_STYLE must be none or random'); diff --git a/packages/config/src/config_loader/EnvironmentOverrides.ts b/packages/config/src/config_loader/EnvironmentOverrides.ts index dbd4931cf..a29802c0c 100644 --- a/packages/config/src/config_loader/EnvironmentOverrides.ts +++ b/packages/config/src/config_loader/EnvironmentOverrides.ts @@ -163,6 +163,7 @@ const NAMED_FLUXER_ENV_OVERRIDES: Record = { FLUXER_EMAIL_SMTP_PORT: {path: ['integrations', 'email', 'smtp', 'port'], parse: parseInteger}, FLUXER_EMAIL_SMTP_USERNAME: {path: ['integrations', 'email', 'smtp', 'username']}, FLUXER_EMAIL_SMTP_PASSWORD: {path: ['integrations', 'email', 'smtp', 'password']}, + FLUXER_EMAIL_SMTP_TLS_MODE: {path: ['integrations', 'email', 'smtp', 'tls_mode'], parse: parseSmtpTlsMode}, FLUXER_EMAIL_SMTP_SECURE: {path: ['integrations', 'email', 'smtp', 'secure'], parse: parseBoolean}, FLUXER_LIVEKIT_ENABLED: {path: ['integrations', 'voice', 'enabled'], parse: parseBoolean}, FLUXER_LIVEKIT_API_KEY: {path: ['integrations', 'voice', 'api_key']}, @@ -350,6 +351,12 @@ function parseTagStyle(raw: string): string { throw new Error('must be none or random'); } +function parseSmtpTlsMode(raw: string): string { + const value = raw.trim().toLowerCase(); + if (value === 'implicit' || value === 'starttls' || value === 'opportunistic' || value === 'none') return value; + throw new Error('must be implicit, starttls, opportunistic or none'); +} + function parseJson(raw: string): unknown { try { return JSON.parse(raw); diff --git a/packages/constants/src/SmtpConstants.ts b/packages/constants/src/SmtpConstants.ts new file mode 100644 index 000000000..bd3ec14bf --- /dev/null +++ b/packages/constants/src/SmtpConstants.ts @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +import type {ValueOf} from '@fluxer/constants/src/ValueOf'; + +export const SmtpTlsModes = { + IMPLICIT: 'implicit', + STARTTLS: 'starttls', + OPPORTUNISTIC: 'opportunistic', + NONE: 'none', +} as const; + +export type SmtpTlsMode = ValueOf; + +const SMTP_IMPLICIT_TLS_PORT = 465; + +export function resolveSmtpTlsMode(mode: SmtpTlsMode | null | undefined, port: number): SmtpTlsMode { + if (mode) return mode; + return port === SMTP_IMPLICIT_TLS_PORT ? SmtpTlsModes.IMPLICIT : SmtpTlsModes.STARTTLS; +} + +export function smtpTlsModeFromSecure(secure: boolean | null | undefined): SmtpTlsMode | null { + if (secure == null) return null; + return secure ? SmtpTlsModes.IMPLICIT : SmtpTlsModes.OPPORTUNISTIC; +} diff --git a/packages/schema/src/domains/admin/AdminSchemas.ts b/packages/schema/src/domains/admin/AdminSchemas.ts index 74286204d..9fd37bff8 100644 --- a/packages/schema/src/domains/admin/AdminSchemas.ts +++ b/packages/schema/src/domains/admin/AdminSchemas.ts @@ -7,6 +7,7 @@ import { SystemChannelFlagsDescriptions, } from '@fluxer/constants/src/GuildConstants'; import {LIMIT_KEY_METADATA, LIMIT_KEYS} from '@fluxer/constants/src/LimitConfigMetadata'; +import {SmtpTlsModes} from '@fluxer/constants/src/SmtpConstants'; import {ValidationErrorCodes} from '@fluxer/constants/src/ValidationErrorCodes'; import {ADMIN_ACL_COUNT, AdminAclType} from '@fluxer/schema/src/domains/admin/AdminAclType'; import {AdminArchiveResponseSchema} from '@fluxer/schema/src/domains/admin/AdminArchiveSchemas'; @@ -627,6 +628,16 @@ const InstancePolicyResponse = z.object({ const EmailProviderSchema = z.enum(['smtp', 'none']); +const SmtpTlsModeSchema = createNamedStringLiteralUnion( + [ + [SmtpTlsModes.IMPLICIT, 'IMPLICIT', 'TLS from the first byte, usually on port 465'], + [SmtpTlsModes.STARTTLS, 'STARTTLS', 'Plain connection that must upgrade with STARTTLS, usually on port 587'], + [SmtpTlsModes.OPPORTUNISTIC, 'OPPORTUNISTIC', 'Plain connection upgraded with STARTTLS when the server offers it'], + [SmtpTlsModes.NONE, 'NONE', 'No TLS, even when the server offers STARTTLS'], + ], + 'How the SMTP connection is encrypted', +); + const AttachmentDecayEffectiveResponse = z.object({ enabled: z.boolean(), min_size_mb: z.number().positive(), @@ -675,7 +686,8 @@ const InstanceIntegrationsResponse = z.object({ port: z.number().int().min(1).max(65535).nullable(), username: z.string().nullable(), password_set: z.boolean(), - secure: z.boolean().nullable(), + tls_mode: SmtpTlsModeSchema.nullable().describe('Saved TLS mode, or null to pick one from the port'), + effective_tls_mode: SmtpTlsModeSchema.nullable(), }), disable_new_ip_authorization: z.boolean(), effective_disable_new_ip_authorization: z.boolean(), @@ -789,8 +801,10 @@ export const InstanceConfigUpdateRequest = z.object({ port: z.number().int().min(1).max(65535).nullish(), username: z.string().trim().max(320).nullish(), password: z.string().trim().max(4096).nullish(), - secure: z.boolean().nullish(), + tls_mode: SmtpTlsModeSchema.nullish(), + secure: z.boolean().nullish().describe('Deprecated, use tls_mode'), }) + .register(schemaMetadata, {preserveNullFields: true}) .nullish(), disable_new_ip_authorization: z.boolean().nullish(), }) @@ -847,11 +861,11 @@ export const BrandingAssetUploadRequest = z.object({ export type BrandingAssetUploadRequest = z.infer; export const InstanceEmailSmtpTestRequest = z.object({ - host: z.string().trim().min(1).max(255), - port: z.number().int().min(1).max(65535), - username: z.string().trim().min(1).max(320), - password: z.string().trim().min(1).max(4096), - secure: z.boolean().default(true), + host: z.string().trim().min(1).max(255).nullish(), + port: z.number().int().min(1).max(65535).nullish(), + username: z.string().trim().min(1).max(320).nullish(), + password: z.string().trim().min(1).max(4096).nullish(), + tls_mode: SmtpTlsModeSchema.nullish(), }); export type InstanceEmailSmtpTestRequest = z.infer; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e27b4a611..461b26367 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -820,6 +820,9 @@ importers: fluxer_api/pkgs/email: dependencies: + '@fluxer/constants': + specifier: workspace:* + version: link:../../../packages/constants '@fluxer/i18n': specifier: workspace:* version: link:../../../packages/i18n