From c5453f83e8504e33ab654bd736ce42224109ccf3 Mon Sep 17 00:00:00 2001 From: Hampus Date: Thu, 8 Oct 2026 17:31:45 +0200 Subject: [PATCH] feat(desktop): sign in with the browser without typing a code (#3286) --- .../src/features/app/constants/Endpoints.ts | 1 + .../auth/commands/AuthenticationCommands.ts | 30 +- .../features/auth/flow/AuthLoginLayout.tsx | 9 +- .../flow/DesktopHandoffAccountSelector.tsx | 2 +- .../auth/flow/DesktopHandoffMfaStep.tsx | 8 +- .../auth/flow/HandoffApprovalFlow.module.css | 108 ++- .../auth/flow/HandoffApprovalFlow.tsx | 393 +++++---- .../AuthLoginBrowserStep.module.css | 30 +- .../auth_login_core/AuthLoginBrowserStep.tsx | 772 ++++++++---------- .../auth_login_core/AuthLoginStepTypes.ts | 4 +- .../auth_login_core/useDesktopHandoffFlow.ts | 205 ++++- .../BrowserHandoffDescriptors.ts | 9 +- .../BrowserLoginHandoffTransport.ts | 18 +- .../useBrowserLoginHandoff.test.ts | 15 +- .../browser_handoff/useBrowserLoginHandoff.ts | 63 +- .../src/features/auth/state/AuthFlow.ts | 23 - .../src/features/i18n/locales/ar/messages.po | 262 +++--- .../locales/auto-i18n-reviewed-unchanged.json | 99 +++ .../src/features/i18n/locales/bg/messages.po | 262 +++--- .../src/features/i18n/locales/cs/messages.po | 262 +++--- .../src/features/i18n/locales/da/messages.po | 262 +++--- .../src/features/i18n/locales/de/messages.po | 262 +++--- .../src/features/i18n/locales/el/messages.po | 262 +++--- .../features/i18n/locales/en-GB/messages.po | 264 +++--- .../features/i18n/locales/en-US/messages.po | 262 +++--- .../features/i18n/locales/es-419/messages.po | 262 +++--- .../features/i18n/locales/es-ES/messages.po | 262 +++--- .../src/features/i18n/locales/fi/messages.po | 262 +++--- .../src/features/i18n/locales/fr/messages.po | 262 +++--- .../src/features/i18n/locales/he/messages.po | 262 +++--- .../src/features/i18n/locales/hi/messages.po | 262 +++--- .../src/features/i18n/locales/hr/messages.po | 262 +++--- .../src/features/i18n/locales/hu/messages.po | 262 +++--- .../src/features/i18n/locales/id/messages.po | 262 +++--- .../src/features/i18n/locales/it/messages.po | 262 +++--- .../src/features/i18n/locales/ja/messages.po | 262 +++--- .../src/features/i18n/locales/ko/messages.po | 262 +++--- .../src/features/i18n/locales/lt/messages.po | 262 +++--- .../src/features/i18n/locales/nl/messages.po | 262 +++--- .../src/features/i18n/locales/no/messages.po | 262 +++--- .../src/features/i18n/locales/pl/messages.po | 262 +++--- .../features/i18n/locales/pt-BR/messages.po | 262 +++--- .../src/features/i18n/locales/ro/messages.po | 262 +++--- .../src/features/i18n/locales/ru/messages.po | 262 +++--- .../features/i18n/locales/sv-SE/messages.po | 262 +++--- .../src/features/i18n/locales/th/messages.po | 262 +++--- .../src/features/i18n/locales/tr/messages.po | 262 +++--- .../src/features/i18n/locales/uk/messages.po | 262 +++--- .../src/features/i18n/locales/vi/messages.po | 262 +++--- .../features/i18n/locales/zh-CN/messages.po | 262 +++--- .../features/i18n/locales/zh-TW/messages.po | 262 +++--- .../src/main/BrowserHandoff.test.mjs | 95 ++- fluxer_desktop/src/main/BrowserHandoff.ts | 60 +- fluxer_desktop/src/main/DeepLinks.ts | 29 +- fluxer_desktop/src/main/IpcHandlers.ts | 11 +- .../src/main/WindowTrustedOrigin.test.mjs | 6 + .../desktop_ipc/src/BrowserHandoffContract.ts | 14 +- 57 files changed, 7060 insertions(+), 3854 deletions(-) diff --git a/fluxer_app/src/features/app/constants/Endpoints.ts b/fluxer_app/src/features/app/constants/Endpoints.ts index b29e34cd7..b9a24cdb8 100644 --- a/fluxer_app/src/features/app/constants/Endpoints.ts +++ b/fluxer_app/src/features/app/constants/Endpoints.ts @@ -22,6 +22,7 @@ export const Endpoints = { AUTH_HANDOFF_INFO: (code: string) => `/auth/handoff/${code}/info`, AUTH_HANDOFF_STATUS: (code: string) => `/auth/handoff/${code}/status`, AUTH_HANDOFF_CANCEL: (code: string) => `/auth/handoff/${code}`, + AUTH_HANDOFF_DENY: (code: string) => `/auth/handoff/${code}/deny`, AUTH_PASSKEY_BRIDGE: '/auth/passkey-bridge', AUTH_PASSKEY_BRIDGE_OPTIONS: (ceremonyId: string) => `/auth/passkey-bridge/${ceremonyId}/options`, AUTH_PASSKEY_BRIDGE_COMPLETE: (ceremonyId: string) => `/auth/passkey-bridge/${ceremonyId}/complete`, diff --git a/fluxer_app/src/features/auth/commands/AuthenticationCommands.ts b/fluxer_app/src/features/auth/commands/AuthenticationCommands.ts index 7c5f3243b..91bd9eee2 100644 --- a/fluxer_app/src/features/auth/commands/AuthenticationCommands.ts +++ b/fluxer_app/src/features/auth/commands/AuthenticationCommands.ts @@ -131,14 +131,17 @@ interface RecoveryKitIssued { export type RecoverAccountResponse = (AuthTokenResponse | MfaLoginResponse) & RecoveryKitIssued; +export type DesktopHandoffReturnMethod = 'deep_link' | 'code'; + interface DesktopHandoffInitiateResponse { code: string; expires_at: string; poll_secret?: string; + return_method?: DesktopHandoffReturnMethod; } interface DesktopHandoffStatusResponse { - status: 'pending' | 'completed' | 'expired'; + status: 'pending' | 'completed' | 'denied' | 'expired'; token?: string; user_id?: string; user?: AuthResponseUser | null; @@ -147,6 +150,7 @@ interface DesktopHandoffStatusResponse { interface DesktopHandoffInfoClientInfo { platform?: string | null; os?: string | null; + device?: 'mobile' | 'desktop'; location?: { city?: string | null; region?: string | null; @@ -157,6 +161,11 @@ interface DesktopHandoffInfoClientInfo { export interface DesktopHandoffInfoResponse { status: 'pending' | 'expired'; client_info?: DesktopHandoffInfoClientInfo | null; + return_method?: DesktopHandoffReturnMethod; +} + +interface DesktopHandoffCompleteResponse { + return_url?: string; } export type LoginIdentifier = {email: string; login?: undefined} | {login: string; email?: undefined}; @@ -730,21 +739,34 @@ export async function completeDesktopHandoff({ code, token, userId, + returnMethod, target, }: { code: string; token: string; userId: string; + returnMethod: DesktopHandoffReturnMethod; target: InstanceHTTPTarget; -}): Promise { - await instanceRequest({ +}): Promise { + const response = await instanceRequest({ method: 'POST', path: Endpoints.AUTH_HANDOFF_COMPLETE, target, - body: {code, user_id: userId}, + body: {code, user_id: userId, return_method: returnMethod}, headers: withAuthLocaleHeader({Authorization: token}), auth: 'none', }); + return response.body?.return_url ?? null; +} + +export async function denyDesktopHandoff({code, target}: {code: string; target: InstanceHTTPTarget}): Promise { + await instanceRequest({ + method: 'POST', + path: Endpoints.AUTH_HANDOFF_DENY(code), + target, + headers: withAuthLocaleHeader(), + auth: 'none', + }); } export async function fetchDesktopHandoffInfo({ diff --git a/fluxer_app/src/features/auth/flow/AuthLoginLayout.tsx b/fluxer_app/src/features/auth/flow/AuthLoginLayout.tsx index a854595c3..cd73afae3 100644 --- a/fluxer_app/src/features/auth/flow/AuthLoginLayout.tsx +++ b/fluxer_app/src/features/auth/flow/AuthLoginLayout.tsx @@ -44,7 +44,7 @@ import {AuthClientPreferencesStep} from '@app/features/auth/flow/client_intro/Au import {AuthClientWelcomeStep} from '@app/features/auth/flow/client_intro/AuthClientWelcomeStep'; import {useDesktopClientIntroFlow} from '@app/features/auth/flow/client_intro/useDesktopClientIntroFlow'; import DesktopHandoffAccountSelector from '@app/features/auth/flow/DesktopHandoffAccountSelector'; -import {ConnectedHandoffApprovalFlow} from '@app/features/auth/flow/HandoffApprovalFlow'; +import {HandoffApprovalFlow} from '@app/features/auth/flow/HandoffApprovalFlow'; import IpAuthorizationScreen from '@app/features/auth/flow/IpAuthorizationScreen'; import {useAuthPresentation} from '@app/features/auth/flow/useAuthPresentation'; import {getAuthErrorMessage} from '@app/features/auth/hooks/useAuthForm'; @@ -992,12 +992,7 @@ export const AuthLoginLayout = observer(function AuthLoginLayout({ ); } if (authLoginStep === AuthLoginStep.DESKTOP_HANDOFF_APPROVAL) { - return ( - - ); + return ; } if (authLoginStep === AuthLoginStep.IP_AUTHORIZATION && ipAuthChallenge != null) { const runtimeSnapshot = requireAuthInstanceSnapshot(resolvedAuthRuntimeSnapshot); diff --git a/fluxer_app/src/features/auth/flow/DesktopHandoffAccountSelector.tsx b/fluxer_app/src/features/auth/flow/DesktopHandoffAccountSelector.tsx index f654737be..296b6cd86 100644 --- a/fluxer_app/src/features/auth/flow/DesktopHandoffAccountSelector.tsx +++ b/fluxer_app/src/features/auth/flow/DesktopHandoffAccountSelector.tsx @@ -50,7 +50,7 @@ const DesktopHandoffAccountSelector = observer(function DesktopHandoffAccountSel if (!token) { throw new Error('Failed to generate token'); } - onAccountSelected({token, userId, runtimeSnapshot}); + onAccountSelected({token, userId, runtimeSnapshot, userData: account.userData}); } catch (err) { if (err instanceof SessionExpiredError) { onReLoginAccount(Accounts.getAccount(account.storageKey) ?? account); diff --git a/fluxer_app/src/features/auth/flow/DesktopHandoffMfaStep.tsx b/fluxer_app/src/features/auth/flow/DesktopHandoffMfaStep.tsx index 06f322609..68c9818a0 100644 --- a/fluxer_app/src/features/auth/flow/DesktopHandoffMfaStep.tsx +++ b/fluxer_app/src/features/auth/flow/DesktopHandoffMfaStep.tsx @@ -74,13 +74,7 @@ export const DesktopHandoffMfaStep = observer(function DesktopHandoffMfaStep({ if (isHandoff && isApprovalFlowMode(handoff.mode)) { return ( diff --git a/fluxer_app/src/features/auth/flow/HandoffApprovalFlow.module.css b/fluxer_app/src/features/auth/flow/HandoffApprovalFlow.module.css index 102187ee9..2427c7d61 100644 --- a/fluxer_app/src/features/auth/flow/HandoffApprovalFlow.module.css +++ b/fluxer_app/src/features/auth/flow/HandoffApprovalFlow.module.css @@ -25,39 +25,83 @@ line-height: 1.5; } -.warningBox { - display: flex; - flex-direction: column; - align-items: center; - gap: 0.625rem; - padding: 1.125rem; - background-color: hsla(40, calc(100% * var(--saturation-factor)), 55%, 0.06); - border: 0.125rem solid hsla(40, calc(100% * var(--saturation-factor)), 55%, 0.25); - border-radius: 0.625rem; - margin-bottom: 1rem; -} - -.warningIcon { - color: var(--status-warning); -} - -.warningTitle { - font-size: 1.125rem; - font-weight: 700; - color: var(--text-primary); - margin: 0; -} - -.warningDescription { - font-size: 0.875rem; - color: var(--text-secondary); - line-height: 1.5; - margin: 0; -} - .codeInputSection { margin-bottom: 0.75rem; width: 100%; + text-align: left; +} + +.codeInput { + font-family: var(--font-mono); + font-size: 1.125rem; + letter-spacing: 0.08em; + text-align: center; + text-transform: uppercase; +} + +.code { + display: inline-block; + padding: 0.5rem 0.75rem; + border: 0.0625rem solid var(--background-modifier-accent); + border-radius: 0.5rem; + background: var(--background-tertiary); + color: var(--text-primary); + font-family: var(--font-mono); + font-size: 1.25rem; + font-weight: 700; + letter-spacing: 0.08em; + line-height: 1.1; + overflow-wrap: anywhere; +} + +.matchCheck { + display: flex; + flex-direction: column; + align-items: center; + gap: 0.5rem; + width: 100%; + margin: 0.25rem 0 0.75rem; + font-size: 0.875rem; + color: var(--text-secondary); + line-height: 1.4; +} + +.accountLine { + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: center; + gap: 0.25rem 0.5rem; + width: 100%; + margin-bottom: 0.75rem; + font-size: 0.875rem; + color: var(--text-secondary); +} + +.wrongAccount { + width: 100%; + margin: 0; + padding: 0.625rem 0.75rem; + border: 0.0625rem solid hsla(40, calc(100% * var(--saturation-factor)), 55%, 0.25); + border-radius: 0.5rem; + background-color: hsla(40, calc(100% * var(--saturation-factor)), 55%, 0.06); + color: var(--text-primary); + line-height: 1.4; +} + +.textButton { + padding: 0.125rem 0.25rem; + border: none; + border-radius: 0.25rem; + background: none; + color: var(--text-link); + font: inherit; + font-weight: 600; + cursor: pointer; +} + +.textButton:hover { + text-decoration: underline; } .deviceCard { @@ -129,3 +173,7 @@ .successIcon { color: var(--status-online); } + +.deniedIcon { + color: var(--text-tertiary); +} diff --git a/fluxer_app/src/features/auth/flow/HandoffApprovalFlow.tsx b/fluxer_app/src/features/auth/flow/HandoffApprovalFlow.tsx index c7c77ee53..0d0fdb730 100644 --- a/fluxer_app/src/features/auth/flow/HandoffApprovalFlow.tsx +++ b/fluxer_app/src/features/auth/flow/HandoffApprovalFlow.tsx @@ -1,7 +1,8 @@ // SPDX-License-Identifier: AGPL-3.0-or-later -import type {DesktopHandoffInfoResponse} from '@app/features/auth/commands/AuthenticationCommands'; -import type {DesktopHandoffMode} from '@app/features/auth/flow/auth_login_core/AuthLoginStepTypes'; +import {PRODUCT_NAME} from '@app/features/app/config/I18nDisplayConstants'; +import {DesktopHandoffMode} from '@app/features/auth/flow/auth_login_core/AuthLoginStepTypes'; +import type {DesktopHandoffFlow} from '@app/features/auth/flow/auth_login_core/useDesktopHandoffFlow'; import styles from '@app/features/auth/flow/HandoffApprovalFlow.module.css'; import { CANCEL_DESCRIPTOR, @@ -12,6 +13,7 @@ import {remFromPx} from '@app/features/theme/layout/RemFromPx'; import {Button} from '@app/features/ui/button/Button'; import {Input} from '@app/features/ui/components/form/FormInput'; import {Spinner} from '@app/features/ui/components/Spinner'; +import FocusRing from '@app/features/ui/focus_ring/FocusRing'; import { formatDesktopHandoffCode, isDesktopHandoffCode, @@ -19,13 +21,18 @@ import { } from '@fluxer/schema/src/domains/auth/DesktopHandoffCode'; import {msg} from '@lingui/core/macro'; import {Trans, useLingui} from '@lingui/react/macro'; -import {CheckCircleIcon, ShieldWarningIcon} from '@phosphor-icons/react'; +import {CheckCircleIcon, ProhibitIcon} from '@phosphor-icons/react'; import type React from 'react'; import {useCallback, useState} from 'react'; -const SIGN_IN_CODE_DESCRIPTOR = msg({ - message: 'Sign-in code', - comment: 'Short label in the authentication handoff approval flow. Keep the tone plain and specific.', +const APP_CODE_LABEL_DESCRIPTOR = msg({ + message: 'Code from the {productName} app', + comment: + 'Label of the field in the browser where the user types the 12-character code shown in the desktop or mobile app. productName is the app name, such as Fluxer.', +}); +const SIGN_IN_DESCRIPTOR = msg({ + message: 'Sign in', + comment: 'Button in the browser that approves signing in to the desktop or mobile app that asked for it.', }); function formatLocation(location: { @@ -37,85 +44,159 @@ function formatLocation(location: { return parts.length > 0 ? parts.join(', ') : null; } -interface HandoffApprovalFlowProps { - mode: DesktopHandoffMode; - error: string | null; - clientInfo: DesktopHandoffInfoResponse['client_info']; - onProceedToCodeInput: () => void; - onSubmitCode: (code: string) => void; - onApprove: () => void; - onDeny: () => void; - onRetry: () => void; +function HandoffCode({code}: {code: string}) { + return ( + + {formatDesktopHandoffCode(code)} + + ); } -export function HandoffApprovalFlow({ - mode, - error, - clientInfo, - onProceedToCodeInput, - onSubmitCode, - onApprove, - onDeny, - onRetry, -}: HandoffApprovalFlowProps) { +function ApprovalTitle({handoff}: {handoff: DesktopHandoffFlow}) { + if (handoff.returnMethod === 'deep_link' || handoff.clientInfo?.device === 'desktop') { + return ( + + Sign in to the {PRODUCT_NAME} desktop app + + ); + } + if (handoff.clientInfo?.device === 'mobile') { + return ( + + Sign in to the {PRODUCT_NAME} mobile app + + ); + } + return ( + + Sign in to the {PRODUCT_NAME} app + + ); +} + +function DeviceCard({clientInfo}: {clientInfo: DesktopHandoffFlow['clientInfo']}) { + const platform = clientInfo?.platform ?? null; + const os = clientInfo?.os ?? null; + const location = clientInfo?.location ? formatLocation(clientInfo.location) : null; + if (!platform && !os && !location) { + return null; + } + return ( +
+ {platform ? ( +
+ + Platform + + + {platform} + +
+ ) : null} + {os ? ( +
+ + Operating system + + + {os} + +
+ ) : null} + {location ? ( +
+ + Location + + + {location} + +
+ ) : null} +
+ ); +} + +function AccountLine({handoff, onUseAnotherAccount}: {handoff: DesktopHandoffFlow; onUseAnotherAccount: () => void}) { + const account = handoff.account; + if (account == null) { + return null; + } + const name = account.globalName ?? account.username; + const requestedIdentifier = handoff.requestedIdentifier; + return ( +
+ {requestedIdentifier != null ? ( +

+ + The {PRODUCT_NAME} app asked to sign in as {requestedIdentifier}, but you chose {name}. + +

+ ) : ( + + + Signing in as {name} + + + )} + + + +
+ ); +} + +interface HandoffApprovalFlowProps { + handoff: DesktopHandoffFlow; + onRetry?: () => void; +} + +export function HandoffApprovalFlow({handoff, onRetry}: HandoffApprovalFlowProps) { const {i18n} = useLingui(); const [codeInput, setCodeInput] = useState(''); + const retry = onRetry ?? handoff.retry; + const {submitCode} = handoff; const handleCodeChange = useCallback( (e: React.ChangeEvent) => { const rawCode = parseDesktopHandoffCodeInput(e.target.value); setCodeInput(rawCode); if (isDesktopHandoffCode(rawCode)) { - onSubmitCode(rawCode); + void submitCode(rawCode); } }, - [onSubmitCode], + [submitCode], ); - if (mode === 'warning') { - return ( -
-
- -

- Sign-in request -

-

- - You are about to authorize an app to sign in to your account. Only continue if you initiated this request - from a device you control. - -

-
- -
- ); - } - if (mode === 'code_input') { + if (handoff.mode === DesktopHandoffMode.CODE_INPUT) { return (

- Enter the code + + Enter the code from the {PRODUCT_NAME} app +

- Enter the code shown in the app to continue. + + The {PRODUCT_NAME} app on your other device shows it under Signing in on another device. Only enter a code + from a device you control. +

-
); } - if (mode === 'completing') { - return ( -
-

- Completing sign-in… -

-
- -
-
- ); - } - if (mode === 'done') { + if (handoff.mode === DesktopHandoffMode.DONE) { return (

- Sign-in approved + + You're signed in +

- The app should now be signed in to your account. + {handoff.returnUrl != null ? ( + + Go back to the {PRODUCT_NAME} app. You can close this tab. + + ) : ( + + Go back to the {PRODUCT_NAME} app. It finishes signing in on its own. + + )}

+ {handoff.returnUrl != null ? ( + + ) : null}
); } - if (mode === 'error') { + if (handoff.mode === DesktopHandoffMode.DENIED) { + return ( +
+ +

+ + Sign-in cancelled + +

+

+ + The {PRODUCT_NAME} app was not signed in. You can close this tab. + +

+ +
+ ); + } + if (handoff.mode === DesktopHandoffMode.ERROR) { return (

{i18n._(SOMETHING_WENT_WRONG_DESCRIPTOR)}

- {error ? ( + {handoff.error ? (

- {error} + {handoff.error}

) : null} -
@@ -258,32 +360,3 @@ export function HandoffApprovalFlow({ } return null; } - -interface ConnectedHandoffApprovalFlowProps { - handoff: { - mode: DesktopHandoffMode; - error: string | null; - clientInfo: DesktopHandoffInfoResponse['client_info']; - proceedToCodeInput: () => void; - submitCode: (code: string) => void; - approve: () => void; - deny: () => void; - retry: () => void; - }; -} - -export function ConnectedHandoffApprovalFlow({handoff}: ConnectedHandoffApprovalFlowProps) { - return ( - - ); -} diff --git a/fluxer_app/src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.module.css b/fluxer_app/src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.module.css index 559636c5e..e027fde82 100644 --- a/fluxer_app/src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.module.css +++ b/fluxer_app/src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.module.css @@ -100,6 +100,13 @@ text-align: center; } +.browserStatusTitle { + color: var(--text-primary); + font-size: 1rem; + font-weight: 700; + line-height: 1.25rem; +} + .browserStatusText { color: var(--text-secondary); font-size: 0.875rem; @@ -116,7 +123,7 @@ padding: 1rem 0.75rem; } -.browserManualCode { +.browserCode { max-width: 100%; padding: 0.75rem 0.875rem; border: 0.0625rem solid var(--background-modifier-accent); @@ -140,10 +147,25 @@ font-variant-numeric: tabular-nums; } -.browserTimerExpired { - color: var(--status-danger); - font-size: 0.8125rem; +.browserTextButton { + padding: 0.125rem 0.25rem; + border: none; + border-radius: 0.25rem; + background: none; + color: var(--text-link); + font: inherit; + font-size: 0.875rem; font-weight: 600; + cursor: pointer; +} + +.browserTextButton:hover:not(:disabled) { + text-decoration: underline; +} + +.browserTextButton:disabled { + cursor: default; + opacity: 0.5; } .browserFooter { diff --git a/fluxer_app/src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx b/fluxer_app/src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx index 6723f2853..aab40cda4 100644 --- a/fluxer_app/src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx +++ b/fluxer_app/src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx @@ -4,13 +4,9 @@ import type {RuntimeConfigSnapshot} from '@app/features/app/state/InstanceSnapsh import {resolveSnapshotInstanceDomain} from '@app/features/auth/AccountDisplayUtils'; import loginStyles from '@app/features/auth/components/pages/LoginPage.module.css'; import styles from '@app/features/auth/flow/auth_login_core/AuthLoginBrowserStep.module.css'; -import { - DESKTOP_HANDOFF_EXPIRED_DESCRIPTOR, - DESKTOP_HANDOFF_UNAVAILABLE_DESCRIPTOR, -} from '@app/features/auth/flow/browser_handoff/BrowserHandoffDescriptors'; import { BrowserLoginHandoffAction, - type BrowserLoginHandoffPendingAction, + type BrowserLoginHandoffController, useBrowserLoginHandoff, } from '@app/features/auth/flow/browser_handoff/useBrowserLoginHandoff'; import { @@ -22,6 +18,7 @@ import {useKnownInstances} from '@app/features/auth/flow/instance_selector/useKn import type {LoginSuccessPayload} from '@app/features/auth/state/AuthFlow'; import { BACK_DESCRIPTOR, + CANCEL_DESCRIPTOR, CHANGE_INSTANCE_DESCRIPTOR, COPIED_DESCRIPTOR, COPY_CODE_DESCRIPTOR, @@ -32,12 +29,13 @@ import {remFromPx} from '@app/features/theme/layout/RemFromPx'; import {Button, ButtonVariant} from '@app/features/ui/button/Button'; import {VerifiedConnectionIcon} from '@app/features/ui/components/icons/VerifiedConnectionIcon'; import {Spinner, SpinnerSize} from '@app/features/ui/components/Spinner'; +import FocusRing from '@app/features/ui/focus_ring/FocusRing'; import {SteppedCarousel, SteppedCarouselActions} from '@app/features/ui/stepped_carousel/SteppedCarousel'; import {isDesktop} from '@app/features/ui/utils/NativeUtils'; import {flxElementClassName} from '@app/lib/react'; import FluxerLogoAsset from '@app/media/images/fluxer-logo-color.svg?react'; +import {DesktopHandoffReturnMethod} from '@fluxer/desktop_ipc/src/BrowserHandoffContract'; import {isOfficialInstanceHost, OFFICIAL_INSTANCE_NAME} from '@fluxer/instance_bootstrap/src/OfficialInstance'; -import type {I18n} from '@lingui/core'; import {msg} from '@lingui/core/macro'; import {Trans, useLingui} from '@lingui/react/macro'; import { @@ -47,27 +45,14 @@ import { CheckCircleIcon, ClipboardIcon, GlobeIcon, - PasswordIcon, WarningCircleIcon, } from '@phosphor-icons/react'; import {observer} from 'mobx-react-lite'; -import {type ReactElement, type ReactNode, useCallback, useEffect, useMemo, useState} from 'react'; +import {type ReactElement, type ReactNode, useCallback, useEffect, useRef, useState} from 'react'; -const OPEN_BROWSER_DESCRIPTOR = msg({ - message: 'Open browser', - comment: 'Button label that opens the browser sign-in handoff page.', -}); -const SHOW_CODE_DESCRIPTOR = msg({ - message: 'Show code', - comment: 'Button label that opens the manual browser handoff code fallback.', -}); -const GENERATE_NEW_CODE_DESCRIPTOR = msg({ - message: 'Generate new code', - comment: 'Button label that replaces an expired browser sign-in code with a fresh one.', -}); -const BROWSER_CODE_EXPIRED_DESCRIPTOR = msg({ - message: 'This code expired.', - comment: 'Status shown under the browser sign-in code once its countdown reaches zero.', +const OPEN_BROWSER_AGAIN_DESCRIPTOR = msg({ + message: 'Open browser again', + comment: 'Button in the desktop app that reopens the browser sign-in page while the app waits for the browser.', }); const BROWSER_WAIT_STOPPED_DESCRIPTOR = msg({ message: "Fluxer stopped checking whether the browser approved this sign-in. It didn't lose your code.", @@ -78,6 +63,10 @@ const BROWSER_HANDOFF_UNSUPPORTED_INSTANCE_DESCRIPTOR = msg({ comment: 'Explanation shown when the selected instance advertises no web app endpoint. Instance name is interpolated.', }); +const BROWSER_HANDOFF_FAILED_DESCRIPTOR = msg({ + message: "Couldn't start signing in with your browser.", + comment: 'Shown in the desktop app when the browser sign-in request could not be created.', +}); const logger = new Logger('AuthLoginBrowserStep'); @@ -86,20 +75,20 @@ export function resolveShouldOfferBrowserStep(): boolean { } export const BrowserHandoffStep = Object.freeze({ - READY: 'ready', WAITING: 'waiting', - MANUAL: 'manual', + OTHER_DEVICE: 'other_device', + PROBLEM: 'problem', } as const); export type BrowserHandoffStep = (typeof BrowserHandoffStep)[keyof typeof BrowserHandoffStep]; const BROWSER_STEPS: ReadonlyArray = Object.freeze([ - BrowserHandoffStep.READY, BrowserHandoffStep.WAITING, - BrowserHandoffStep.MANUAL, + BrowserHandoffStep.OTHER_DEVICE, + BrowserHandoffStep.PROBLEM, ]); -type ManualReturnStep = typeof BrowserHandoffStep.READY | typeof BrowserHandoffStep.WAITING; +type RetryStep = typeof BrowserHandoffStep.WAITING | typeof BrowserHandoffStep.OTHER_DEVICE; interface BrowserInstanceIdentity { readonly domain: string; @@ -138,331 +127,179 @@ function resolveBrowserInstanceIdentity({ return {domain, isOfficial, name: resolveInstanceLabel(findKnownInstanceName(domain, knownInstances), domain)}; } -function resolveManualReturnStep(step: BrowserHandoffStep): ManualReturnStep { - if (step === BrowserHandoffStep.WAITING) { - return BrowserHandoffStep.WAITING; +function resolveSignInAddress(webAppEndpoint: string): string { + try { + const url = new URL(webAppEndpoint); + return `${url.host}${url.pathname.replace(/\/+$/u, '')}/login?handoff=1`; + } catch { + return `${webAppEndpoint}/login?handoff=1`; } - return BrowserHandoffStep.READY; } -function renderCopyCodeIcon(copied: boolean): ReactNode { - if (copied) { - return ( - - ); - } +function HandoffCode({code}: {code: string}): ReactElement { return ( - + + {code} + ); } -function resolveCopyCodeLabel(i18n: I18n, copied: boolean): string { - if (copied) { - return i18n._(COPIED_DESCRIPTOR); - } - return i18n._(COPY_CODE_DESCRIPTOR); -} - -interface BrowserStepActionsProps { - readonly activeBackAction: () => void; - readonly canStart: boolean; - readonly copied: boolean; - readonly copyCode: () => void; - readonly hasCode: boolean; - readonly hasStoppedWaiting: boolean; - readonly isExpired: boolean; - readonly isGenerating: boolean; - readonly onOpenBrowser: () => void; - readonly onRegenerateCode: () => void; - readonly onResumeWaiting: () => void; - readonly onShowCode: () => void; - readonly pendingAction: BrowserLoginHandoffPendingAction; - readonly showBackButton: boolean; - readonly step: BrowserHandoffStep; -} - -function BrowserStepActions({ - activeBackAction, - canStart, - copied, - copyCode, - hasCode, - hasStoppedWaiting, - isExpired, - isGenerating, - onOpenBrowser, - onRegenerateCode, - onResumeWaiting, - onShowCode, - pendingAction, - showBackButton, - step, -}: BrowserStepActionsProps): ReactElement { - const {i18n} = useLingui(); - const handoffButtonState = (action: BrowserLoginHandoffAction): {disabled: boolean; submitting: boolean} => ({ - disabled: !canStart || (isGenerating && pendingAction !== action), - submitting: isGenerating && pendingAction === action, - }); - const regenerateButton = ( - - ); - const showCodeButton = ( - - ); - const resumeButton = hasStoppedWaiting ? ( - - ) : null; - let primaryActions: ReactNode; - if (step === BrowserHandoffStep.MANUAL) { - primaryActions = ( - <> - {isExpired ? ( - regenerateButton - ) : ( - - )} - {resumeButton} - - ); - } else if (step === BrowserHandoffStep.WAITING) { - primaryActions = ( - <> - {showCodeButton} - {resumeButton} - - ); - } else { - primaryActions = ( - <> - {showCodeButton} - - - ); - } - const renderBackAction = (): ReactNode => { - if (!showBackButton) { - return null; - } - return ( - - ); - }; - return ( - - {renderBackAction()} - {primaryActions} - - ); -} - -interface BrowserStepContentProps { - readonly canStart: boolean; - readonly displayCode: string; - readonly hasStoppedWaiting: boolean; +interface WaitingContentProps { + readonly handoff: BrowserLoginHandoffController; readonly instanceName: string; - readonly isExpired: boolean; - readonly remainingSeconds: number | null; - readonly step: BrowserHandoffStep; + readonly onOtherDevice: () => void; } -function renderManualCodeTimer(i18n: I18n, isExpired: boolean, remainingSeconds: number | null): ReactNode { - if (remainingSeconds == null) { - return null; - } - if (isExpired) { - return ( - - {i18n._(BROWSER_CODE_EXPIRED_DESCRIPTOR)} - - ); - } +function WaitingContent({handoff, instanceName, onOtherDevice}: WaitingContentProps): ReactElement { + const {i18n} = useLingui(); + const showCode = handoff.returnMethod === DesktopHandoffReturnMethod.CODE && handoff.hasCode; return ( - - Expires in {remainingSeconds}s - + {handoff.hasStoppedWaiting ? ( + + ) : ( + + )} + + + Continue in your browser + + + + {handoff.hasStoppedWaiting ? ( + i18n._(BROWSER_WAIT_STOPPED_DESCRIPTOR) + ) : showCode ? ( + + Sign in to {instanceName} in your browser, and check that it shows this code: + + ) : ( + + Sign in to {instanceName} in your browser and confirm. This app finishes signing in on its own. + + )} + + {showCode && !handoff.hasStoppedWaiting ? : null} + + + + ); } -function BrowserStepContent({ - canStart, - displayCode, - hasStoppedWaiting, - instanceName, - isExpired, - remainingSeconds, - step, -}: BrowserStepContentProps): ReactElement { +function OtherDeviceContent({handoff, signInAddress}: {handoff: BrowserLoginHandoffController; signInAddress: string}) { const {i18n} = useLingui(); - if (step === BrowserHandoffStep.READY) { - return ( - - {canStart ? ( - - ) : ( - - )} - - {canStart ? ( - Open your browser to finish signing in. - ) : ( - i18n._(BROWSER_HANDOFF_UNSUPPORTED_INSTANCE_DESCRIPTOR, {instanceName}) - )} - - - ); - } - if (step === BrowserHandoffStep.WAITING) { - return ( - - {hasStoppedWaiting ? ( - - ) : ( - - )} - - {hasStoppedWaiting ? i18n._(BROWSER_WAIT_STOPPED_DESCRIPTOR) : Waiting for browser approval.} - - - ); - } + const remainingSeconds = handoff.remainingSeconds; return ( - - {displayCode} - - {renderManualCodeTimer(i18n, isExpired, remainingSeconds)} + + Enter this code in your browser + + + + + On your other device, sign in at {signInAddress} and enter this code when asked. + + + {handoff.hasCode ? ( + + ) : ( + + )} + + {remainingSeconds == null ? ' ' : Expires in {remainingSeconds}s} + + {handoff.hasStoppedWaiting ? ( + + {i18n._(BROWSER_WAIT_STOPPED_DESCRIPTOR)} + + ) : null} ); } +function ProblemContent({message}: {message: string}): ReactElement { + return ( + + + + {message} + + + ); +} + +function ButtonIcon({icon}: {icon: 'open' | 'retry' | 'back' | 'copy' | 'copied'}): ReactElement { + const props = {size: remFromPx(16), weight: 'bold' as const}; + switch (icon) { + case 'open': + return ; + case 'retry': + return ; + case 'back': + return ; + case 'copy': + return ; + case 'copied': + return ; + } +} + interface AuthLoginBrowserStepProps { readonly extraTopContent?: ReactNode; readonly prefillIdentifier?: string | null; @@ -489,89 +326,86 @@ export const AuthLoginBrowserStep = observer(function AuthLoginBrowserStep({ showBackButton = true, }: AuthLoginBrowserStepProps) { const {i18n} = useLingui(); - const [step, setStep] = useState(BrowserHandoffStep.READY); - const [manualReturnStep, setManualReturnStep] = useState(BrowserHandoffStep.READY); + const [step, setStep] = useState(BrowserHandoffStep.WAITING); + const [retryStep, setRetryStep] = useState(BrowserHandoffStep.WAITING); const knownInstances = useKnownInstances(); const instanceIdentity = resolveBrowserInstanceIdentity({snapshot: runtimeSnapshot, knownInstances}); - const handoffMessages = useMemo( - () => ({ - desktopHandoffUnavailable: DESKTOP_HANDOFF_UNAVAILABLE_DESCRIPTOR, - expired: DESKTOP_HANDOFF_EXPIRED_DESCRIPTOR, - }), - [], - ); - const handleExpired = useCallback(() => { - setManualReturnStep(BrowserHandoffStep.READY); - setStep(BrowserHandoffStep.READY); + const handleEnded = useCallback(() => { + setStep(BrowserHandoffStep.PROBLEM); }, []); - const { - canStart, - copied, - copyCode, - displayCode, - error, - expireCurrentSession, - hasCode, - hasStoppedWaiting, - isCurrentSessionExpired, - isExpired, - isGenerating, - openBrowser, - pendingAction, - regenerateCode, - remainingSeconds, - resumeWaiting, - showManualCode, - } = useBrowserLoginHandoff({ + const handoff = useBrowserLoginHandoff({ runtimeSnapshot, prefillIdentifier, - messages: handoffMessages, - onExpired: handleExpired, + onEnded: handleEnded, onSuccess, }); + const {canStart, openBrowser, regenerateCode, reset, showManualCode} = handoff; + const showProblem = useCallback((from: RetryStep) => { + setRetryStep(from); + setStep(BrowserHandoffStep.PROBLEM); + }, []); const handleOpenBrowser = useCallback(() => { + setStep(BrowserHandoffStep.WAITING); openBrowser() .then((opened) => { - if (opened) { - setStep(BrowserHandoffStep.WAITING); + if (!opened) { + showProblem(BrowserHandoffStep.WAITING); } }) .catch((caught) => { logger.error('Failed to open the browser sign-in page', caught); }); - }, [openBrowser]); - const handleShowCode = useCallback(() => { - const returnStep = resolveManualReturnStep(step); + }, [openBrowser, showProblem]); + const handleOtherDevice = useCallback(() => { + setRetryStep(BrowserHandoffStep.OTHER_DEVICE); + setStep(BrowserHandoffStep.OTHER_DEVICE); showManualCode() .then((shown) => { - if (shown) { - setManualReturnStep(returnStep); - setStep(BrowserHandoffStep.MANUAL); + if (!shown) { + showProblem(BrowserHandoffStep.OTHER_DEVICE); } }) .catch((caught) => { - logger.error('Failed to reveal the browser sign-in code', caught); + logger.error('Failed to show the browser sign-in code', caught); }); - }, [showManualCode, step]); - const handleRegenerateCode = useCallback(() => { - regenerateCode() - .then((generated) => { - if (!generated) { - setStep(BrowserHandoffStep.READY); - } - }) - .catch((caught) => { - logger.error('Failed to regenerate the browser sign-in code', caught); - }); - }, [regenerateCode]); - const handleBackFromManualCode = useCallback(() => { - if (isCurrentSessionExpired()) { - expireCurrentSession(); + }, [showManualCode, showProblem]); + const handleRetry = useCallback(() => { + if (retryStep === BrowserHandoffStep.OTHER_DEVICE) { + setStep(BrowserHandoffStep.OTHER_DEVICE); + regenerateCode() + .then((generated) => { + if (!generated) { + showProblem(BrowserHandoffStep.OTHER_DEVICE); + } + }) + .catch((caught) => { + logger.error('Failed to create a new browser sign-in code', caught); + }); return; } - setStep(manualReturnStep); - }, [expireCurrentSession, isCurrentSessionExpired, manualReturnStep]); - const activeBackAction = step === BrowserHandoffStep.MANUAL ? handleBackFromManualCode : onBack; + handleOpenBrowser(); + }, [handleOpenBrowser, regenerateCode, retryStep, showProblem]); + const handleCancel = useCallback(() => { + reset(); + onBack(); + }, [onBack, reset]); + const handleBackToWaiting = useCallback(() => { + setRetryStep(BrowserHandoffStep.WAITING); + setStep(BrowserHandoffStep.WAITING); + }, []); + const startedRef = useRef(false); + useEffect(() => { + if (startedRef.current) { + return; + } + startedRef.current = true; + if (canStart) { + handleOpenBrowser(); + } else { + setStep(BrowserHandoffStep.PROBLEM); + } + }, [canStart, handleOpenBrowser]); + const activeBackAction = step === BrowserHandoffStep.OTHER_DEVICE ? handleBackToWaiting : handleCancel; useEffect(() => { if (onBackActionChange == null) { return; @@ -579,6 +413,124 @@ export const AuthLoginBrowserStep = observer(function AuthLoginBrowserStep({ onBackActionChange(activeBackAction); return () => onBackActionChange(null); }, [activeBackAction, onBackActionChange]); + const problemMessage = canStart + ? (handoff.error ?? i18n._(BROWSER_HANDOFF_FAILED_DESCRIPTOR)) + : i18n._(BROWSER_HANDOFF_UNSUPPORTED_INSTANCE_DESCRIPTOR, {instanceName: instanceIdentity.name}); + const isOpening = handoff.isGenerating && handoff.pendingAction === BrowserLoginHandoffAction.OPEN_BROWSER; + const isMakingCode = handoff.isGenerating && handoff.pendingAction === BrowserLoginHandoffAction.SHOW_CODE; + let content: ReactNode; + let actions: ReactNode; + if (step === BrowserHandoffStep.OTHER_DEVICE) { + content = ( + + ); + actions = ( + <> + {showBackButton ? ( + + ) : null} + {handoff.hasStoppedWaiting ? ( + + ) : ( + + )} + + ); + } else if (step === BrowserHandoffStep.PROBLEM) { + content = ( + + ); + actions = ( + <> + {showBackButton ? ( + + ) : null} + {canStart ? ( + + ) : null} + + ); + } else { + content = ( + + ); + actions = ( + <> + + {handoff.hasStoppedWaiting ? ( + + ) : ( + + )} + + ); + } return ( )} - {error != null && error.length > 0 ? ( -
- {error} -
- ) : null} - - + {content} + + {actions} +
diff --git a/fluxer_app/src/features/auth/flow/auth_login_core/AuthLoginStepTypes.ts b/fluxer_app/src/features/auth/flow/auth_login_core/AuthLoginStepTypes.ts index c95e85eb6..333ae2c25 100644 --- a/fluxer_app/src/features/auth/flow/auth_login_core/AuthLoginStepTypes.ts +++ b/fluxer_app/src/features/auth/flow/auth_login_core/AuthLoginStepTypes.ts @@ -6,12 +6,12 @@ export const DesktopHandoffMode = Object.freeze({ IDLE: 'idle', SELECTING: 'selecting', LOGIN: 'login', - WARNING: 'warning', CODE_INPUT: 'code_input', FETCHING_INFO: 'fetching_info', APPROVING: 'approving', COMPLETING: 'completing', DONE: 'done', + DENIED: 'denied', ERROR: 'error', } as const); @@ -19,12 +19,12 @@ export type DesktopHandoffMode = (typeof DesktopHandoffMode)[keyof typeof Deskto export function isApprovalFlowMode(mode: DesktopHandoffMode): boolean { switch (mode) { - case DesktopHandoffMode.WARNING: case DesktopHandoffMode.CODE_INPUT: case DesktopHandoffMode.FETCHING_INFO: case DesktopHandoffMode.APPROVING: case DesktopHandoffMode.COMPLETING: case DesktopHandoffMode.DONE: + case DesktopHandoffMode.DENIED: case DesktopHandoffMode.ERROR: return true; case DesktopHandoffMode.IDLE: diff --git a/fluxer_app/src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts b/fluxer_app/src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts index beaab4c28..fbca7f098 100644 --- a/fluxer_app/src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts +++ b/fluxer_app/src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts @@ -1,18 +1,31 @@ // SPDX-License-Identifier: AGPL-3.0-or-later +import {PRODUCT_NAME} from '@app/features/app/config/I18nDisplayConstants'; import type {RuntimeConfigSnapshot} from '@app/features/app/state/InstanceSnapshotStore'; -import type {DesktopHandoffInfoResponse} from '@app/features/auth/commands/AuthenticationCommands'; +import type { + DesktopHandoffInfoResponse, + DesktopHandoffReturnMethod, +} from '@app/features/auth/commands/AuthenticationCommands'; import * as AuthenticationCommands from '@app/features/auth/commands/AuthenticationCommands'; import {DesktopHandoffMode} from '@app/features/auth/flow/auth_login_core/AuthLoginStepTypes'; +import type {UserData} from '@app/features/auth/state/AccountStorage'; import {type InstanceHTTPTarget, instanceTargetFromSnapshot} from '@app/features/platform/transport/InstanceHTTP'; +import {Logger} from '@app/features/platform/utils/AppLogger'; import * as FormUtils from '@app/lib/forms'; +import {formatDesktopHandoffCode, parseDesktopHandoffCode} from '@fluxer/schema/src/domains/auth/DesktopHandoffCode'; import {msg} from '@lingui/core/macro'; import {useLingui} from '@lingui/react/macro'; import {useCallback, useMemo, useRef, useState} from 'react'; -const INVALID_OR_EXPIRED_CODE_PLEASE_TRY_AGAIN_DESCRIPTOR = msg({ - message: 'Invalid or expired code. Try again.', - comment: 'Desktop handoff flow error shown when the entered pairing code is invalid or expired.', +const HANDOFF_REQUEST_EXPIRED_DESCRIPTOR = msg({ + message: 'This sign-in request expired or was cancelled in the {productName} app. Start again from the app.', + comment: + 'Error in the browser when the sign-in request from the desktop app no longer exists, because it expired or the app cancelled it. productName is the app name, such as Fluxer.', +}); +const TYPED_CODE_NOT_FOUND_DESCRIPTOR = msg({ + message: 'That code is not valid on {instanceHost}. Check the code in the {productName} app and try again.', + comment: + 'Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer.', }); const COULDN_T_VERIFY_THAT_CODE_PLEASE_TRY_AGAIN_DESCRIPTOR = msg({ message: "Couldn't verify that code. Try again.", @@ -22,11 +35,66 @@ const COULDN_T_COMPLETE_SIGN_IN_PLEASE_TRY_AGAIN_DESCRIPTOR = msg({ message: "Couldn't complete sign-in. Try again.", comment: 'Desktop handoff flow error shown when finalizing the sign-in fails after a valid code.', }); +const INSTANCE_MISMATCH_DESCRIPTOR = msg({ + message: + 'This account is on {accountHost}, but the {productName} app is signing in to {requestHost}. Choose an account on {requestHost}.', + comment: + 'Error in the browser when the chosen account belongs to a different server than the app that asked to sign in. accountHost and requestHost are server addresses. productName is the app name, such as Fluxer.', +}); + +const logger = new Logger('useDesktopHandoffFlow'); + +export const DesktopHandoffCodeSource = Object.freeze({ + LINK: 'link', + TYPED: 'typed', +} as const); + +export type DesktopHandoffCodeSource = (typeof DesktopHandoffCodeSource)[keyof typeof DesktopHandoffCodeSource]; export function isHandoffRequest(params: URLSearchParams): boolean { return params.get('handoff') === '1' || params.get('desktop_handoff') === '1'; } +export interface DesktopHandoffRequest { + readonly code: string | null; + readonly apiOrigin: string | null; + readonly identifier: string | null; +} + +function readOrigin(value: string | null | undefined): string | null { + if (value == null || value.length === 0) { + return null; + } + try { + return new URL(value).origin; + } catch { + return null; + } +} + +export function readDesktopHandoffRequest(search: string): DesktopHandoffRequest { + const params = new URLSearchParams(search); + const code = parseDesktopHandoffCode(params.get('code') ?? ''); + return { + code: code == null ? null : formatDesktopHandoffCode(code), + apiOrigin: readOrigin(params.get('api')), + identifier: params.get('email') ?? params.get('login'), + }; +} + +function hostOf(endpoint: string): string { + try { + return new URL(endpoint).host; + } catch { + return endpoint; + } +} + +function matchesIdentifier(identifier: string, userData: UserData): boolean { + const wanted = identifier.trim().toLowerCase(); + return wanted === userData.username.toLowerCase() || wanted === userData.email?.toLowerCase(); +} + interface Options { enabled: boolean; hasStoredAccounts: boolean; @@ -37,6 +105,7 @@ export interface DesktopHandoffAccountCredentials { readonly token: string; readonly userId: string; readonly runtimeSnapshot: RuntimeConfigSnapshot; + readonly userData?: UserData; } export function useDesktopHandoffFlow({enabled, hasStoredAccounts, initialMode}: Options) { @@ -46,35 +115,26 @@ export function useDesktopHandoffFlow({enabled, hasStoredAccounts, initialMode}: if (initialMode) return initialMode; return hasStoredAccounts ? DesktopHandoffMode.SELECTING : DesktopHandoffMode.LOGIN; }, [enabled, hasStoredAccounts, initialMode]); + const [request] = useState(() => readDesktopHandoffRequest(window.location.search)); const [mode, setMode] = useState(derivedInitial); const [error, setError] = useState(null); const [clientInfo, setClientInfo] = useState(null); const [handoffCode, setHandoffCode] = useState(null); + const [returnMethod, setReturnMethod] = useState(null); + const [codeSource, setCodeSource] = useState(null); + const [returnUrl, setReturnUrl] = useState(null); + const [account, setAccount] = useState(null); const tokenRef = useRef(null); const userIdRef = useRef(null); const operationRevisionRef = useRef(0); const targetRef = useRef(null); - const start = useCallback( - ({token, userId, runtimeSnapshot}: DesktopHandoffAccountCredentials) => { - if (!enabled) return; - operationRevisionRef.current += 1; - tokenRef.current = token; - userIdRef.current = userId; - targetRef.current = instanceTargetFromSnapshot(runtimeSnapshot); - setError(null); - setHandoffCode(null); - setClientInfo(null); - setMode(DesktopHandoffMode.WARNING); - }, - [enabled], - ); - const proceedToCodeInput = useCallback(() => { - operationRevisionRef.current += 1; - setMode(DesktopHandoffMode.CODE_INPUT); - setError(null); + const linkCodeUsedRef = useRef(false); + const failWith = useCallback((message: string) => { + setMode(DesktopHandoffMode.ERROR); + setError(message); }, []); - const submitCode = useCallback( - async (code: string) => { + const lookUpCode = useCallback( + async (code: string, source: DesktopHandoffCodeSource) => { const token = tokenRef.current; const target = targetRef.current; if (token == null || token.length === 0 || target == null) return; @@ -82,61 +142,118 @@ export function useDesktopHandoffFlow({enabled, hasStoredAccounts, initialMode}: setMode(DesktopHandoffMode.FETCHING_INFO); setError(null); setHandoffCode(code); + setCodeSource(source); try { const info = await AuthenticationCommands.fetchDesktopHandoffInfo({code, token, target}); if (operationRevision !== operationRevisionRef.current) return; if (info.status === 'expired') { - setMode(DesktopHandoffMode.ERROR); - setError(i18n._(INVALID_OR_EXPIRED_CODE_PLEASE_TRY_AGAIN_DESCRIPTOR)); + failWith( + source === DesktopHandoffCodeSource.LINK + ? i18n._(HANDOFF_REQUEST_EXPIRED_DESCRIPTOR, {productName: PRODUCT_NAME}) + : i18n._(TYPED_CODE_NOT_FOUND_DESCRIPTOR, { + instanceHost: hostOf(target.apiEndpoint), + productName: PRODUCT_NAME, + }), + ); return; } setClientInfo(info.client_info); + setReturnMethod( + source === DesktopHandoffCodeSource.LINK && info.return_method === 'deep_link' ? 'deep_link' : 'code', + ); setMode(DesktopHandoffMode.APPROVING); } catch (e) { if (operationRevision !== operationRevisionRef.current) return; - setMode(DesktopHandoffMode.ERROR); - setError( + failWith( e && typeof e === 'object' && 'body' in e ? FormUtils.extractErrorMessage(i18n, e) : i18n._(COULDN_T_VERIFY_THAT_CODE_PLEASE_TRY_AGAIN_DESCRIPTOR), ); } }, - [i18n], + [failWith, i18n], ); + const start = useCallback( + ({token, userId, runtimeSnapshot, userData}: DesktopHandoffAccountCredentials) => { + if (!enabled) return; + operationRevisionRef.current += 1; + tokenRef.current = token; + userIdRef.current = userId; + targetRef.current = instanceTargetFromSnapshot(runtimeSnapshot); + setAccount(userData ?? null); + setError(null); + setHandoffCode(null); + setClientInfo(null); + setReturnMethod(null); + setReturnUrl(null); + const accountOrigin = readOrigin(runtimeSnapshot.apiEndpoint); + if (request.apiOrigin != null && accountOrigin != null && request.apiOrigin !== accountOrigin) { + failWith( + i18n._(INSTANCE_MISMATCH_DESCRIPTOR, { + accountHost: hostOf(accountOrigin), + requestHost: hostOf(request.apiOrigin), + productName: PRODUCT_NAME, + }), + ); + return; + } + if (request.code != null && !linkCodeUsedRef.current) { + linkCodeUsedRef.current = true; + void lookUpCode(request.code, DesktopHandoffCodeSource.LINK); + return; + } + setMode(DesktopHandoffMode.CODE_INPUT); + }, + [enabled, failWith, i18n, lookUpCode, request], + ); + const submitCode = useCallback((code: string) => lookUpCode(code, DesktopHandoffCodeSource.TYPED), [lookUpCode]); const approve = useCallback(async () => { const token = tokenRef.current; const userId = userIdRef.current; const target = targetRef.current; - if (!handoffCode || !token || !userId || target == null) return; + if (!handoffCode || !token || !userId || target == null || returnMethod == null) return; const operationRevision = ++operationRevisionRef.current; setMode(DesktopHandoffMode.COMPLETING); setError(null); try { - await AuthenticationCommands.completeDesktopHandoff({ + const completedReturnUrl = await AuthenticationCommands.completeDesktopHandoff({ code: handoffCode, token, userId, + returnMethod, target, }); if (operationRevision !== operationRevisionRef.current) return; + setReturnUrl(completedReturnUrl); setMode(DesktopHandoffMode.DONE); + if (completedReturnUrl != null) { + window.location.assign(completedReturnUrl); + } } catch (e) { if (operationRevision !== operationRevisionRef.current) return; - setMode(DesktopHandoffMode.ERROR); - setError( + failWith( e && typeof e === 'object' && 'body' in e ? FormUtils.extractErrorMessage(i18n, e) : i18n._(COULDN_T_COMPLETE_SIGN_IN_PLEASE_TRY_AGAIN_DESCRIPTOR), ); } - }, [handoffCode, i18n]); + }, [failWith, handoffCode, i18n, returnMethod]); const deny = useCallback(() => { + const target = targetRef.current; + const code = handoffCode; operationRevisionRef.current += 1; - setHandoffCode(null); setClientInfo(null); - setMode(DesktopHandoffMode.CODE_INPUT); - }, []); + setMode(DesktopHandoffMode.DENIED); + if (code == null || target == null) return; + AuthenticationCommands.denyDesktopHandoff({code, target}).catch((caught) => { + logger.warn('Failed to tell the server that the sign-in request was declined', caught); + }); + }, [handoffCode]); + const reopenApp = useCallback(() => { + if (returnUrl != null) { + window.location.assign(returnUrl); + } + }, [returnUrl]); const switchToLogin = useCallback(() => { operationRevisionRef.current += 1; setMode(DesktopHandoffMode.LOGIN); @@ -147,22 +264,34 @@ export function useDesktopHandoffFlow({enabled, hasStoredAccounts, initialMode}: setError(null); setHandoffCode(null); setClientInfo(null); + setReturnMethod(null); + setReturnUrl(null); + setAccount(null); tokenRef.current = null; userIdRef.current = null; targetRef.current = null; setMode(hasStoredAccounts ? DesktopHandoffMode.SELECTING : DesktopHandoffMode.LOGIN); }, [hasStoredAccounts]); + const isWrongAccount = + request.identifier != null && account != null && !matchesIdentifier(request.identifier, account); return { mode, error, clientInfo, handoffCode, + codeSource, + returnMethod, + returnUrl, + account, + requestedIdentifier: isWrongAccount ? request.identifier : null, start, - proceedToCodeInput, submitCode, approve, deny, + reopenApp, switchToLogin, retry, }; } + +export type DesktopHandoffFlow = ReturnType; diff --git a/fluxer_app/src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts b/fluxer_app/src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts index e46faeff7..80bf36ab3 100644 --- a/fluxer_app/src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts +++ b/fluxer_app/src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts @@ -7,6 +7,11 @@ export const DESKTOP_HANDOFF_UNAVAILABLE_DESCRIPTOR = msg({ comment: 'Error shown when the browser sign-in handoff cannot run in the current environment.', }); export const DESKTOP_HANDOFF_EXPIRED_DESCRIPTOR = msg({ - message: 'That sign-in code expired. Try again.', - comment: 'Error shown when a browser sign-in handoff code expires before it is approved.', + message: 'The sign-in request expired before your browser approved it.', + comment: + 'Error shown in the desktop app when a browser sign-in request expires before it is approved in the browser.', +}); +export const DESKTOP_HANDOFF_DENIED_DESCRIPTOR = msg({ + message: 'The sign-in was cancelled in your browser.', + comment: 'Error shown in the desktop app when the user pressed Cancel on the browser sign-in page.', }); diff --git a/fluxer_app/src/features/auth/flow/browser_handoff/BrowserLoginHandoffTransport.ts b/fluxer_app/src/features/auth/flow/browser_handoff/BrowserLoginHandoffTransport.ts index 3d9644416..a00fbf38d 100644 --- a/fluxer_app/src/features/auth/flow/browser_handoff/BrowserLoginHandoffTransport.ts +++ b/fluxer_app/src/features/auth/flow/browser_handoff/BrowserLoginHandoffTransport.ts @@ -5,7 +5,7 @@ import type {UserData} from '@app/features/auth/state/AccountStorage'; import type {InstanceHTTPTarget} from '@app/features/platform/transport/InstanceHTTP'; import {getElectronAPI} from '@app/features/ui/utils/NativeUtils'; import type {DesktopHandoffAPI} from '@fluxer/desktop_ipc/src/BrowserHandoffContract'; -import {DesktopHandoffStatus} from '@fluxer/desktop_ipc/src/BrowserHandoffContract'; +import {DesktopHandoffReturnMethod, DesktopHandoffStatus} from '@fluxer/desktop_ipc/src/BrowserHandoffContract'; export interface BrowserLoginHandoffTarget { readonly webAppEndpoint: string; @@ -16,6 +16,7 @@ export interface BrowserLoginHandoffSession { readonly code: string; readonly expiresAt: string; readonly pollSecret: string | null; + readonly returnMethod: DesktopHandoffReturnMethod; readonly target: BrowserLoginHandoffTarget; } @@ -47,6 +48,9 @@ function normalizeHandoffStatus(status: string): DesktopHandoffStatus { if (status === DesktopHandoffStatus.EXPIRED) { return DesktopHandoffStatus.EXPIRED; } + if (status === DesktopHandoffStatus.DENIED) { + return DesktopHandoffStatus.DENIED; + } return DesktopHandoffStatus.PENDING; } @@ -55,7 +59,13 @@ function createRendererHandoffTransport(): BrowserLoginHandoffTransport { kind: BrowserLoginHandoffTransportKind.RENDERER, initiate: async (target) => { const result = await AuthenticationCommands.initiateDesktopHandoff(target.instance); - return {code: result.code, expiresAt: result.expires_at, pollSecret: result.poll_secret ?? null, target}; + return { + code: result.code, + expiresAt: result.expires_at, + pollSecret: result.poll_secret ?? null, + returnMethod: DesktopHandoffReturnMethod.CODE, + target, + }; }, status: async (session) => { const result = await AuthenticationCommands.pollDesktopHandoffStatus( @@ -86,6 +96,10 @@ function createIpcHandoffTransport(api: DesktopHandoffAPI): BrowserLoginHandoffT code: session.code, expiresAt: session.expiresAt, pollSecret: null, + returnMethod: + session.returnMethod === DesktopHandoffReturnMethod.DEEP_LINK + ? DesktopHandoffReturnMethod.DEEP_LINK + : DesktopHandoffReturnMethod.CODE, target: {webAppEndpoint: session.instance.webAppEndpoint, instance: target.instance}, }; }, diff --git a/fluxer_app/src/features/auth/flow/browser_handoff/useBrowserLoginHandoff.test.ts b/fluxer_app/src/features/auth/flow/browser_handoff/useBrowserLoginHandoff.test.ts index 7dc08faa4..d2fcf034b 100644 --- a/fluxer_app/src/features/auth/flow/browser_handoff/useBrowserLoginHandoff.test.ts +++ b/fluxer_app/src/features/auth/flow/browser_handoff/useBrowserLoginHandoff.test.ts @@ -88,6 +88,7 @@ function createDesktopHandoffAPI(): DesktopHandoffAPI & { instance, code: CODE, expiresAt: new Date(Date.now() + 300_000).toISOString(), + returnMethod: 'deep_link', }; return session; }, @@ -107,17 +108,17 @@ let root: Root; let controller: Controller | null = null; function Probe({ - onExpired, + onEnded, onSuccess, runtimeSnapshot, }: { - onExpired: () => void; + onEnded: () => void; onSuccess: (payload: {token: string; userId: string}) => Promise | void; runtimeSnapshot: typeof RUNTIME_SNAPSHOT; }) { controller = useBrowserLoginHandoff({ runtimeSnapshot, - onExpired, + onEnded, onSuccess, }); return null; @@ -133,10 +134,10 @@ function requireController(): Controller { async function mountProbe( onSuccess: (payload: {token: string; userId: string}) => Promise | void, runtimeSnapshot: typeof RUNTIME_SNAPSHOT = RUNTIME_SNAPSHOT, - onExpired: () => void = () => {}, + onEnded: () => void = () => {}, ): Promise { await act(async () => { - root.render(createElement(Probe, {onExpired, onSuccess, runtimeSnapshot})); + root.render(createElement(Probe, {onEnded, onSuccess, runtimeSnapshot})); }); } @@ -217,7 +218,7 @@ describe('browser sign-in against a deployed desktop shell', () => { expect(harness.initiateDesktopHandoff).toHaveBeenCalledTimes(1); expect(harness.navigateToExternalURL).toHaveBeenCalledTimes(1); expect(harness.navigateToExternalURL.mock.calls[0]?.[0]).toBe( - `https://self.hosted.example/login?handoff=1&code=${encodeURIComponent(CODE)}`, + `https://self.hosted.example/login?handoff=1&code=${encodeURIComponent(CODE)}&api=${encodeURIComponent('https://self.hosted.example')}`, ); await advancePollInterval(); @@ -491,7 +492,7 @@ describe('when the instance reports the code as dead', () => { expect(harness.pollDesktopHandoffStatus).toHaveBeenCalledTimes(1); expect(requireController().session).toBeNull(); expect(requireController().code).toBeNull(); - expect(requireController().error).toBe('That sign-in code expired. Try again.'); + expect(requireController().error).toBe('The sign-in request expired before your browser approved it.'); await advancePollInterval(); await advancePollInterval(); diff --git a/fluxer_app/src/features/auth/flow/browser_handoff/useBrowserLoginHandoff.ts b/fluxer_app/src/features/auth/flow/browser_handoff/useBrowserLoginHandoff.ts index 6cf0ca200..0ee2fd8f2 100644 --- a/fluxer_app/src/features/auth/flow/browser_handoff/useBrowserLoginHandoff.ts +++ b/fluxer_app/src/features/auth/flow/browser_handoff/useBrowserLoginHandoff.ts @@ -2,6 +2,7 @@ import type {RuntimeConfigSnapshot} from '@app/features/app/state/InstanceSnapshotStore'; import { + DESKTOP_HANDOFF_DENIED_DESCRIPTOR, DESKTOP_HANDOFF_EXPIRED_DESCRIPTOR, DESKTOP_HANDOFF_UNAVAILABLE_DESCRIPTOR, } from '@app/features/auth/flow/browser_handoff/BrowserHandoffDescriptors'; @@ -17,9 +18,8 @@ import {instanceTargetFromSnapshot} from '@app/features/platform/transport/Insta import {Logger} from '@app/features/platform/utils/AppLogger'; import * as TextCopyCommands from '@app/features/ui/commands/TextCopyCommands'; import {navigateToExternalURL} from '@app/features/ui/utils/NativeUtils'; -import {DesktopHandoffStatus} from '@fluxer/desktop_ipc/src/BrowserHandoffContract'; +import {DesktopHandoffReturnMethod, DesktopHandoffStatus} from '@fluxer/desktop_ipc/src/BrowserHandoffContract'; import {formatDesktopHandoffCode} from '@fluxer/schema/src/domains/auth/DesktopHandoffCode'; -import type {I18n, MessageDescriptor} from '@lingui/core'; import {useLingui} from '@lingui/react/macro'; import {useCallback, useEffect, useMemo, useRef, useState} from 'react'; @@ -38,16 +38,10 @@ export const BrowserLoginHandoffAction = Object.freeze({ export type BrowserLoginHandoffAction = (typeof BrowserLoginHandoffAction)[keyof typeof BrowserLoginHandoffAction]; export type BrowserLoginHandoffPendingAction = BrowserLoginHandoffAction | null; -export interface BrowserLoginHandoffMessages { - readonly desktopHandoffUnavailable?: MessageDescriptor; - readonly expired?: MessageDescriptor; -} - export interface UseBrowserLoginHandoffOptions { readonly runtimeSnapshot: RuntimeConfigSnapshot; readonly prefillIdentifier?: string | null; - readonly messages?: BrowserLoginHandoffMessages; - readonly onExpired: () => void; + readonly onEnded: () => void; readonly onSuccess: (payload: LoginSuccessPayload) => Promise | void; } @@ -63,10 +57,9 @@ export interface BrowserLoginHandoffController { readonly isGenerating: boolean; readonly pendingAction: BrowserLoginHandoffPendingAction; readonly remainingSeconds: number | null; + readonly returnMethod: DesktopHandoffReturnMethod; readonly session: BrowserLoginHandoffSession | null; readonly copyCode: () => void; - readonly expireCurrentSession: () => void; - readonly isCurrentSessionExpired: () => boolean; readonly openBrowser: () => Promise; readonly regenerateCode: () => Promise; readonly reset: () => void; @@ -97,7 +90,11 @@ function buildBrowserLoginHandoffURL({ prefillIdentifier, prefillField, }: BrowserLoginHandoffURLRequest): string { - const params = new URLSearchParams({handoff: '1', code: session.code}); + const params = new URLSearchParams({ + handoff: '1', + code: session.code, + api: new URL(session.target.instance.apiEndpoint).origin, + }); if (prefillIdentifier != null && prefillIdentifier.length > 0) { params.set(prefillField, prefillIdentifier); } @@ -131,15 +128,10 @@ function useBrowserLoginHandoffCountdown(expiresAt: string | null): number | nul return remaining; } -function resolveMessage(i18n: I18n, descriptor: MessageDescriptor | undefined, fallback: MessageDescriptor): string { - return i18n._(descriptor ?? fallback); -} - export function useBrowserLoginHandoff({ runtimeSnapshot, prefillIdentifier, - messages, - onExpired, + onEnded, onSuccess, }: UseBrowserLoginHandoffOptions): BrowserLoginHandoffController { const {i18n} = useLingui(); @@ -155,10 +147,10 @@ export function useBrowserLoginHandoff({ const completedRef = useRef(false); const copyResetRef = useRef(null); const onSuccessRef = useRef(onSuccess); - const onExpiredRef = useRef(onExpired); + const onEndedRef = useRef(onEnded); const i18nRef = useRef(i18n); onSuccessRef.current = onSuccess; - onExpiredRef.current = onExpired; + onEndedRef.current = onEnded; i18nRef.current = i18n; const target = resolveHandoffTarget(runtimeSnapshot); const targetKey = `${target.instance.apiEndpoint}|${target.webAppEndpoint}`; @@ -205,9 +197,7 @@ export function useBrowserLoginHandoff({ const requestTarget = targetRef.current; try { if (requestTarget.webAppEndpoint.length === 0) { - throw new BrowserLoginHandoffUnavailableError( - resolveMessage(i18n, messages?.desktopHandoffUnavailable, DESKTOP_HANDOFF_UNAVAILABLE_DESCRIPTOR), - ); + throw new BrowserLoginHandoffUnavailableError(i18n._(DESKTOP_HANDOFF_UNAVAILABLE_DESCRIPTOR)); } const nextSession = await transport.initiate(requestTarget); if (generation !== generationRef.current) { @@ -225,7 +215,7 @@ export function useBrowserLoginHandoff({ setIsGenerating(false); } } - }, [clearCopyFeedbackTimer, i18n, messages?.desktopHandoffUnavailable, transport]); + }, [clearCopyFeedbackTimer, i18n, transport]); const getCurrentSession = useCallback(async (): Promise => { if (session != null && Date.parse(session.expiresAt) > Date.now()) { return session; @@ -233,17 +223,17 @@ export function useBrowserLoginHandoff({ return generateSession(); }, [generateSession, session]); const expireCurrentSession = useCallback(() => { - clearHandoffSession(resolveMessage(i18n, messages?.expired, DESKTOP_HANDOFF_EXPIRED_DESCRIPTOR)); - onExpiredRef.current(); - }, [clearHandoffSession, i18n, messages?.expired]); + clearHandoffSession(i18n._(DESKTOP_HANDOFF_EXPIRED_DESCRIPTOR)); + onEndedRef.current(); + }, [clearHandoffSession, i18n]); const expireCurrentSessionRef = useRef(expireCurrentSession); expireCurrentSessionRef.current = expireCurrentSession; - const isCurrentSessionExpired = useCallback(() => { - if (session == null) { - return false; - } - return Date.parse(session.expiresAt) <= Date.now(); - }, [session]); + const endDeniedSession = useCallback(() => { + clearHandoffSession(i18n._(DESKTOP_HANDOFF_DENIED_DESCRIPTOR)); + onEndedRef.current(); + }, [clearHandoffSession, i18n]); + const endDeniedSessionRef = useRef(endDeniedSession); + endDeniedSessionRef.current = endDeniedSession; const openBrowser = useCallback(async (): Promise => { setPendingAction(BrowserLoginHandoffAction.OPEN_BROWSER); try { @@ -362,6 +352,10 @@ export function useBrowserLoginHandoff({ keepPolling = false; expireCurrentSessionRef.current(); } + if (result.status === DesktopHandoffStatus.DENIED) { + keepPolling = false; + endDeniedSessionRef.current(); + } } catch (caught) { consecutiveErrors += 1; if (!disposed) { @@ -402,10 +396,9 @@ export function useBrowserLoginHandoff({ isGenerating, pendingAction, remainingSeconds, + returnMethod: session?.returnMethod ?? DesktopHandoffReturnMethod.CODE, session, copyCode, - expireCurrentSession, - isCurrentSessionExpired, openBrowser, regenerateCode, reset, diff --git a/fluxer_app/src/features/auth/state/AuthFlow.ts b/fluxer_app/src/features/auth/state/AuthFlow.ts index 80af1fcc7..db5dafa69 100644 --- a/fluxer_app/src/features/auth/state/AuthFlow.ts +++ b/fluxer_app/src/features/auth/state/AuthFlow.ts @@ -380,26 +380,3 @@ export async function pollIpAuthorization( ): Promise { return AuthenticationCommands.pollIpAuthorization({ticket, target: authCommandTarget(runtimeSnapshot)}); } - -export async function initiateDesktopHandoff(runtimeSnapshot: RuntimeConfigSnapshot) { - return AuthenticationCommands.initiateDesktopHandoff(authCommandTarget(runtimeSnapshot)); -} - -export async function completeDesktopHandoff({ - code, - token, - userId, - runtimeSnapshot, -}: { - code: string; - token: string; - userId: string; - runtimeSnapshot: RuntimeConfigSnapshot; -}) { - return AuthenticationCommands.completeDesktopHandoff({ - code, - token, - userId, - target: authCommandTarget(runtimeSnapshot), - }); -} diff --git a/fluxer_app/src/features/i18n/locales/ar/messages.po b/fluxer_app/src/features/i18n/locales/ar/messages.po index 6bb312eee..1d2f17a07 100644 --- a/fluxer_app/src/features/i18n/locales/ar/messages.po +++ b/fluxer_app/src/features/i18n/locales/ar/messages.po @@ -1573,7 +1573,7 @@ msgid "{imageCount, plural, one {# image} other {# images}}, {videoCount, plural msgstr "{imageCount, plural, zero {# صورة} one {# صورة} two {# صورتين} few {# صور} many {# صورة} other {# صورة}}، {videoCount, plural, zero {# مقطع فيديو} one {# مقطع فيديو} two {# مقطعي فيديو} few {# مقاطع فيديو} many {# مقطع فيديو} other {# مقطع فيديو}}" #. Explanation shown when the selected instance advertises no web app endpoint. Instance name is interpolated. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:76 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:61 msgid "{instanceName} does not publish a web address, so sign-in cannot be handed to a browser." msgstr "لا ينشر {instanceName} عنوان ويب، لذا لا يمكن تسليم تسجيل الدخول إلى المتصفح." @@ -2777,14 +2777,6 @@ msgstr "تضمين غني أو معاينة رابط (وليس ملفًا مرف msgid "A separate profile for each community" msgstr "ملف شخصي منفصل لكل مجتمع" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:164 -msgid "A sign-in request was made for your account. Only approve if you initiated it." -msgstr "تم تقديم طلب تسجيل دخول لحسابك. وافق عليه فقط إذا كنت أنت من بدأه." - -#: src/features/auth/flow/HandoffApprovalFlow.tsx:162 -msgid "A sign-in request was made from the following device. Only approve if you recognize it." -msgstr "تم تقديم طلب تسجيل دخول من الجهاز التالي. لا توافق إلا إذا كنت تعرف هذا الجهاز." - #. Description for has:sticker. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:51 msgid "a sticker" @@ -4811,10 +4803,6 @@ msgstr "تطبيق على جميع المجتمعات" msgid "Approval required" msgstr "الموافقة مطلوبة" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:206 -msgid "Approve" -msgstr "موافقة" - #. Hint under the sign-in option on fluxer.com that pairs a newly installed app with the old installed app. productName is the app name. #: src/features/auth/flow/AuthLoginLayout.tsx:101 msgid "Approve this app from the {productName} app you already use. No password needed." @@ -7873,6 +7861,11 @@ msgstr "جارٍ التحقق من الوصول..." msgid "Checking screen recording permission..." msgstr "جارٍ التحقق من إذن تسجيل الشاشة..." +#. Title while the browser looks up the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:224 +msgid "Checking the sign-in request…" +msgstr "جارٍ التحقق من طلب تسجيل الدخول…" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -8847,6 +8840,11 @@ msgstr "كتل التعليمات البرمجية" msgid "Code expired" msgstr "انتهت صلاحية الرمز" +#. Label of the field in the browser where the user types the 12-character code shown in the desktop or mobile app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:28 +msgid "Code from the {productName} app" +msgstr "رمز من تطبيق {productName}" + #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 @@ -9348,7 +9346,6 @@ msgstr "إخفاء شارة {premiumProductName} الخاصة بك بالكام #: src/features/auth/components/pages/SsoCallbackPage.tsx:256 #: src/features/auth/components/pages/SsoCallbackPage.tsx:322 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:216 msgid "Completing sign-in…" msgstr "جارٍ إكمال تسجيل الدخول…" @@ -9782,7 +9779,6 @@ msgstr "يمكن فتح قوائم السياق بالنقر بزر الفأرة #: src/features/auth/components/modals/DeviceRevokeModal.tsx:77 #: src/features/auth/components/modals/PasskeyPinModal.tsx:111 #: src/features/auth/components/pages/oauth_authorize_page/OAuthAccountStep.tsx:36 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/connection/components/modals/AddConnectionModal.tsx:384 #: src/features/i18n/utils/CommonMessageDescriptors.ts:726 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:413 @@ -9790,6 +9786,11 @@ msgstr "يمكن فتح قوائم السياق بالنقر بزر الفأرة msgid "Continue" msgstr "متابعة" +#. Title in the desktop app while it waits for the user to sign in on the browser page it opened. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:177 +msgid "Continue in your browser" +msgstr "متابعة في متصفحك" + #. Button in the gift time confirmation that proceeds to subscription checkout. #: src/features/app/components/dialogs/components/plutonium/hooks/useCheckoutActions.tsx:145 msgid "Continue to checkout" @@ -10437,7 +10438,7 @@ msgid "Couldn't close DM" msgstr "تعذّر إغلاق الرسالة المباشرة" #. Desktop handoff flow error shown when finalizing the sign-in fails after a valid code. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:21 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:34 msgid "Couldn't complete sign-in. Try again." msgstr "تعذّر إكمال تسجيل الدخول. حاول مرة أخرى." @@ -10831,6 +10832,11 @@ msgstr "تعذّر بدء تفويض {blueskyProviderName}" msgid "Couldn't start checkout" msgstr "تعذر بدء عملية الدفع" +#. Shown in the desktop app when the browser sign-in request could not be created. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:66 +msgid "Couldn't start signing in with your browser." +msgstr "تعذر بدء تسجيل الدخول عبر متصفحك." + #. Toast error shown when creating a new account connection fails. #: src/features/connection/commands/ConnectionCommands.ts:27 msgid "Couldn't start the connection" @@ -10942,7 +10948,7 @@ msgid "Couldn't upload banner" msgstr "تعذّر تحميل اللافتة" #. Desktop handoff flow error shown when verifying the pairing code fails for an unexpected reason. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:17 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:30 msgid "Couldn't verify that code. Try again." msgstr "تعذّر التحقق من الرمز. حاول مرة أخرى." @@ -12503,7 +12509,6 @@ msgstr "تخطيط مكثف" #. Short label in the settings dialog permission components. Keep the tone plain and specific. #: src/features/app/components/dialogs/shared/PermissionComponents.tsx:16 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:203 msgid "Deny" msgstr "رفض" @@ -14910,15 +14915,16 @@ msgstr "أدخل الرمز المكون من {digitCount} أرقام من تط msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "أدخل الرمز المكون من {digitCount} أرقام من تطبيق المصادقة الخاص بك." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:108 -msgid "Enter the code" -msgstr "أدخل الرمز" - #. Inline validation error on the verification step of the DSA report flow when the code field is empty. #: src/features/moderation/components/pages/ReportPage.tsx:74 msgid "Enter the code before continuing." msgstr "أدخل الرمز قبل المتابعة." +#. Title of the browser page where the user types the 12-character code the app shows under Signing in on another device. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +msgid "Enter the code from the {PRODUCT_NAME} app" +msgstr "أدخل الرمز من تطبيق {PRODUCT_NAME}" + #. Body text in the authentication sudo verification modal. Keep the tone plain and specific. #: src/features/auth/components/modals/SudoVerificationModal.tsx:56 msgid "Enter the code from your authenticator app." @@ -14933,10 +14939,6 @@ msgstr "أدخل الرمز المُرسل إلى بريدك الإلكترون msgid "Enter the code sent to your email address." msgstr "أدخل الرمز الذي أُرسل إلى بريدك الإلكتروني." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:111 -msgid "Enter the code shown in the app to continue." -msgstr "أدخل الرمز المعروض في التطبيق للمتابعة." - #: src/features/user/components/modals/BouncedEmailChangeModal.tsx:157 #: src/features/user/components/modals/EmailChangeModal.tsx:244 msgid "Enter the code we emailed to your new address." @@ -14959,6 +14961,11 @@ msgstr "أدخل البريد الإلكتروني الجديد الذي تري msgid "Enter the PIN for your security key to continue." msgstr "أدخل رمز PIN لمفتاح الأمان للمتابعة." +#. Title in the desktop app above the code the user types into a browser on another device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:228 +msgid "Enter this code in your browser" +msgstr "أدخل هذا الرمز في متصفحك" + #: src/features/auth/flow/HandoffCodeDisplay.tsx:132 msgid "Enter this code in your browser to complete sign-in." msgstr "أدخل هذا الرمز في متصفحك لإكمال تسجيل الدخول." @@ -15362,7 +15369,7 @@ msgstr "تنتهي صلاحيته بين {earliest} و{latest}" msgid "Expires in {remaining}s" msgstr "تنتهي الصلاحية خلال {remaining} ث" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:374 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:250 msgid "Expires in {remainingSeconds}s" msgstr "تنتهي صلاحيته خلال {remainingSeconds} ثانية" @@ -16165,7 +16172,7 @@ msgid "Fluxer" msgstr "Fluxer" #. Status shown when browser sign-in status polling gives up after repeated failures. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:72 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:57 msgid "Fluxer stopped checking whether the browser approved this sign-in. It didn't lose your code." msgstr "توقف Fluxer عن التحقق مما إذا كان المتصفح قد وافق على تسجيل الدخول هذا. لم يفقد رمزك." @@ -16952,8 +16959,6 @@ msgstr "أنشئ رابطًا قابلاً للمشاركة أو انسخ CSS ا msgid "Generate invite link" msgstr "إنشاء رابط دعوة" -#. Button label that replaces an expired browser sign-in code with a fresh one. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:64 #: src/features/auth/flow/HandoffCodeDisplay.tsx:117 msgid "Generate new code" msgstr "إنشاء رمز جديد" @@ -17348,6 +17353,16 @@ msgstr "ارجع وأدخل بريدًا إلكترونيًا صالحًا." msgid "Go back to {productName} to continue." msgstr "ارجع إلى {productName} للمتابعة." +#. Shown after approving a sign-in for an app on another device, which signs in by itself shortly. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:292 +msgid "Go back to the {PRODUCT_NAME} app. It finishes signing in on its own." +msgstr "ارجع إلى تطبيق {PRODUCT_NAME}. سيتم تسجيل الدخول تلقائيًا." + +#. Shown after approving, when the browser has already handed the sign-in back to the desktop app. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:288 +msgid "Go back to the {PRODUCT_NAME} app. You can close this tab." +msgstr "ارجع إلى تطبيق {PRODUCT_NAME}. يمكنك إغلاق هذه النافذة." + #. Accessible label for the community row of an expression info card, which opens a community the viewer is already a member of. {communityName} is the community name. #: src/features/expressions/components/ExpressionInfoCard.tsx:89 msgid "Go to {communityName}" @@ -19295,11 +19310,6 @@ msgstr "JSON غير صالح. الصق الاستجابة الكاملة من ع msgid "Invalid or expired code" msgstr "الرمز غير صالح أو منتهي الصلاحية" -#. Desktop handoff flow error shown when the entered pairing code is invalid or expired. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:13 -msgid "Invalid or expired code. Try again." -msgstr "الرمز غير صالح أو انتهت صلاحيته. حاول مرة أخرى." - #. Short label in the authentication authorize flow. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/state/useAuthorizeFlow.ts:82 msgid "Invalid redirect_uri" @@ -20876,7 +20886,7 @@ msgstr "تنسيق الوقت المحلي" msgid "Localization" msgstr "اللغة والمنطقة" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:192 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:109 #: src/features/user/components/modals/tabs/DevicesTab.tsx:152 msgid "Location" msgstr "الموقع" @@ -21034,6 +21044,11 @@ msgstr "هل تريد جعل {userName} مالك المجموعة؟ ستفقد msgid "Make group owner" msgstr "نقل ملكية المجموعة" +#. Shown above the code on the browser approval page when the app cannot be signed in automatically. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:253 +msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." +msgstr "تأكد من تطابق هذا الرمز مع الرمز الموجود في تطبيق {PRODUCT_NAME}." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" @@ -24668,6 +24683,11 @@ msgstr "في <0>{listPriceEffectiveDate}، سينتقل اشتراكك من msgid "On click" msgstr "عند النقر" +#. One line explanation in the desktop app above the code. signInAddress is the web address of the sign-in page, such as web.fluxer.app/login?handoff=1. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:236 +msgid "On your other device, sign in at {signInAddress} and enter this code when asked." +msgstr "على جهازك الآخر، قم بتسجيل الدخول على {signInAddress} وأدخل هذا الرمز عند الطلب." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:715 msgid "Once deleted, the application and its credentials are permanently removed." msgstr "بعد الحذف، ستتم إزالة التطبيق وبيانات اعتماده نهائيًا." @@ -24733,6 +24753,11 @@ msgstr "فقط الإشارات @" msgid "Only applies on wide screens." msgstr "ينطبق على الشاشات العريضة فقط." +#. Warning under the title of the browser approval page, so people do not approve a sign-in someone else started. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:245 +msgid "Only continue if you started this sign-in on a device you control." +msgstr "تابع فقط إذا كنت قد بدأت تسجيل الدخول هذا على جهاز تتحكم فيه." + #. Body copy in the mature content check modal. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:32 msgid "Only credit cards are accepted. Debit and prepaid cards cannot be used for the mature content check." @@ -24921,6 +24946,11 @@ msgstr "فتح {landmarkName}" msgid "Open {premiumProductFullName}" msgstr "افتح {premiumProductFullName}" +#. Button on the browser page after approving that opens the desktop app again if it did not come to the front. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:304 +msgid "Open {PRODUCT_NAME}" +msgstr "افتح {PRODUCT_NAME}" + #. Button label that opens the desktop app. productName is the app name. #. Button that hands SSO sign-in back to the mobile app. productName is the app name. #: src/features/auth/components/pages/SsoCallbackPage.tsx:47 @@ -25011,12 +25041,15 @@ msgstr "فتح خيارات اللافتة" msgid "Open bookmarks" msgstr "فتح الإشارات المرجعية" -#. Button label that opens the browser sign-in handoff page. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:56 #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:184 msgid "Open browser" msgstr "فتح المتصفح" +#. Button in the desktop app that reopens the browser sign-in page while the app waits for the browser. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:53 +msgid "Open browser again" +msgstr "افتح المتصفح مرة أخرى" + #. Primary button in the screen-share picker on web. Hands off to the browser's native getDisplayMedia picker. #: src/features/voice/components/modals/ScreenSharePickerModal.tsx:209 msgid "Open browser picker" @@ -25392,10 +25425,6 @@ msgstr "فتح إعدادات الصوت والفيديو" msgid "Open with {accountName} on {instanceName}" msgstr "فتح باستخدام {accountName} على {instanceName}" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:414 -msgid "Open your browser to finish signing in." -msgstr "افتح متصفحك لإنهاء تسجيل الدخول." - #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:137 msgid "Open your browser, sign in, then enter the code below to link your account." msgstr "افتح متصفحك، سجّل الدخول، ثم أدخل الرمز أدناه لربط حسابك." @@ -25421,7 +25450,7 @@ msgstr "يفتح صفحة الأعضاء. اضغط على المسافة أو En #. Short label in the language tab. Keep it concise. #. Spellcheck engine option in the textarea spellcheck submenu. Uses the host operating system spellchecker. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:79 #: src/features/user/components/modals/tabs/LanguageTab.tsx:110 msgid "Operating system" @@ -26439,7 +26468,7 @@ msgstr "الخطة" msgid "Plans, perks, gifts and your subscription all live on one page." msgstr "الخطط والمزايا والهدايا واشتراكك كلها موجودة في صفحة واحدة." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:172 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:89 msgid "Platform" msgstr "المنصة" @@ -31859,11 +31888,6 @@ msgstr "إظهار الدردشة" msgid "Show chat with {count, plural, one {# unread message} other {# unread messages}}" msgstr "إظهار الدردشة ({count, plural, zero {لا رسائل غير مقروءة} one {رسالة واحدة غير مقروءة} two {رسالتان غير مقروءتين} few {# رسائل غير مقروءة} many {# رسالة غير مقروءة} other {# رسالة غير مقروءة}})" -#. Button label that opens the manual browser handoff code fallback. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:60 -msgid "Show code" -msgstr "إظهار الرمز" - #. Developer voice status menu option for displaying the voice connection identifier. #: src/features/voice/components/voice_connection_status/VoiceConnectionStatusInner.tsx:76 msgid "Show connection ID" @@ -32306,7 +32330,9 @@ msgstr "يعرض اللافتة في قسم خاص بها أسفل رأس الم msgid "Sidebar" msgstr "الشريط الجانبي" +#. Button in the browser that approves signing in to the desktop or mobile app that asked for it. #. Generic authentication action label. Use for buttons, links, page titles, and accessible labels. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:33 #: src/features/i18n/utils/CommonMessageDescriptors.ts:79 msgid "Sign in" msgstr "تسجيل الدخول" @@ -32321,10 +32347,35 @@ msgstr "تسجيل الدخول مرة أخرى" msgid "Sign in again as {accountLabel}" msgstr "سجّل الدخول مرة أخرى بصفتك {accountLabel}" +#. Shown in the desktop app while it waits for the browser. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:193 +msgid "Sign in to {instanceName} in your browser and confirm. This app finishes signing in on its own." +msgstr "سجّل الدخول إلى {instanceName} في متصفحك وقم بالتأكيد. سيكمل هذا التطبيق تسجيل الدخول بنفسه." + +#. Shown in the desktop app above the code when the browser cannot return the sign-in automatically. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:189 +msgid "Sign in to {instanceName} in your browser, and check that it shows this code:" +msgstr "سجّل الدخول إلى {instanceName} في متصفحك، وتأكد من أنه يعرض هذا الرمز:" + #: src/features/auth/flow/GiftHeader.tsx:33 msgid "Sign in to claim your gift" msgstr "سجّل الدخول لاستلام هديتك" +#. Title of the browser page where the user approves signing in to an app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:71 +msgid "Sign in to the {PRODUCT_NAME} app" +msgstr "تسجيل الدخول إلى تطبيق {PRODUCT_NAME}" + +#. Title of the browser page where the user approves signing in to the desktop app that opened it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:58 +msgid "Sign in to the {PRODUCT_NAME} desktop app" +msgstr "تسجيل الدخول إلى تطبيق {PRODUCT_NAME} لسطح المكتب" + +#. Title of the browser page where the user approves signing in to the mobile app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:65 +msgid "Sign in to the {PRODUCT_NAME} mobile app" +msgstr "تسجيل الدخول إلى تطبيق {PRODUCT_NAME} للجوال" + #. Action label that starts passkey authentication. #: src/features/auth/AuthMessageDescriptors.ts:13 msgid "Sign in with a passkey" @@ -32403,14 +32454,10 @@ msgstr "تسجيل خروج حسابك من الأجهزة الأخرى" msgid "Sign out?" msgstr "تسجيل الخروج؟" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:234 -msgid "Sign-in approved" -msgstr "تمت الموافقة على تسجيل الدخول" - -#. Short label in the authentication handoff approval flow. Keep the tone plain and specific. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:26 -msgid "Sign-in code" -msgstr "رمز تسجيل الدخول" +#. Title of the browser page after the user cancelled the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:322 +msgid "Sign-in cancelled" +msgstr "تم إلغاء تسجيل الدخول" #. Section title for email address and password controls in the account security tab. Keep it concise. #: src/features/user/components/modals/tabs/account_security_tab/AccountSecuritySections.tsx:23 @@ -32433,10 +32480,6 @@ msgstr "خطوات تسجيل الدخول" msgid "Sign-in method" msgstr "طريقة تسجيل الدخول" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:84 -msgid "Sign-in request" -msgstr "طلب تسجيل الدخول" - #. Aria label on the signal-strength icon shown while the first latency sample is still pending. #: src/features/voice/components/SignalStrengthIcon.tsx:16 msgid "Signal strength loading" @@ -32453,6 +32496,21 @@ msgstr "تم تسجيل الدخول" msgid "Signed-in devices" msgstr "الأجهزة التي سجّلت الدخول منها" +#. Shown on the browser approval page above the buttons. name is the display name of the account that will be signed in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:137 +msgid "Signing in as {name}" +msgstr "تسجيل الدخول باسم {name}" + +#. Text button in the desktop app that shows a code to type into a browser on a different device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:207 +msgid "Signing in on another device?" +msgstr "تسجيل الدخول على جهاز آخر؟" + +#. Title while the browser approves the sign-in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:228 +msgid "Signing in…" +msgstr "جارٍ تسجيل الدخول…" + #. Label for Bluesky OAuth signing key ID input. #: src/features/app/components/setup/SetupWizardSteps.tsx:1161 msgid "Signing key ID" @@ -33504,6 +33562,8 @@ msgstr "بدء اختبار الميكروفون" msgid "Start minimized" msgstr "بدء مصغر" +#. Button on the browser page after cancelling that goes back to choosing an account. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:337 #: src/features/moderation/components/report/ReportStepDetails.tsx:326 #: src/features/moderation/components/report/ReportStepEmail.tsx:97 #: src/features/moderation/components/report/ReportStepVerification.tsx:134 @@ -34910,6 +34970,11 @@ msgstr "التايلاندية" msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "شكرًا لمساعدتك في الحفاظ على أمان {productName}. سنراجع بلاغك في أقرب وقت ممكن." +#. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 +msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." +msgstr "هذا الرمز غير صالح على {instanceHost}. تحقق من الرمز في تطبيق {productName} وحاول مرة أخرى." + #. Body of the passkey page after the passkey prompt failed or was dismissed. Keep plain. #: src/features/auth/passkey_migration/PasskeyBridgePage.tsx:36 msgid "That didn't work. Try again or cancel." @@ -34953,11 +35018,6 @@ msgstr "تعذّر حذف هذه الرسالة" msgid "That message is gone, or you lost access to the conversation." msgstr "هذه الرسالة غير موجودة، أو فقدت إمكانية الوصول إلى المحادثة." -#. Error shown when a browser sign-in handoff code expires before it is approved. -#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 -msgid "That sign-in code expired. Try again." -msgstr "انتهت صلاحية رمز تسجيل الدخول هذا. حاول مرة أخرى." - #. End-of-list line in the saved messages popout after every bookmark has been shown. #. End-of-list line on the saved messages page after every bookmark has been shown. #: src/features/messaging/components/pages/SavedMessagesPage.tsx:35 @@ -34965,6 +35025,21 @@ msgstr "انتهت صلاحية رمز تسجيل الدخول هذا. حاول msgid "That's all of them." msgstr "هذا كل شيء." +#. Warning on the browser approval page when the app asked for a different account than the one chosen. requestedIdentifier is the email or username the app asked for, name is the chosen account's display name. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:131 +msgid "The {PRODUCT_NAME} app asked to sign in as {requestedIdentifier}, but you chose {name}." +msgstr "طلب تطبيق {PRODUCT_NAME} تسجيل الدخول باسم {requestedIdentifier}، لكنك اخترت {name}." + +#. Explains where the code comes from, under the title of the browser page where it is typed. Signing in on another device is the label of a button in the app and must match its translation. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:187 +msgid "The {PRODUCT_NAME} app on your other device shows it under Signing in on another device. Only enter a code from a device you control." +msgstr "يُظهر تطبيق {PRODUCT_NAME} على جهازك الآخر ذلك تحت \"تسجيل الدخول على جهاز آخر\". أدخل رمزًا من جهاز تتحكم فيه فقط." + +#. Shown after the user cancelled the sign-in request in the browser. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:327 +msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." +msgstr "لم يتم تسجيل الدخول إلى تطبيق {PRODUCT_NAME}. يمكنك إغلاق هذه النافذة." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -34983,10 +35058,6 @@ msgstr "تعطل التطبيق" msgid "The app has crashed. Checking for updates that might fix this issue…" msgstr "تعطل التطبيق. جارٍ البحث عن تحديثات قد تُصلح هذه المشكلة…" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:237 -msgid "The app should now be signed in to your account." -msgstr "من المفترض أن يكون التطبيق قد سجّل الدخول إلى حسابك الآن." - #. Activity log detail line under a lifted ban, for a temporary ban that had already ended on its own before it was lifted. A ban is the community ban, not the feature that blocks a user. {date} is when the ban ended, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:55 msgid "The ban had already expired on {date}" @@ -35184,6 +35255,16 @@ msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "توقف مصدر مشاركة الشاشة عن إرسال الفيديو، لذلك أُوقفت مشاركة شاشتك." +#. Error shown in the desktop app when a browser sign-in request expires before it is approved in the browser. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 +msgid "The sign-in request expired before your browser approved it." +msgstr "انتهت صلاحية طلب تسجيل الدخول قبل أن تتم الموافقة عليه في متصفحك." + +#. Error shown in the desktop app when the user pressed Cancel on the browser sign-in page. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:14 +msgid "The sign-in was cancelled in your browser." +msgstr "تم إلغاء تسجيل الدخول في متصفحك." + #. Activity log detail line under a deleted sticker, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the sticker, shown as a clickable user chip. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts:100 msgid "The sticker was uploaded by {user}" @@ -35408,6 +35489,11 @@ msgstr "جهة خارجية" msgid "This account can't be blocked." msgstr "لا يمكن حظر هذا الحساب." +#. Error in the browser when the chosen account belongs to a different server than the app that asked to sign in. accountHost and requestHost are server addresses. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:38 +msgid "This account is on {accountHost}, but the {productName} app is signing in to {requestHost}. Choose an account on {requestHost}." +msgstr "هذا الحساب موجود على {accountHost}، لكن تطبيق {productName} يقوم بتسجيل الدخول إلى {requestHost}. اختر حسابًا على {requestHost}." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:418 msgid "This action cannot be undone. All associated data, including the bot user, will be permanently deleted." msgstr "لا يمكن التراجع عن هذا الإجراء. سيتم حذف جميع البيانات المرتبطة، بما في ذلك مستخدم البوت، نهائيًا." @@ -35551,11 +35637,6 @@ msgstr "يمحو هذا حالة Premium في الواجهة الخلفية با msgid "This code doesn't exist." msgstr "هذا الرمز غير موجود." -#. Status shown under the browser sign-in code once its countdown reaches zero. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:68 -msgid "This code expired." -msgstr "انتهت صلاحية هذا الرمز." - #. Gift redemption error modal body for an invalid or already used code. #: src/features/gift/commands/GiftCommands.tsx:37 msgid "This code is invalid or already used." @@ -36075,6 +36156,11 @@ msgstr "انتهت صلاحية رابط إعادة التعيين هذا. تب msgid "This shows how links appear: {linkPreviewExampleUrl}" msgstr "هذا يوضح كيفية ظهور الروابط: {linkPreviewExampleUrl}" +#. Error in the browser when the sign-in request from the desktop app no longer exists, because it expired or the app cancelled it. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:20 +msgid "This sign-in request expired or was cancelled in the {productName} app. Start again from the app." +msgstr "انتهت صلاحية طلب تسجيل الدخول هذا أو تم إلغاؤه في تطبيق {productName}. ابدأ مرة أخرى من التطبيق." + #. Label above the community a sticker comes from in the sticker info card. #: src/features/expressions/components/ExpressionInfoCard.tsx:75 msgid "This sticker is from" @@ -38520,6 +38606,11 @@ msgstr "استخدم {url} حيث يجب إدراج رابط الصورة." msgid "Use a dedicated modal to set a message history threshold date for members who don't have the {readMessageHistoryPermissionLabel} permission." msgstr "استخدم نافذة مخصصة لتحديد تاريخ فاصل لسجل الرسائل للأعضاء الذين ليس لديهم إذن {readMessageHistoryPermissionLabel}." +#. Text button on the browser approval page that goes back to choosing which account signs in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:149 +msgid "Use a different account" +msgstr "استخدم حسابًا مختلفًا" + #: src/features/auth/flow/instance_selector/InstancePickerRows.tsx:267 msgid "Use a self-hosted instance URL" msgstr "استخدم عنوان URL لمثيل مستضاف ذاتيًا" @@ -39296,10 +39387,6 @@ msgstr "تحقق من بريدك الإلكتروني لشراء {premiumProduct msgid "Verify your email to start DMs." msgstr "تحقق من بريدك الإلكتروني لبدء الرسائل المباشرة." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:142 -msgid "Verifying code…" -msgstr "جارٍ التحقق من الرمز…" - #: src/features/auth/components/pages/ResetPasswordPage.tsx:145 msgid "Verifying your reset link…" msgstr "جارٍ التحقق من رابط إعادة التعيين…" @@ -40073,10 +40160,6 @@ msgstr "انتظر لحظة قبل حذف المزيد من الرسائل." msgid "Wait between messages. Members with \"{bypassSlowmodePermissionLabel}\" can bypass this." msgstr "الانتظار بين الرسائل. يمكن للأعضاء الذين لديهم إذن \"{bypassSlowmodePermissionLabel}\" تجاوز ذلك." -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:445 -msgid "Waiting for browser approval." -msgstr "في انتظار موافقة المتصفح." - #. Tooltip explaining that video / screen share controls are gated while the voice connection is not yet ready. #: src/features/voice/components/voice_connection_status/LocalParticipantControls.tsx:45 msgid "Waiting for connection..." @@ -40118,10 +40201,6 @@ msgstr "تنشيط" msgid "Warning" msgstr "تحذير" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:158 -msgid "Was this you?" -msgstr "هل كنت أنت؟" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:243 msgctxt "us-state" @@ -40959,10 +41038,6 @@ msgstr "لديك بالفعل اشتراك مدى الحياة في {premiumProd msgid "You already have this connection." msgstr "لديك هذا الاتصال بالفعل." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:87 -msgid "You are about to authorize an app to sign in to your account. Only continue if you initiated this request from a device you control." -msgstr "أنت على وشك السماح لتطبيق بتسجيل الدخول إلى حسابك. تابع فقط إذا بدأت هذا الطلب من جهاز تتحكم فيه." - #. External link warning title. productName is the Fluxer product name. #: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:22 msgid "You are about to leave {productName}" @@ -41732,6 +41807,11 @@ msgstr "أنت مشترك بسعر قديم. السعر الحالي لهذه ا msgid "You're sending messages too quickly" msgstr "أنت ترسل الرسائل بسرعة كبيرة" +#. Title of the browser page after the user approved signing in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:282 +msgid "You're signed in" +msgstr "تم تسجيل دخولك" + #. Status text on the screen-share hover popout shown to the local streamer. Lightly playful tone. #: src/features/voice/components/StreamWatchHoverPopout.tsx:43 msgid "You're streaming!" diff --git a/fluxer_app/src/features/i18n/locales/auto-i18n-reviewed-unchanged.json b/fluxer_app/src/features/i18n/locales/auto-i18n-reviewed-unchanged.json index 6c76ef05c..6c5b45071 100644 --- a/fluxer_app/src/features/i18n/locales/auto-i18n-reviewed-unchanged.json +++ b/fluxer_app/src/features/i18n/locales/auto-i18n-reviewed-unchanged.json @@ -2920,6 +2920,9 @@ { "msgid": "Check again" }, + { + "msgid": "Checking the sign-in request…" + }, { "msgid": "Checkout is blocked for this account." }, @@ -3007,6 +3010,9 @@ { "msgid": "Closed the thread" }, + { + "msgid": "Code from the {productName} app" + }, { "msgid": "Codec negotiation testing" }, @@ -3055,6 +3061,9 @@ { "msgid": "Connection volume controls" }, + { + "msgid": "Continue in your browser" + }, { "msgid": "Continue to checkout" }, @@ -3157,6 +3166,9 @@ { "msgid": "Couldn't search threads. Try again later." }, + { + "msgid": "Couldn't start signing in with your browser." + }, { "msgid": "Couldn't unfollow this channel" }, @@ -3457,6 +3469,12 @@ { "msgid": "Enter the PIN for your security key to continue." }, + { + "msgid": "Enter the code from the {PRODUCT_NAME} app" + }, + { + "msgid": "Enter this code in your browser" + }, { "msgid": "Enter this code in your old {PRODUCT_NAME} app to complete sign-in." }, @@ -3613,6 +3631,12 @@ { "msgid": "Global shortcut" }, + { + "msgid": "Go back to the {PRODUCT_NAME} app. It finishes signing in on its own." + }, + { + "msgid": "Go back to the {PRODUCT_NAME} app. You can close this tab." + }, { "msgid": "Go back to {productName} to continue." }, @@ -3925,6 +3949,9 @@ { "msgid": "Made the channel inherit its mature content setting." }, + { + "msgid": "Make sure this code matches the one in the {PRODUCT_NAME} app." + }, { "msgid": "Make the instance yours" }, @@ -4150,9 +4177,15 @@ { "msgid": "On <0>{listPriceEffectiveDate} your subscription moves from {listPriceCurrentLabel} to {listPriceNewLabel}. Nothing is charged today, and the rest of your subscription stays exactly as it is." }, + { + "msgid": "On your other device, sign in at {signInAddress} and enter this code when asked." + }, { "msgid": "Only @mentions" }, + { + "msgid": "Only continue if you started this sign-in on a device you control." + }, { "msgid": "Only moderators can apply this tag." }, @@ -4183,6 +4216,9 @@ { "msgid": "Open an application window, then try again." }, + { + "msgid": "Open browser again" + }, { "msgid": "Open in full view" }, @@ -4210,6 +4246,9 @@ { "msgid": "Open your old {PRODUCT_NAME} app and choose Link a new device, then enter the code below." }, + { + "msgid": "Open {PRODUCT_NAME}" + }, { "msgid": "Open {host} in Safari." }, @@ -5143,6 +5182,21 @@ { "msgid": "Sign in again as {accountLabel}" }, + { + "msgid": "Sign in to the {PRODUCT_NAME} app" + }, + { + "msgid": "Sign in to the {PRODUCT_NAME} desktop app" + }, + { + "msgid": "Sign in to the {PRODUCT_NAME} mobile app" + }, + { + "msgid": "Sign in to {instanceName} in your browser and confirm. This app finishes signing in on its own." + }, + { + "msgid": "Sign in to {instanceName} in your browser, and check that it shows this code:" + }, { "msgid": "Sign in with email" }, @@ -5161,12 +5215,24 @@ { "msgid": "Sign out {accountTag}" }, + { + "msgid": "Sign-in cancelled" + }, { "msgid": "Sign-in details" }, { "msgid": "Sign-in method" }, + { + "msgid": "Signing in as {name}" + }, + { + "msgid": "Signing in on another device?" + }, + { + "msgid": "Signing in…" + }, { "msgid": "Silent when the capture device has no audio input of its own" }, @@ -5392,6 +5458,9 @@ { "msgid": "Text is rendered with grayscale antialiasing instead of ClearType while transparency is enabled, so it will look softer." }, + { + "msgid": "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." + }, { "msgid": "That doesn't look like an instance address. Try a domain such as {exampleInstanceDomain}." }, @@ -5470,6 +5539,12 @@ { "msgid": "The role granted {permissions}." }, + { + "msgid": "The sign-in request expired before your browser approved it." + }, + { + "msgid": "The sign-in was cancelled in your browser." + }, { "msgid": "The sticker was uploaded by {user}." }, @@ -5482,6 +5557,15 @@ { "msgid": "The webhook was created by {user}." }, + { + "msgid": "The {PRODUCT_NAME} app asked to sign in as {requestedIdentifier}, but you chose {name}." + }, + { + "msgid": "The {PRODUCT_NAME} app on your other device shows it under Signing in on another device. Only enter a code from a device you control." + }, + { + "msgid": "The {PRODUCT_NAME} app was not signed in. You can close this tab." + }, { "msgid": "There are no posts yet" }, @@ -5497,6 +5581,9 @@ { "msgid": "These options change how people use the instance. Some can only be chosen during setup." }, + { + "msgid": "This account is on {accountHost}, but the {productName} app is signing in to {requestHost}. Choose an account on {requestHost}." + }, { "msgid": "This animation is too long or too large to crop. Try a shorter or smaller file." }, @@ -5602,6 +5689,9 @@ { "msgid": "This reset link has expired. Reset links last 1 hour. Please request a new one." }, + { + "msgid": "This sign-in request expired or was cancelled in the {productName} app. Start again from the app." + }, { "msgid": "This sticker is from" }, @@ -5776,6 +5866,9 @@ { "msgid": "Upload files and media in this channel." }, + { + "msgid": "Use a different account" + }, { "msgid": "Use a self-hosted instance URL" }, @@ -5980,6 +6073,9 @@ { "msgid": "You're a {premiumProductName} member. Thanks for supporting an independent communication platform." }, + { + "msgid": "You're signed in" + }, { "msgid": "YouTube enrichment" }, @@ -12094,6 +12190,9 @@ { "msgid": "Open thread" }, + { + "msgid": "Open {PRODUCT_NAME}" + }, { "msgid": "Open {contextName}" }, diff --git a/fluxer_app/src/features/i18n/locales/bg/messages.po b/fluxer_app/src/features/i18n/locales/bg/messages.po index cf46d91d9..85b6e103c 100644 --- a/fluxer_app/src/features/i18n/locales/bg/messages.po +++ b/fluxer_app/src/features/i18n/locales/bg/messages.po @@ -1573,7 +1573,7 @@ msgid "{imageCount, plural, one {# image} other {# images}}, {videoCount, plural msgstr "{imageCount, plural, one {# изображение} other {# изображения}}, {videoCount, plural, one {# видео} other {# видеа}}" #. Explanation shown when the selected instance advertises no web app endpoint. Instance name is interpolated. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:76 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:61 msgid "{instanceName} does not publish a web address, so sign-in cannot be handed to a browser." msgstr "{instanceName} не публикува уеб адрес, така че влизането не може да бъде предадено на браузър." @@ -2777,14 +2777,6 @@ msgstr "вграден елемент или визуализация на ли msgid "A separate profile for each community" msgstr "Отделен профил за всяка общност" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:164 -msgid "A sign-in request was made for your account. Only approve if you initiated it." -msgstr "Направена е заявка за влизане в акаунта ти. Одобри я само ако идва от теб." - -#: src/features/auth/flow/HandoffApprovalFlow.tsx:162 -msgid "A sign-in request was made from the following device. Only approve if you recognize it." -msgstr "Направена е заявка за влизане от следното устройство. Одобри я само ако го разпознаваш." - #. Description for has:sticker. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:51 msgid "a sticker" @@ -4811,10 +4803,6 @@ msgstr "Приложи към всички общности" msgid "Approval required" msgstr "Изисква се одобрение" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:206 -msgid "Approve" -msgstr "Одобри" - #. Hint under the sign-in option on fluxer.com that pairs a newly installed app with the old installed app. productName is the app name. #: src/features/auth/flow/AuthLoginLayout.tsx:101 msgid "Approve this app from the {productName} app you already use. No password needed." @@ -7873,6 +7861,11 @@ msgstr "Проверка на достъпа..." msgid "Checking screen recording permission..." msgstr "Проверка на разрешението за запис на екрана..." +#. Title while the browser looks up the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:224 +msgid "Checking the sign-in request…" +msgstr "Проверяваме заявката за влизане…" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -8847,6 +8840,11 @@ msgstr "Кодови блокове" msgid "Code expired" msgstr "Кодът е изтекъл" +#. Label of the field in the browser where the user types the 12-character code shown in the desktop or mobile app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:28 +msgid "Code from the {productName} app" +msgstr "Код от приложението {productName}" + #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 @@ -9348,7 +9346,6 @@ msgstr "Пълно скриване на значката ти {premiumProductNa #: src/features/auth/components/pages/SsoCallbackPage.tsx:256 #: src/features/auth/components/pages/SsoCallbackPage.tsx:322 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:216 msgid "Completing sign-in…" msgstr "Завършване на влизането…" @@ -9782,7 +9779,6 @@ msgstr "Контекстните менюта могат да се отваря #: src/features/auth/components/modals/DeviceRevokeModal.tsx:77 #: src/features/auth/components/modals/PasskeyPinModal.tsx:111 #: src/features/auth/components/pages/oauth_authorize_page/OAuthAccountStep.tsx:36 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/connection/components/modals/AddConnectionModal.tsx:384 #: src/features/i18n/utils/CommonMessageDescriptors.ts:726 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:413 @@ -9790,6 +9786,11 @@ msgstr "Контекстните менюта могат да се отваря msgid "Continue" msgstr "Продължи" +#. Title in the desktop app while it waits for the user to sign in on the browser page it opened. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:177 +msgid "Continue in your browser" +msgstr "Продължи в браузъра си" + #. Button in the gift time confirmation that proceeds to subscription checkout. #: src/features/app/components/dialogs/components/plutonium/hooks/useCheckoutActions.tsx:145 msgid "Continue to checkout" @@ -10437,7 +10438,7 @@ msgid "Couldn't close DM" msgstr "Неуспешно затваряне на DM" #. Desktop handoff flow error shown when finalizing the sign-in fails after a valid code. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:21 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:34 msgid "Couldn't complete sign-in. Try again." msgstr "Влизането не можа да бъде завършено. Опитай отново." @@ -10831,6 +10832,11 @@ msgstr "Неуспешно стартиране на оторизацията з msgid "Couldn't start checkout" msgstr "Неуспешно стартиране на плащането" +#. Shown in the desktop app when the browser sign-in request could not be created. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:66 +msgid "Couldn't start signing in with your browser." +msgstr "Не успяхме да стартираме влизането през браузъра." + #. Toast error shown when creating a new account connection fails. #: src/features/connection/commands/ConnectionCommands.ts:27 msgid "Couldn't start the connection" @@ -10942,7 +10948,7 @@ msgid "Couldn't upload banner" msgstr "Неуспешно качване на банер" #. Desktop handoff flow error shown when verifying the pairing code fails for an unexpected reason. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:17 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:30 msgid "Couldn't verify that code. Try again." msgstr "Кодът не можа да бъде потвърден. Опитай отново." @@ -12503,7 +12509,6 @@ msgstr "Сбит изглед" #. Short label in the settings dialog permission components. Keep the tone plain and specific. #: src/features/app/components/dialogs/shared/PermissionComponents.tsx:16 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:203 msgid "Deny" msgstr "Отказване" @@ -14910,15 +14915,16 @@ msgstr "Въведи {digitCount}-цифрения код от приложен msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Въведи {digitCount}-цифрения код от приложението за удостоверяване." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:108 -msgid "Enter the code" -msgstr "Въведи кода" - #. Inline validation error on the verification step of the DSA report flow when the code field is empty. #: src/features/moderation/components/pages/ReportPage.tsx:74 msgid "Enter the code before continuing." msgstr "Въведи кода, преди да продължиш." +#. Title of the browser page where the user types the 12-character code the app shows under Signing in on another device. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +msgid "Enter the code from the {PRODUCT_NAME} app" +msgstr "Въведете кода от приложението {PRODUCT_NAME}" + #. Body text in the authentication sudo verification modal. Keep the tone plain and specific. #: src/features/auth/components/modals/SudoVerificationModal.tsx:56 msgid "Enter the code from your authenticator app." @@ -14933,10 +14939,6 @@ msgstr "Въведи кода, изпратен на текущия ти име msgid "Enter the code sent to your email address." msgstr "Въведи кода, изпратен на имейл адреса ти." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:111 -msgid "Enter the code shown in the app to continue." -msgstr "Въведи кода, показан в приложението, за да продължиш." - #: src/features/user/components/modals/BouncedEmailChangeModal.tsx:157 #: src/features/user/components/modals/EmailChangeModal.tsx:244 msgid "Enter the code we emailed to your new address." @@ -14959,6 +14961,11 @@ msgstr "Въведи новия имейл, който искаш да изпо msgid "Enter the PIN for your security key to continue." msgstr "Въведи ПИН кода на защитния си ключ, за да продължиш." +#. Title in the desktop app above the code the user types into a browser on another device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:228 +msgid "Enter this code in your browser" +msgstr "Въведете този код в браузъра си" + #: src/features/auth/flow/HandoffCodeDisplay.tsx:132 msgid "Enter this code in your browser to complete sign-in." msgstr "Въведи този код в браузъра си, за да завършиш влизането." @@ -15362,7 +15369,7 @@ msgstr "Изтича между {earliest} и {latest}" msgid "Expires in {remaining}s" msgstr "Изтича след {remaining} сек" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:374 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:250 msgid "Expires in {remainingSeconds}s" msgstr "Изтича след {remainingSeconds} сек." @@ -16165,7 +16172,7 @@ msgid "Fluxer" msgstr "Fluxer" #. Status shown when browser sign-in status polling gives up after repeated failures. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:72 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:57 msgid "Fluxer stopped checking whether the browser approved this sign-in. It didn't lose your code." msgstr "Fluxer спря да проверява дали браузърът е одобрил влизането. Кодът ви не е изгубен." @@ -16952,8 +16959,6 @@ msgstr "Генерирай линк за споделяне или копира msgid "Generate invite link" msgstr "Генериране на линк за покана" -#. Button label that replaces an expired browser sign-in code with a fresh one. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:64 #: src/features/auth/flow/HandoffCodeDisplay.tsx:117 msgid "Generate new code" msgstr "Генериране на нов код" @@ -17348,6 +17353,16 @@ msgstr "Върни се и въведи валиден имейл." msgid "Go back to {productName} to continue." msgstr "Върни се към {productName}, за да продължиш." +#. Shown after approving a sign-in for an app on another device, which signs in by itself shortly. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:292 +msgid "Go back to the {PRODUCT_NAME} app. It finishes signing in on its own." +msgstr "Върни се към приложението {PRODUCT_NAME}. То ще завърши влизането само." + +#. Shown after approving, when the browser has already handed the sign-in back to the desktop app. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:288 +msgid "Go back to the {PRODUCT_NAME} app. You can close this tab." +msgstr "Върни се към приложението {PRODUCT_NAME}. Можеш да затвориш този раздел." + #. Accessible label for the community row of an expression info card, which opens a community the viewer is already a member of. {communityName} is the community name. #: src/features/expressions/components/ExpressionInfoCard.tsx:89 msgid "Go to {communityName}" @@ -19295,11 +19310,6 @@ msgstr "Невалиден JSON. Постави пълния отговор от msgid "Invalid or expired code" msgstr "Невалиден или изтекъл код" -#. Desktop handoff flow error shown when the entered pairing code is invalid or expired. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:13 -msgid "Invalid or expired code. Try again." -msgstr "Невалиден или изтекъл код. Опитай отново." - #. Short label in the authentication authorize flow. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/state/useAuthorizeFlow.ts:82 msgid "Invalid redirect_uri" @@ -20876,7 +20886,7 @@ msgstr "Формат на часа според езика" msgid "Localization" msgstr "Локализация" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:192 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:109 #: src/features/user/components/modals/tabs/DevicesTab.tsx:152 msgid "Location" msgstr "Местоположение" @@ -21034,6 +21044,11 @@ msgstr "Да направиш ли {userName} собственик на груп msgid "Make group owner" msgstr "Направи собственик на групата" +#. Shown above the code on the browser approval page when the app cannot be signed in automatically. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:253 +msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." +msgstr "Уверете се, че този код съвпада с този в приложението {PRODUCT_NAME}." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" @@ -24668,6 +24683,11 @@ msgstr "На <0>{listPriceEffectiveDate} абонаментът ти ще с msgid "On click" msgstr "При щракване" +#. One line explanation in the desktop app above the code. signInAddress is the web address of the sign-in page, such as web.fluxer.app/login?handoff=1. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:236 +msgid "On your other device, sign in at {signInAddress} and enter this code when asked." +msgstr "На другото си устройство влезте на адрес {signInAddress} и въведете този код, когато бъдете попитани." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:715 msgid "Once deleted, the application and its credentials are permanently removed." msgstr "След изтриване приложението и идентификационните му данни се премахват за постоянно." @@ -24733,6 +24753,11 @@ msgstr "Само @споменавания" msgid "Only applies on wide screens." msgstr "Прилага се само на широки екрани." +#. Warning under the title of the browser approval page, so people do not approve a sign-in someone else started. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:245 +msgid "Only continue if you started this sign-in on a device you control." +msgstr "Продължете само ако сте започнали това влизане на устройство, което контролирате." + #. Body copy in the mature content check modal. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:32 msgid "Only credit cards are accepted. Debit and prepaid cards cannot be used for the mature content check." @@ -24921,6 +24946,11 @@ msgstr "Отваряне на {landmarkName}" msgid "Open {premiumProductFullName}" msgstr "Отвори {premiumProductFullName}" +#. Button on the browser page after approving that opens the desktop app again if it did not come to the front. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:304 +msgid "Open {PRODUCT_NAME}" +msgstr "Отвори {PRODUCT_NAME}" + #. Button label that opens the desktop app. productName is the app name. #. Button that hands SSO sign-in back to the mobile app. productName is the app name. #: src/features/auth/components/pages/SsoCallbackPage.tsx:47 @@ -25011,12 +25041,15 @@ msgstr "Отваряне на опциите за банера" msgid "Open bookmarks" msgstr "Отваряне на отметките" -#. Button label that opens the browser sign-in handoff page. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:56 #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:184 msgid "Open browser" msgstr "Отваряне на браузъра" +#. Button in the desktop app that reopens the browser sign-in page while the app waits for the browser. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:53 +msgid "Open browser again" +msgstr "Отвори браузъра отново" + #. Primary button in the screen-share picker on web. Hands off to the browser's native getDisplayMedia picker. #: src/features/voice/components/modals/ScreenSharePickerModal.tsx:209 msgid "Open browser picker" @@ -25392,10 +25425,6 @@ msgstr "Отваряне на настройките за глас и видео msgid "Open with {accountName} on {instanceName}" msgstr "Отвори с {accountName} в {instanceName}" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:414 -msgid "Open your browser to finish signing in." -msgstr "Отворете браузъра си, за да завършите влизането." - #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:137 msgid "Open your browser, sign in, then enter the code below to link your account." msgstr "Отвори браузъра си, влез в акаунта си, след което въведи кода по-долу, за да свържеш акаунта си." @@ -25421,7 +25450,7 @@ msgstr "Отваря страницата „Членове“. Натисни #. Short label in the language tab. Keep it concise. #. Spellcheck engine option in the textarea spellcheck submenu. Uses the host operating system spellchecker. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:79 #: src/features/user/components/modals/tabs/LanguageTab.tsx:110 msgid "Operating system" @@ -26439,7 +26468,7 @@ msgstr "План" msgid "Plans, perks, gifts and your subscription all live on one page." msgstr "Планове, екстри, подаръци и абонаментът ви са на една страница." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:172 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:89 msgid "Platform" msgstr "Платформа" @@ -31859,11 +31888,6 @@ msgstr "Покажи чата" msgid "Show chat with {count, plural, one {# unread message} other {# unread messages}}" msgstr "Покажи чата с {count, plural, one {# непрочетено съобщение} other {# непрочетени съобщения}}" -#. Button label that opens the manual browser handoff code fallback. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:60 -msgid "Show code" -msgstr "Покажи кода" - #. Developer voice status menu option for displaying the voice connection identifier. #: src/features/voice/components/voice_connection_status/VoiceConnectionStatusInner.tsx:76 msgid "Show connection ID" @@ -32306,7 +32330,9 @@ msgstr "Показва банера в собствен раздел под за msgid "Sidebar" msgstr "Странична лента" +#. Button in the browser that approves signing in to the desktop or mobile app that asked for it. #. Generic authentication action label. Use for buttons, links, page titles, and accessible labels. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:33 #: src/features/i18n/utils/CommonMessageDescriptors.ts:79 msgid "Sign in" msgstr "Вход" @@ -32321,10 +32347,35 @@ msgstr "Влез отново" msgid "Sign in again as {accountLabel}" msgstr "Влезте отново като {accountLabel}" +#. Shown in the desktop app while it waits for the browser. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:193 +msgid "Sign in to {instanceName} in your browser and confirm. This app finishes signing in on its own." +msgstr "Влезте в {instanceName} в браузъра си и потвърдете. Това приложение ще завърши влизането само." + +#. Shown in the desktop app above the code when the browser cannot return the sign-in automatically. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:189 +msgid "Sign in to {instanceName} in your browser, and check that it shows this code:" +msgstr "Влезте в {instanceName} в браузъра си и проверете дали се показва този код:" + #: src/features/auth/flow/GiftHeader.tsx:33 msgid "Sign in to claim your gift" msgstr "Влез, за да вземеш подаръка си" +#. Title of the browser page where the user approves signing in to an app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:71 +msgid "Sign in to the {PRODUCT_NAME} app" +msgstr "Влезте в приложението {PRODUCT_NAME}" + +#. Title of the browser page where the user approves signing in to the desktop app that opened it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:58 +msgid "Sign in to the {PRODUCT_NAME} desktop app" +msgstr "Влезте в десктоп приложението {PRODUCT_NAME}" + +#. Title of the browser page where the user approves signing in to the mobile app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:65 +msgid "Sign in to the {PRODUCT_NAME} mobile app" +msgstr "Влезте в мобилното приложение {PRODUCT_NAME}" + #. Action label that starts passkey authentication. #: src/features/auth/AuthMessageDescriptors.ts:13 msgid "Sign in with a passkey" @@ -32403,14 +32454,10 @@ msgstr "Излизане от акаунта ти на други устройс msgid "Sign out?" msgstr "Да излезеш ли?" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:234 -msgid "Sign-in approved" -msgstr "Влизането е одобрено" - -#. Short label in the authentication handoff approval flow. Keep the tone plain and specific. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:26 -msgid "Sign-in code" -msgstr "Код за вход" +#. Title of the browser page after the user cancelled the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:322 +msgid "Sign-in cancelled" +msgstr "Входът е отказан" #. Section title for email address and password controls in the account security tab. Keep it concise. #: src/features/user/components/modals/tabs/account_security_tab/AccountSecuritySections.tsx:23 @@ -32433,10 +32480,6 @@ msgstr "Процес на вход" msgid "Sign-in method" msgstr "Метод за вход" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:84 -msgid "Sign-in request" -msgstr "Заявка за влизане" - #. Aria label on the signal-strength icon shown while the first latency sample is still pending. #: src/features/voice/components/SignalStrengthIcon.tsx:16 msgid "Signal strength loading" @@ -32453,6 +32496,21 @@ msgstr "Влизане" msgid "Signed-in devices" msgstr "Устройства с активен вход" +#. Shown on the browser approval page above the buttons. name is the display name of the account that will be signed in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:137 +msgid "Signing in as {name}" +msgstr "Влизане като {name}" + +#. Text button in the desktop app that shows a code to type into a browser on a different device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:207 +msgid "Signing in on another device?" +msgstr "Влизате от друго устройство?" + +#. Title while the browser approves the sign-in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:228 +msgid "Signing in…" +msgstr "Влизане…" + #. Label for Bluesky OAuth signing key ID input. #: src/features/app/components/setup/SetupWizardSteps.tsx:1161 msgid "Signing key ID" @@ -33504,6 +33562,8 @@ msgstr "Стартиране на тест на микрофона" msgid "Start minimized" msgstr "Стартирай свит" +#. Button on the browser page after cancelling that goes back to choosing an account. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:337 #: src/features/moderation/components/report/ReportStepDetails.tsx:326 #: src/features/moderation/components/report/ReportStepEmail.tsx:97 #: src/features/moderation/components/report/ReportStepVerification.tsx:134 @@ -34910,6 +34970,11 @@ msgstr "Тайландски" msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Благодарим ти, че помагаш за безопасността на {productName}. Ще прегледаме сигнала ти възможно най-скоро." +#. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 +msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." +msgstr "Този код не е валиден в {instanceHost}. Проверете кода в приложението {productName} и опитайте отново." + #. Body of the passkey page after the passkey prompt failed or was dismissed. Keep plain. #: src/features/auth/passkey_migration/PasskeyBridgePage.tsx:36 msgid "That didn't work. Try again or cancel." @@ -34953,11 +35018,6 @@ msgstr "Съобщението не можа да бъде изтрито" msgid "That message is gone, or you lost access to the conversation." msgstr "Това съобщение е изтрито или вече нямаш достъп до разговора." -#. Error shown when a browser sign-in handoff code expires before it is approved. -#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 -msgid "That sign-in code expired. Try again." -msgstr "Този код за влизане изтече. Опитайте отново." - #. End-of-list line in the saved messages popout after every bookmark has been shown. #. End-of-list line on the saved messages page after every bookmark has been shown. #: src/features/messaging/components/pages/SavedMessagesPage.tsx:35 @@ -34965,6 +35025,21 @@ msgstr "Този код за влизане изтече. Опитайте от msgid "That's all of them." msgstr "Това е всичко." +#. Warning on the browser approval page when the app asked for a different account than the one chosen. requestedIdentifier is the email or username the app asked for, name is the chosen account's display name. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:131 +msgid "The {PRODUCT_NAME} app asked to sign in as {requestedIdentifier}, but you chose {name}." +msgstr "Приложението {PRODUCT_NAME} поиска вход като {requestedIdentifier}, но вие избрахте {name}." + +#. Explains where the code comes from, under the title of the browser page where it is typed. Signing in on another device is the label of a button in the app and must match its translation. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:187 +msgid "The {PRODUCT_NAME} app on your other device shows it under Signing in on another device. Only enter a code from a device you control." +msgstr "Приложението {PRODUCT_NAME} на другото ви устройство се показва под „Влизане от друго устройство“. Въвеждайте код само от устройство, което контролирате." + +#. Shown after the user cancelled the sign-in request in the browser. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:327 +msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." +msgstr "Приложението {PRODUCT_NAME} не беше вписано. Можете да затворите този раздел." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -34983,10 +35058,6 @@ msgstr "Приложението се срина" msgid "The app has crashed. Checking for updates that might fix this issue…" msgstr "Приложението се срина. Проверяваме за актуализации, които може да отстранят този проблем…" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:237 -msgid "The app should now be signed in to your account." -msgstr "Приложението вече трябва да е влязло в акаунта ти." - #. Activity log detail line under a lifted ban, for a temporary ban that had already ended on its own before it was lifted. A ban is the community ban, not the feature that blocks a user. {date} is when the ban ended, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:55 msgid "The ban had already expired on {date}" @@ -35184,6 +35255,16 @@ msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "Източникът на споделяне на екрана спря да изпраща видео, поради което споделянето на екрана беше прекратено." +#. Error shown in the desktop app when a browser sign-in request expires before it is approved in the browser. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 +msgid "The sign-in request expired before your browser approved it." +msgstr "Заявката за влизане изтече, преди браузърът ви да я одобри." + +#. Error shown in the desktop app when the user pressed Cancel on the browser sign-in page. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:14 +msgid "The sign-in was cancelled in your browser." +msgstr "Влизането беше отменено в браузъра ви." + #. Activity log detail line under a deleted sticker, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the sticker, shown as a clickable user chip. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts:100 msgid "The sticker was uploaded by {user}" @@ -35408,6 +35489,11 @@ msgstr "Трети страни" msgid "This account can't be blocked." msgstr "Този акаунт не може да бъде блокиран." +#. Error in the browser when the chosen account belongs to a different server than the app that asked to sign in. accountHost and requestHost are server addresses. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:38 +msgid "This account is on {accountHost}, but the {productName} app is signing in to {requestHost}. Choose an account on {requestHost}." +msgstr "Този акаунт е в {accountHost}, но приложението {productName} се опитва да влезе в {requestHost}. Изберете акаунт от {requestHost}." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:418 msgid "This action cannot be undone. All associated data, including the bot user, will be permanently deleted." msgstr "Това действие не може да бъде отменено. Всички свързани данни, включително потребителят на бота, ще бъдат изтрити завинаги." @@ -35551,11 +35637,6 @@ msgstr "Това изцяло изчиства състоянието ти на msgid "This code doesn't exist." msgstr "Този код не съществува." -#. Status shown under the browser sign-in code once its countdown reaches zero. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:68 -msgid "This code expired." -msgstr "Този код е изтекъл." - #. Gift redemption error modal body for an invalid or already used code. #: src/features/gift/commands/GiftCommands.tsx:37 msgid "This code is invalid or already used." @@ -36075,6 +36156,11 @@ msgstr "Линкът за нулиране е изтекъл. Линковете msgid "This shows how links appear: {linkPreviewExampleUrl}" msgstr "Така изглеждат линковете: {linkPreviewExampleUrl}" +#. Error in the browser when the sign-in request from the desktop app no longer exists, because it expired or the app cancelled it. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:20 +msgid "This sign-in request expired or was cancelled in the {productName} app. Start again from the app." +msgstr "Тази заявка за влизане е изтекла или е била отменена в приложението {productName}. Опитайте отново от приложението." + #. Label above the community a sticker comes from in the sticker info card. #: src/features/expressions/components/ExpressionInfoCard.tsx:75 msgid "This sticker is from" @@ -38520,6 +38606,11 @@ msgstr "Използвай {url} там, където трябва да се в msgid "Use a dedicated modal to set a message history threshold date for members who don't have the {readMessageHistoryPermissionLabel} permission." msgstr "Използвай отделен прозорец, за да зададеш гранична дата за историята на съобщенията за членове, които нямат разрешението „{readMessageHistoryPermissionLabel}“." +#. Text button on the browser approval page that goes back to choosing which account signs in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:149 +msgid "Use a different account" +msgstr "Използвай друг профил" + #: src/features/auth/flow/instance_selector/InstancePickerRows.tsx:267 msgid "Use a self-hosted instance URL" msgstr "Използвайте URL адрес на самостоятелно хостван сървър" @@ -39296,10 +39387,6 @@ msgstr "Потвърди имейла си, за да закупиш {premiumPro msgid "Verify your email to start DMs." msgstr "Потвърди имейла си, за да започнеш DM." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:142 -msgid "Verifying code…" -msgstr "Проверяване на кода…" - #: src/features/auth/components/pages/ResetPasswordPage.tsx:145 msgid "Verifying your reset link…" msgstr "Проверяване на линка за нулиране…" @@ -40073,10 +40160,6 @@ msgstr "Изчакай малко, преди да изтриеш още съо msgid "Wait between messages. Members with \"{bypassSlowmodePermissionLabel}\" can bypass this." msgstr "Изчакване между съобщенията. Членовете с „{bypassSlowmodePermissionLabel}“ могат да го заобиколят." -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:445 -msgid "Waiting for browser approval." -msgstr "Чакаме одобрение от браузъра." - #. Tooltip explaining that video / screen share controls are gated while the voice connection is not yet ready. #: src/features/voice/components/voice_connection_status/LocalParticipantControls.tsx:45 msgid "Waiting for connection..." @@ -40118,10 +40201,6 @@ msgstr "Събуждане" msgid "Warning" msgstr "Предупреждение" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:158 -msgid "Was this you?" -msgstr "Ти ли беше?" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:243 msgctxt "us-state" @@ -40959,10 +41038,6 @@ msgstr "Вече имаш доживотен {premiumProductName}" msgid "You already have this connection." msgstr "Вече имаш тази връзка." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:87 -msgid "You are about to authorize an app to sign in to your account. Only continue if you initiated this request from a device you control." -msgstr "Предстои да разрешиш на приложение да влезе в акаунта ти. Продължи само ако заявката идва от теб, от устройство, което контролираш." - #. External link warning title. productName is the Fluxer product name. #: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:22 msgid "You are about to leave {productName}" @@ -41732,6 +41807,11 @@ msgstr "Ползваш стара цена. Текущата цена за то msgid "You're sending messages too quickly" msgstr "Изпращаш съобщения твърде бързо" +#. Title of the browser page after the user approved signing in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:282 +msgid "You're signed in" +msgstr "Влезли сте" + #. Status text on the screen-share hover popout shown to the local streamer. Lightly playful tone. #: src/features/voice/components/StreamWatchHoverPopout.tsx:43 msgid "You're streaming!" diff --git a/fluxer_app/src/features/i18n/locales/cs/messages.po b/fluxer_app/src/features/i18n/locales/cs/messages.po index c0eb8c44f..81367c882 100644 --- a/fluxer_app/src/features/i18n/locales/cs/messages.po +++ b/fluxer_app/src/features/i18n/locales/cs/messages.po @@ -1573,7 +1573,7 @@ msgid "{imageCount, plural, one {# image} other {# images}}, {videoCount, plural msgstr "{imageCount, plural, one {# obrázek} few {# obrázky} many {# obrázku} other {# obrázků}}, {videoCount, plural, one {# video} few {# videa} many {# videa} other {# videí}}" #. Explanation shown when the selected instance advertises no web app endpoint. Instance name is interpolated. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:76 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:61 msgid "{instanceName} does not publish a web address, so sign-in cannot be handed to a browser." msgstr "{instanceName} nezveřejňuje webovou adresu, takže přihlášení nelze předat prohlížeči." @@ -2777,14 +2777,6 @@ msgstr "formátovaný vložený obsah nebo náhled odkazu (nikoli nahraný soubo msgid "A separate profile for each community" msgstr "Samostatný profil pro každé společenství" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:164 -msgid "A sign-in request was made for your account. Only approve if you initiated it." -msgstr "Přišel požadavek na přihlášení k vašemu účtu. Schvalte jej pouze v případě, že jste se přihlašovali vy." - -#: src/features/auth/flow/HandoffApprovalFlow.tsx:162 -msgid "A sign-in request was made from the following device. Only approve if you recognize it." -msgstr "Byl odeslán požadavek na přihlášení z následujícího zařízení. Schvalte jej, pouze pokud jej poznáváte." - #. Description for has:sticker. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:51 msgid "a sticker" @@ -4811,10 +4803,6 @@ msgstr "Použít pro všechny komunity" msgid "Approval required" msgstr "Vyžaduje schválení" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:206 -msgid "Approve" -msgstr "Schválit" - #. Hint under the sign-in option on fluxer.com that pairs a newly installed app with the old installed app. productName is the app name. #: src/features/auth/flow/AuthLoginLayout.tsx:101 msgid "Approve this app from the {productName} app you already use. No password needed." @@ -7873,6 +7861,11 @@ msgstr "Kontrola přístupu..." msgid "Checking screen recording permission..." msgstr "Kontrola oprávnění k nahrávání obrazovky..." +#. Title while the browser looks up the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:224 +msgid "Checking the sign-in request…" +msgstr "Kontroluje se žádost o přihlášení…" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -8847,6 +8840,11 @@ msgstr "Bloky kódu" msgid "Code expired" msgstr "Platnost kódu vypršela" +#. Label of the field in the browser where the user types the 12-character code shown in the desktop or mobile app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:28 +msgid "Code from the {productName} app" +msgstr "Kód z aplikace {productName}" + #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 @@ -9348,7 +9346,6 @@ msgstr "Zcela skrýt odznak {premiumProductName} před ostatními uživateli" #: src/features/auth/components/pages/SsoCallbackPage.tsx:256 #: src/features/auth/components/pages/SsoCallbackPage.tsx:322 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:216 msgid "Completing sign-in…" msgstr "Dokončování přihlášení…" @@ -9782,7 +9779,6 @@ msgstr "Kontextové nabídky lze otevřít levým kliknutím (na tlačítka) neb #: src/features/auth/components/modals/DeviceRevokeModal.tsx:77 #: src/features/auth/components/modals/PasskeyPinModal.tsx:111 #: src/features/auth/components/pages/oauth_authorize_page/OAuthAccountStep.tsx:36 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/connection/components/modals/AddConnectionModal.tsx:384 #: src/features/i18n/utils/CommonMessageDescriptors.ts:726 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:413 @@ -9790,6 +9786,11 @@ msgstr "Kontextové nabídky lze otevřít levým kliknutím (na tlačítka) neb msgid "Continue" msgstr "Pokračovat" +#. Title in the desktop app while it waits for the user to sign in on the browser page it opened. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:177 +msgid "Continue in your browser" +msgstr "Pokračovat v prohlížeči" + #. Button in the gift time confirmation that proceeds to subscription checkout. #: src/features/app/components/dialogs/components/plutonium/hooks/useCheckoutActions.tsx:145 msgid "Continue to checkout" @@ -10437,7 +10438,7 @@ msgid "Couldn't close DM" msgstr "Nepodařilo se zavřít soukromou konverzaci" #. Desktop handoff flow error shown when finalizing the sign-in fails after a valid code. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:21 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:34 msgid "Couldn't complete sign-in. Try again." msgstr "Přihlášení se nepodařilo dokončit. Zkuste to znovu." @@ -10831,6 +10832,11 @@ msgstr "Nepodařilo se spustit autorizaci pro {blueskyProviderName}" msgid "Couldn't start checkout" msgstr "Nepodařilo se spustit platbu" +#. Shown in the desktop app when the browser sign-in request could not be created. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:66 +msgid "Couldn't start signing in with your browser." +msgstr "Nepodařilo se spustit přihlašování přes prohlížeč." + #. Toast error shown when creating a new account connection fails. #: src/features/connection/commands/ConnectionCommands.ts:27 msgid "Couldn't start the connection" @@ -10942,7 +10948,7 @@ msgid "Couldn't upload banner" msgstr "Nepodařilo se nahrát banner" #. Desktop handoff flow error shown when verifying the pairing code fails for an unexpected reason. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:17 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:30 msgid "Couldn't verify that code. Try again." msgstr "Kód se nepodařilo ověřit. Zkuste to znovu." @@ -12503,7 +12509,6 @@ msgstr "Zhuštěné rozvržení" #. Short label in the settings dialog permission components. Keep the tone plain and specific. #: src/features/app/components/dialogs/shared/PermissionComponents.tsx:16 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:203 msgid "Deny" msgstr "Odepřít" @@ -14910,15 +14915,16 @@ msgstr "Zadejte {digitCount}místný kód ze své ověřovací aplikace nebo jed msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Zadejte {digitCount}místný kód ze své ověřovací aplikace." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:108 -msgid "Enter the code" -msgstr "Zadejte kód" - #. Inline validation error on the verification step of the DSA report flow when the code field is empty. #: src/features/moderation/components/pages/ReportPage.tsx:74 msgid "Enter the code before continuing." msgstr "Před pokračováním zadejte kód." +#. Title of the browser page where the user types the 12-character code the app shows under Signing in on another device. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +msgid "Enter the code from the {PRODUCT_NAME} app" +msgstr "Zadejte kód z aplikace {PRODUCT_NAME}" + #. Body text in the authentication sudo verification modal. Keep the tone plain and specific. #: src/features/auth/components/modals/SudoVerificationModal.tsx:56 msgid "Enter the code from your authenticator app." @@ -14933,10 +14939,6 @@ msgstr "Zadejte kód odeslaný na váš aktuální e-mail." msgid "Enter the code sent to your email address." msgstr "Zadejte kód odeslaný na vaši e-mailovou adresu." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:111 -msgid "Enter the code shown in the app to continue." -msgstr "Zadejte kód zobrazený v aplikaci a pokračujte." - #: src/features/user/components/modals/BouncedEmailChangeModal.tsx:157 #: src/features/user/components/modals/EmailChangeModal.tsx:244 msgid "Enter the code we emailed to your new address." @@ -14959,6 +14961,11 @@ msgstr "Zadejte nový e-mail, který chcete použít. Pošleme na něj kód." msgid "Enter the PIN for your security key to continue." msgstr "Zadejte PIN pro váš bezpečnostní klíč a pokračujte." +#. Title in the desktop app above the code the user types into a browser on another device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:228 +msgid "Enter this code in your browser" +msgstr "Zadejte tento kód do prohlížeče" + #: src/features/auth/flow/HandoffCodeDisplay.tsx:132 msgid "Enter this code in your browser to complete sign-in." msgstr "Zadejte tento kód do prohlížeče a dokončete přihlášení." @@ -15362,7 +15369,7 @@ msgstr "Platnost vyprší mezi {earliest} a {latest}" msgid "Expires in {remaining}s" msgstr "Vyprší za {remaining} s" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:374 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:250 msgid "Expires in {remainingSeconds}s" msgstr "Vyprší za {remainingSeconds} s" @@ -16165,7 +16172,7 @@ msgid "Fluxer" msgstr "Fluxer" #. Status shown when browser sign-in status polling gives up after repeated failures. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:72 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:57 msgid "Fluxer stopped checking whether the browser approved this sign-in. It didn't lose your code." msgstr "Fluxer přestal kontrolovat, zda prohlížeč schválil toto přihlášení. Váš kód neztratil." @@ -16952,8 +16959,6 @@ msgstr "Vygenerujte odkaz ke sdílení nebo zkopírujte svůj kombinovaný vlast msgid "Generate invite link" msgstr "Vygenerovat odkaz na pozvánku" -#. Button label that replaces an expired browser sign-in code with a fresh one. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:64 #: src/features/auth/flow/HandoffCodeDisplay.tsx:117 msgid "Generate new code" msgstr "Vygenerovat nový kód" @@ -17348,6 +17353,16 @@ msgstr "Vraťte se a zadejte platný e-mail." msgid "Go back to {productName} to continue." msgstr "Pro pokračování se vraťte do aplikace {productName}." +#. Shown after approving a sign-in for an app on another device, which signs in by itself shortly. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:292 +msgid "Go back to the {PRODUCT_NAME} app. It finishes signing in on its own." +msgstr "Zpět do aplikace {PRODUCT_NAME}. Přihlašování se samo dokončí." + +#. Shown after approving, when the browser has already handed the sign-in back to the desktop app. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:288 +msgid "Go back to the {PRODUCT_NAME} app. You can close this tab." +msgstr "Zpět do aplikace {PRODUCT_NAME}. Tuto kartu můžete zavřít." + #. Accessible label for the community row of an expression info card, which opens a community the viewer is already a member of. {communityName} is the community name. #: src/features/expressions/components/ExpressionInfoCard.tsx:89 msgid "Go to {communityName}" @@ -19295,11 +19310,6 @@ msgstr "Neplatný JSON. Vložte celou odpověď z výše uvedené adresy URL." msgid "Invalid or expired code" msgstr "Kód je neplatný nebo jeho platnost vypršela" -#. Desktop handoff flow error shown when the entered pairing code is invalid or expired. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:13 -msgid "Invalid or expired code. Try again." -msgstr "Kód je neplatný nebo jeho platnost vypršela. Zkuste to znovu." - #. Short label in the authentication authorize flow. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/state/useAuthorizeFlow.ts:82 msgid "Invalid redirect_uri" @@ -20876,7 +20886,7 @@ msgstr "Formát času podle místního nastavení" msgid "Localization" msgstr "Lokalizace" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:192 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:109 #: src/features/user/components/modals/tabs/DevicesTab.tsx:152 msgid "Location" msgstr "Poloha" @@ -21034,6 +21044,11 @@ msgstr "Chcete, aby se uživatel {userName} stal vlastníkem skupiny? Ztratíte msgid "Make group owner" msgstr "Nastavit jako vlastníka skupiny" +#. Shown above the code on the browser approval page when the app cannot be signed in automatically. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:253 +msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." +msgstr "Ujistěte se, že se tento kód shoduje s kódem v aplikaci {PRODUCT_NAME}." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" @@ -24668,6 +24683,11 @@ msgstr "Dne <0>{listPriceEffectiveDate} se cena vašeho předplatného změn msgid "On click" msgstr "Při kliknutí" +#. One line explanation in the desktop app above the code. signInAddress is the web address of the sign-in page, such as web.fluxer.app/login?handoff=1. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:236 +msgid "On your other device, sign in at {signInAddress} and enter this code when asked." +msgstr "Na jiném zařízení se přihlaste na adrese {signInAddress} a na vyžádání zadejte tento kód." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:715 msgid "Once deleted, the application and its credentials are permanently removed." msgstr "Po smazání budou aplikace a její přihlašovací údaje trvale odstraněny." @@ -24733,6 +24753,11 @@ msgstr "Jen zmínky @" msgid "Only applies on wide screens." msgstr "Platí pouze na dostatečně širokých obrazovkách." +#. Warning under the title of the browser approval page, so people do not approve a sign-in someone else started. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:245 +msgid "Only continue if you started this sign-in on a device you control." +msgstr "Pokračujte, pouze pokud jste toto přihlášení zahájili na zařízení, které ovládáte." + #. Body copy in the mature content check modal. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:32 msgid "Only credit cards are accepted. Debit and prepaid cards cannot be used for the mature content check." @@ -24921,6 +24946,11 @@ msgstr "Otevřít {landmarkName}" msgid "Open {premiumProductFullName}" msgstr "Otevřít {premiumProductFullName}" +#. Button on the browser page after approving that opens the desktop app again if it did not come to the front. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:304 +msgid "Open {PRODUCT_NAME}" +msgstr "Otevřít {PRODUCT_NAME}" + #. Button label that opens the desktop app. productName is the app name. #. Button that hands SSO sign-in back to the mobile app. productName is the app name. #: src/features/auth/components/pages/SsoCallbackPage.tsx:47 @@ -25011,12 +25041,15 @@ msgstr "Otevřít možnosti banneru" msgid "Open bookmarks" msgstr "Otevřít záložky" -#. Button label that opens the browser sign-in handoff page. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:56 #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:184 msgid "Open browser" msgstr "Otevřít prohlížeč" +#. Button in the desktop app that reopens the browser sign-in page while the app waits for the browser. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:53 +msgid "Open browser again" +msgstr "Otevřít prohlížeč znovu" + #. Primary button in the screen-share picker on web. Hands off to the browser's native getDisplayMedia picker. #: src/features/voice/components/modals/ScreenSharePickerModal.tsx:209 msgid "Open browser picker" @@ -25392,10 +25425,6 @@ msgstr "Otevřít nastavení zvuku a videa" msgid "Open with {accountName} on {instanceName}" msgstr "Otevřít s {accountName} na {instanceName}" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:414 -msgid "Open your browser to finish signing in." -msgstr "Otevřete prohlížeč a dokončete přihlášení." - #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:137 msgid "Open your browser, sign in, then enter the code below to link your account." msgstr "Otevřete prohlížeč, přihlaste se a poté zadejte níže uvedený kód pro propojení účtu." @@ -25421,7 +25450,7 @@ msgstr "Otevře stránku Členové. Stisknutím mezerníku nebo Enter otevřete. #. Short label in the language tab. Keep it concise. #. Spellcheck engine option in the textarea spellcheck submenu. Uses the host operating system spellchecker. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:79 #: src/features/user/components/modals/tabs/LanguageTab.tsx:110 msgid "Operating system" @@ -26439,7 +26468,7 @@ msgstr "Plán" msgid "Plans, perks, gifts and your subscription all live on one page." msgstr "Plány, výhody, dárky a vaše předplatné – vše najdete na jedné stránce." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:172 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:89 msgid "Platform" msgstr "Platforma" @@ -31859,11 +31888,6 @@ msgstr "Zobrazit chat" msgid "Show chat with {count, plural, one {# unread message} other {# unread messages}}" msgstr "Zobrazit chat s {count, plural, one {# nepřečtenou zprávou} other {# nepřečtenými zprávami}}" -#. Button label that opens the manual browser handoff code fallback. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:60 -msgid "Show code" -msgstr "Zobrazit kód" - #. Developer voice status menu option for displaying the voice connection identifier. #: src/features/voice/components/voice_connection_status/VoiceConnectionStatusInner.tsx:76 msgid "Show connection ID" @@ -32306,7 +32330,9 @@ msgstr "Zobrazí banner v samostatné sekci pod záhlavím komunity." msgid "Sidebar" msgstr "Postranní panel" +#. Button in the browser that approves signing in to the desktop or mobile app that asked for it. #. Generic authentication action label. Use for buttons, links, page titles, and accessible labels. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:33 #: src/features/i18n/utils/CommonMessageDescriptors.ts:79 msgid "Sign in" msgstr "Přihlásit se" @@ -32321,10 +32347,35 @@ msgstr "Přihlásit se znovu" msgid "Sign in again as {accountLabel}" msgstr "Znovu se přihlaste jako {accountLabel}" +#. Shown in the desktop app while it waits for the browser. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:193 +msgid "Sign in to {instanceName} in your browser and confirm. This app finishes signing in on its own." +msgstr "Přihlaste se do {instanceName} v prohlížeči a potvrďte. Tato aplikace dokončí přihlášení sama." + +#. Shown in the desktop app above the code when the browser cannot return the sign-in automatically. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:189 +msgid "Sign in to {instanceName} in your browser, and check that it shows this code:" +msgstr "Přihlaste se do {instanceName} ve svém prohlížeči a zkontrolujte, zda se zobrazuje tento kód:" + #: src/features/auth/flow/GiftHeader.tsx:33 msgid "Sign in to claim your gift" msgstr "Přihlaste se a převezměte si dárek" +#. Title of the browser page where the user approves signing in to an app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:71 +msgid "Sign in to the {PRODUCT_NAME} app" +msgstr "Přihlásit se do aplikace {PRODUCT_NAME}" + +#. Title of the browser page where the user approves signing in to the desktop app that opened it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:58 +msgid "Sign in to the {PRODUCT_NAME} desktop app" +msgstr "Přihlásit se do aplikace {PRODUCT_NAME} pro počítače" + +#. Title of the browser page where the user approves signing in to the mobile app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:65 +msgid "Sign in to the {PRODUCT_NAME} mobile app" +msgstr "Přihlásit se do mobilní aplikace {PRODUCT_NAME}" + #. Action label that starts passkey authentication. #: src/features/auth/AuthMessageDescriptors.ts:13 msgid "Sign in with a passkey" @@ -32403,14 +32454,10 @@ msgstr "Odhlásit ostatní zařízení z vašeho účtu" msgid "Sign out?" msgstr "Odhlásit se?" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:234 -msgid "Sign-in approved" -msgstr "Přihlášení schváleno" - -#. Short label in the authentication handoff approval flow. Keep the tone plain and specific. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:26 -msgid "Sign-in code" -msgstr "Přihlašovací kód" +#. Title of the browser page after the user cancelled the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:322 +msgid "Sign-in cancelled" +msgstr "Přihlášení zrušeno" #. Section title for email address and password controls in the account security tab. Keep it concise. #: src/features/user/components/modals/tabs/account_security_tab/AccountSecuritySections.tsx:23 @@ -32433,10 +32480,6 @@ msgstr "Průběh přihlášení" msgid "Sign-in method" msgstr "Metoda přihlášení" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:84 -msgid "Sign-in request" -msgstr "Žádost o přihlášení" - #. Aria label on the signal-strength icon shown while the first latency sample is still pending. #: src/features/voice/components/SignalStrengthIcon.tsx:16 msgid "Signal strength loading" @@ -32453,6 +32496,21 @@ msgstr "Přihlášeno" msgid "Signed-in devices" msgstr "Přihlášená zařízení" +#. Shown on the browser approval page above the buttons. name is the display name of the account that will be signed in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:137 +msgid "Signing in as {name}" +msgstr "Přihlášení jako {name}" + +#. Text button in the desktop app that shows a code to type into a browser on a different device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:207 +msgid "Signing in on another device?" +msgstr "Přihlašujete se na jiném zařízení?" + +#. Title while the browser approves the sign-in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:228 +msgid "Signing in…" +msgstr "Přihlašování…" + #. Label for Bluesky OAuth signing key ID input. #: src/features/app/components/setup/SetupWizardSteps.tsx:1161 msgid "Signing key ID" @@ -33504,6 +33562,8 @@ msgstr "Spustit test mikrofonu" msgid "Start minimized" msgstr "Začít minimalizováno" +#. Button on the browser page after cancelling that goes back to choosing an account. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:337 #: src/features/moderation/components/report/ReportStepDetails.tsx:326 #: src/features/moderation/components/report/ReportStepEmail.tsx:97 #: src/features/moderation/components/report/ReportStepVerification.tsx:134 @@ -34910,6 +34970,11 @@ msgstr "Thajština" msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Děkujeme, že pomáháte udržovat {productName} v bezpečí. Vaše nahlášení posoudíme co nejdříve." +#. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 +msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." +msgstr "Tento kód není platný na adrese {instanceHost}. Zkontrolujte kód v aplikaci {productName} a zkuste to znovu." + #. Body of the passkey page after the passkey prompt failed or was dismissed. Keep plain. #: src/features/auth/passkey_migration/PasskeyBridgePage.tsx:36 msgid "That didn't work. Try again or cancel." @@ -34953,11 +35018,6 @@ msgstr "Zprávu se nepodařilo smazat" msgid "That message is gone, or you lost access to the conversation." msgstr "Tato zpráva zmizela, nebo jste ztratili přístup ke konverzaci." -#. Error shown when a browser sign-in handoff code expires before it is approved. -#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 -msgid "That sign-in code expired. Try again." -msgstr "Platnost přihlašovacího kódu vypršela. Zkuste to znovu." - #. End-of-list line in the saved messages popout after every bookmark has been shown. #. End-of-list line on the saved messages page after every bookmark has been shown. #: src/features/messaging/components/pages/SavedMessagesPage.tsx:35 @@ -34965,6 +35025,21 @@ msgstr "Platnost přihlašovacího kódu vypršela. Zkuste to znovu." msgid "That's all of them." msgstr "To je vše." +#. Warning on the browser approval page when the app asked for a different account than the one chosen. requestedIdentifier is the email or username the app asked for, name is the chosen account's display name. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:131 +msgid "The {PRODUCT_NAME} app asked to sign in as {requestedIdentifier}, but you chose {name}." +msgstr "Aplikace {PRODUCT_NAME} se pokusila přihlásit jako {requestedIdentifier}, ale vy jste vybrali {name}." + +#. Explains where the code comes from, under the title of the browser page where it is typed. Signing in on another device is the label of a button in the app and must match its translation. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:187 +msgid "The {PRODUCT_NAME} app on your other device shows it under Signing in on another device. Only enter a code from a device you control." +msgstr "Aplikace {PRODUCT_NAME} na vašem druhém zařízení se zobrazí pod možností Přihlášení na jiném zařízení. Zadejte kód pouze ze zařízení, které ovládáte." + +#. Shown after the user cancelled the sign-in request in the browser. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:327 +msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." +msgstr "Aplikace {PRODUCT_NAME} nebyla přihlášena. Tuto kartu můžete zavřít." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -34983,10 +35058,6 @@ msgstr "Aplikace spadla" msgid "The app has crashed. Checking for updates that might fix this issue…" msgstr "Aplikace spadla. Vyhledávají se aktualizace, které by tento problém mohly vyřešit…" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:237 -msgid "The app should now be signed in to your account." -msgstr "Aplikace by nyní měla být přihlášena k vašemu účtu." - #. Activity log detail line under a lifted ban, for a temporary ban that had already ended on its own before it was lifted. A ban is the community ban, not the feature that blocks a user. {date} is when the ban ended, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:55 msgid "The ban had already expired on {date}" @@ -35184,6 +35255,16 @@ msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "Zdroj sdílení obrazovky přestal odesílat video, takže bylo ukončeno sdílení obrazovky." +#. Error shown in the desktop app when a browser sign-in request expires before it is approved in the browser. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 +msgid "The sign-in request expired before your browser approved it." +msgstr "Platnost žádosti o přihlášení vypršela, než ji váš prohlížeč schválil." + +#. Error shown in the desktop app when the user pressed Cancel on the browser sign-in page. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:14 +msgid "The sign-in was cancelled in your browser." +msgstr "Přihlášení bylo zrušeno v prohlížeči." + #. Activity log detail line under a deleted sticker, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the sticker, shown as a clickable user chip. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts:100 msgid "The sticker was uploaded by {user}" @@ -35408,6 +35489,11 @@ msgstr "Třetí strana" msgid "This account can't be blocked." msgstr "Tento účet nelze zablokovat." +#. Error in the browser when the chosen account belongs to a different server than the app that asked to sign in. accountHost and requestHost are server addresses. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:38 +msgid "This account is on {accountHost}, but the {productName} app is signing in to {requestHost}. Choose an account on {requestHost}." +msgstr "Tento účet je na adrese {accountHost}, ale aplikace {productName} se přihlašuje k adrese {requestHost}. Vyberte účet z adresy {requestHost}." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:418 msgid "This action cannot be undone. All associated data, including the bot user, will be permanently deleted." msgstr "Tuto akci nelze vrátit zpět. Všechna související data, včetně uživatele bota, budou trvale smazána." @@ -35551,11 +35637,6 @@ msgstr "Tím se zcela vymaže váš prémiový stav na backendu, včetně typu p msgid "This code doesn't exist." msgstr "Tento kód neexistuje." -#. Status shown under the browser sign-in code once its countdown reaches zero. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:68 -msgid "This code expired." -msgstr "Tento kód vypršel." - #. Gift redemption error modal body for an invalid or already used code. #: src/features/gift/commands/GiftCommands.tsx:37 msgid "This code is invalid or already used." @@ -36075,6 +36156,11 @@ msgstr "Platnost tohoto odkazu pro obnovení vypršela. Odkazy pro obnovení pla msgid "This shows how links appear: {linkPreviewExampleUrl}" msgstr "Takto se zobrazují odkazy: {linkPreviewExampleUrl}" +#. Error in the browser when the sign-in request from the desktop app no longer exists, because it expired or the app cancelled it. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:20 +msgid "This sign-in request expired or was cancelled in the {productName} app. Start again from the app." +msgstr "Tato žádost o přihlášení vypršela nebo byla zrušena v aplikaci {productName}. Zkuste to znovu z aplikace." + #. Label above the community a sticker comes from in the sticker info card. #: src/features/expressions/components/ExpressionInfoCard.tsx:75 msgid "This sticker is from" @@ -38520,6 +38606,11 @@ msgstr "Použijte {url} tam, kam se má vložit adresa URL obrázku." msgid "Use a dedicated modal to set a message history threshold date for members who don't have the {readMessageHistoryPermissionLabel} permission." msgstr "Použijte speciální okno k nastavení data, od kterého se bude zobrazovat historie zpráv pro členy, kteří nemají oprávnění {readMessageHistoryPermissionLabel}." +#. Text button on the browser approval page that goes back to choosing which account signs in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:149 +msgid "Use a different account" +msgstr "Použít jiný účet" + #: src/features/auth/flow/instance_selector/InstancePickerRows.tsx:267 msgid "Use a self-hosted instance URL" msgstr "Použijte adresu URL instance hostované vámi" @@ -39296,10 +39387,6 @@ msgstr "Ověřte svůj e-mail, abyste si mohli zakoupit {premiumProductFullName} msgid "Verify your email to start DMs." msgstr "Ověřte svůj e-mail, abyste mohli zahajovat soukromé konverzace." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:142 -msgid "Verifying code…" -msgstr "Ověřování kódu…" - #: src/features/auth/components/pages/ResetPasswordPage.tsx:145 msgid "Verifying your reset link…" msgstr "Ověřujeme váš odkaz pro resetování…" @@ -40073,10 +40160,6 @@ msgstr "Před smazáním dalších zpráv chvíli počkejte." msgid "Wait between messages. Members with \"{bypassSlowmodePermissionLabel}\" can bypass this." msgstr "Doba čekání mezi zprávami. Členové s oprávněním „{bypassSlowmodePermissionLabel}“ nemusí čekat." -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:445 -msgid "Waiting for browser approval." -msgstr "Čekání na schválení prohlížečem." - #. Tooltip explaining that video / screen share controls are gated while the voice connection is not yet ready. #: src/features/voice/components/voice_connection_status/LocalParticipantControls.tsx:45 msgid "Waiting for connection..." @@ -40118,10 +40201,6 @@ msgstr "Probudit" msgid "Warning" msgstr "Upozornění" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:158 -msgid "Was this you?" -msgstr "Byl/a jste to vy?" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:243 msgctxt "us-state" @@ -40959,10 +41038,6 @@ msgstr "Už máte doživotní předplatné {premiumProductName}" msgid "You already have this connection." msgstr "Toto propojení už máte." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:87 -msgid "You are about to authorize an app to sign in to your account. Only continue if you initiated this request from a device you control." -msgstr "Chystáte se autorizovat aplikaci k přihlášení k vašemu účtu. Pokračujte pouze v případě, že jste tento požadavek zahájili ze zařízení, které ovládáte." - #. External link warning title. productName is the Fluxer product name. #: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:22 msgid "You are about to leave {productName}" @@ -41732,6 +41807,11 @@ msgstr "Používáte starší cenu. Aktuální cena tohoto tarifu je {currentSub msgid "You're sending messages too quickly" msgstr "Posíláte zprávy příliš rychle" +#. Title of the browser page after the user approved signing in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:282 +msgid "You're signed in" +msgstr "Jste přihlášeni" + #. Status text on the screen-share hover popout shown to the local streamer. Lightly playful tone. #: src/features/voice/components/StreamWatchHoverPopout.tsx:43 msgid "You're streaming!" diff --git a/fluxer_app/src/features/i18n/locales/da/messages.po b/fluxer_app/src/features/i18n/locales/da/messages.po index 9d5e55d54..bf4f395eb 100644 --- a/fluxer_app/src/features/i18n/locales/da/messages.po +++ b/fluxer_app/src/features/i18n/locales/da/messages.po @@ -1573,7 +1573,7 @@ msgid "{imageCount, plural, one {# image} other {# images}}, {videoCount, plural msgstr "{imageCount, plural, one {# billede} other {# billeder}}, {videoCount, plural, one {# video} other {# videoer}}" #. Explanation shown when the selected instance advertises no web app endpoint. Instance name is interpolated. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:76 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:61 msgid "{instanceName} does not publish a web address, so sign-in cannot be handed to a browser." msgstr "{instanceName} udgiver ikke en webadresse, så login kan ikke viderestilles til en browser." @@ -2777,14 +2777,6 @@ msgstr "en indlejring med rigt indhold eller en linkforhåndsvisning (ikke en up msgid "A separate profile for each community" msgstr "En separat profil for hvert fællesskab" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:164 -msgid "A sign-in request was made for your account. Only approve if you initiated it." -msgstr "Der blev anmodet om login til din konto. Godkend kun, hvis du selv har startet det." - -#: src/features/auth/flow/HandoffApprovalFlow.tsx:162 -msgid "A sign-in request was made from the following device. Only approve if you recognize it." -msgstr "Der er blevet anmodet om login fra følgende enhed. Godkend kun, hvis du genkender den." - #. Description for has:sticker. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:51 msgid "a sticker" @@ -4811,10 +4803,6 @@ msgstr "Anvend for alle fællesskaber" msgid "Approval required" msgstr "Godkendelse påkrævet" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:206 -msgid "Approve" -msgstr "Godkend" - #. Hint under the sign-in option on fluxer.com that pairs a newly installed app with the old installed app. productName is the app name. #: src/features/auth/flow/AuthLoginLayout.tsx:101 msgid "Approve this app from the {productName} app you already use. No password needed." @@ -7873,6 +7861,11 @@ msgstr "Tjekker adgang ..." msgid "Checking screen recording permission..." msgstr "Kontrollerer tilladelsen til skærmoptagelse…" +#. Title while the browser looks up the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:224 +msgid "Checking the sign-in request…" +msgstr "Tjekker anmodning om login…" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -8847,6 +8840,11 @@ msgstr "Kodeblokke" msgid "Code expired" msgstr "Koden er udløbet" +#. Label of the field in the browser where the user types the 12-character code shown in the desktop or mobile app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:28 +msgid "Code from the {productName} app" +msgstr "Kode fra {productName}-appen" + #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 @@ -9348,7 +9346,6 @@ msgstr "Skjul dit {premiumProductName}-badge fuldstændigt for andre brugere" #: src/features/auth/components/pages/SsoCallbackPage.tsx:256 #: src/features/auth/components/pages/SsoCallbackPage.tsx:322 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:216 msgid "Completing sign-in…" msgstr "Logger dig ind…" @@ -9782,7 +9779,6 @@ msgstr "Genvejsmenuer kan åbnes med venstreklik (på knapper) eller højreklik #: src/features/auth/components/modals/DeviceRevokeModal.tsx:77 #: src/features/auth/components/modals/PasskeyPinModal.tsx:111 #: src/features/auth/components/pages/oauth_authorize_page/OAuthAccountStep.tsx:36 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/connection/components/modals/AddConnectionModal.tsx:384 #: src/features/i18n/utils/CommonMessageDescriptors.ts:726 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:413 @@ -9790,6 +9786,11 @@ msgstr "Genvejsmenuer kan åbnes med venstreklik (på knapper) eller højreklik msgid "Continue" msgstr "Fortsæt" +#. Title in the desktop app while it waits for the user to sign in on the browser page it opened. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:177 +msgid "Continue in your browser" +msgstr "Fortsæt i din browser" + #. Button in the gift time confirmation that proceeds to subscription checkout. #: src/features/app/components/dialogs/components/plutonium/hooks/useCheckoutActions.tsx:145 msgid "Continue to checkout" @@ -10437,7 +10438,7 @@ msgid "Couldn't close DM" msgstr "Kunne ikke lukke den direkte samtale" #. Desktop handoff flow error shown when finalizing the sign-in fails after a valid code. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:21 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:34 msgid "Couldn't complete sign-in. Try again." msgstr "Kunne ikke gennemføre login. Prøv igen." @@ -10831,6 +10832,11 @@ msgstr "Kunne ikke starte godkendelse af {blueskyProviderName}" msgid "Couldn't start checkout" msgstr "Kunne ikke starte betaling" +#. Shown in the desktop app when the browser sign-in request could not be created. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:66 +msgid "Couldn't start signing in with your browser." +msgstr "Kunne ikke starte login med din browser." + #. Toast error shown when creating a new account connection fails. #: src/features/connection/commands/ConnectionCommands.ts:27 msgid "Couldn't start the connection" @@ -10942,7 +10948,7 @@ msgid "Couldn't upload banner" msgstr "Kunne ikke uploade banner" #. Desktop handoff flow error shown when verifying the pairing code fails for an unexpected reason. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:17 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:30 msgid "Couldn't verify that code. Try again." msgstr "Kunne ikke bekræfte koden. Prøv igen." @@ -12503,7 +12509,6 @@ msgstr "Kompakt layout" #. Short label in the settings dialog permission components. Keep the tone plain and specific. #: src/features/app/components/dialogs/shared/PermissionComponents.tsx:16 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:203 msgid "Deny" msgstr "Afvis" @@ -14910,15 +14915,16 @@ msgstr "Indtast den {digitCount}-cifrede kode fra din godkendelsesapp eller en a msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Indtast den {digitCount}-cifrede kode fra din godkendelsesapp." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:108 -msgid "Enter the code" -msgstr "Indtast koden" - #. Inline validation error on the verification step of the DSA report flow when the code field is empty. #: src/features/moderation/components/pages/ReportPage.tsx:74 msgid "Enter the code before continuing." msgstr "Indtast koden, før du fortsætter." +#. Title of the browser page where the user types the 12-character code the app shows under Signing in on another device. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +msgid "Enter the code from the {PRODUCT_NAME} app" +msgstr "Indtast koden fra {PRODUCT_NAME}-appen" + #. Body text in the authentication sudo verification modal. Keep the tone plain and specific. #: src/features/auth/components/modals/SudoVerificationModal.tsx:56 msgid "Enter the code from your authenticator app." @@ -14933,10 +14939,6 @@ msgstr "Indtast koden, vi har sendt til din nuværende e-mailadresse." msgid "Enter the code sent to your email address." msgstr "Indtast koden, der er sendt til din e-mailadresse." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:111 -msgid "Enter the code shown in the app to continue." -msgstr "Indtast koden, der vises i appen, for at fortsætte." - #: src/features/user/components/modals/BouncedEmailChangeModal.tsx:157 #: src/features/user/components/modals/EmailChangeModal.tsx:244 msgid "Enter the code we emailed to your new address." @@ -14959,6 +14961,11 @@ msgstr "Indtast den nye e-mailadresse, du vil bruge. Vi sender en kode dertil." msgid "Enter the PIN for your security key to continue." msgstr "Indtast pinkoden til din sikkerhedsnøgle for at fortsætte." +#. Title in the desktop app above the code the user types into a browser on another device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:228 +msgid "Enter this code in your browser" +msgstr "Indtast denne kode i din browser" + #: src/features/auth/flow/HandoffCodeDisplay.tsx:132 msgid "Enter this code in your browser to complete sign-in." msgstr "Indtast denne kode i din browser for at logge ind." @@ -15362,7 +15369,7 @@ msgstr "Udløber mellem {earliest} og {latest}" msgid "Expires in {remaining}s" msgstr "Udløber om {remaining} s" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:374 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:250 msgid "Expires in {remainingSeconds}s" msgstr "Udløber om {remainingSeconds}s" @@ -16165,7 +16172,7 @@ msgid "Fluxer" msgstr "Fluxer" #. Status shown when browser sign-in status polling gives up after repeated failures. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:72 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:57 msgid "Fluxer stopped checking whether the browser approved this sign-in. It didn't lose your code." msgstr "Fluxer stoppede med at tjekke, om browseren godkendte dette login. Den mistede ikke din kode." @@ -16952,8 +16959,6 @@ msgstr "Generer et link, der kan deles, eller kopiér din samlede brugerdefinere msgid "Generate invite link" msgstr "Generér invitationslink" -#. Button label that replaces an expired browser sign-in code with a fresh one. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:64 #: src/features/auth/flow/HandoffCodeDisplay.tsx:117 msgid "Generate new code" msgstr "Generer ny kode" @@ -17348,6 +17353,16 @@ msgstr "Gå tilbage, og indtast en gyldig e-mailadresse." msgid "Go back to {productName} to continue." msgstr "Gå tilbage til {productName} for at fortsætte." +#. Shown after approving a sign-in for an app on another device, which signs in by itself shortly. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:292 +msgid "Go back to the {PRODUCT_NAME} app. It finishes signing in on its own." +msgstr "Gå tilbage til {PRODUCT_NAME}-appen. Den fuldfører login af sig selv." + +#. Shown after approving, when the browser has already handed the sign-in back to the desktop app. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:288 +msgid "Go back to the {PRODUCT_NAME} app. You can close this tab." +msgstr "Gå tilbage til {PRODUCT_NAME}-appen. Du kan lukke denne fane." + #. Accessible label for the community row of an expression info card, which opens a community the viewer is already a member of. {communityName} is the community name. #: src/features/expressions/components/ExpressionInfoCard.tsx:89 msgid "Go to {communityName}" @@ -19295,11 +19310,6 @@ msgstr "Ugyldig JSON. Indsæt hele svaret fra URL'en ovenfor." msgid "Invalid or expired code" msgstr "Ugyldig eller udløbet kode" -#. Desktop handoff flow error shown when the entered pairing code is invalid or expired. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:13 -msgid "Invalid or expired code. Try again." -msgstr "Ugyldig eller udløbet kode. Prøv igen." - #. Short label in the authentication authorize flow. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/state/useAuthorizeFlow.ts:82 msgid "Invalid redirect_uri" @@ -20876,7 +20886,7 @@ msgstr "Tidsformat for sprog og område" msgid "Localization" msgstr "Sprog og område" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:192 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:109 #: src/features/user/components/modals/tabs/DevicesTab.tsx:152 msgid "Location" msgstr "Sted" @@ -21034,6 +21044,11 @@ msgstr "Gør {userName} til gruppeejer? Du mister dine ejerskabsrettigheder." msgid "Make group owner" msgstr "Gør til gruppeejer" +#. Shown above the code on the browser approval page when the app cannot be signed in automatically. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:253 +msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." +msgstr "Sørg for, at denne kode matcher den i {PRODUCT_NAME}-appen." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" @@ -24668,6 +24683,11 @@ msgstr "Den <0>{listPriceEffectiveDate} skifter dit abonnement fra {listPric msgid "On click" msgstr "Ved klik" +#. One line explanation in the desktop app above the code. signInAddress is the web address of the sign-in page, such as web.fluxer.app/login?handoff=1. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:236 +msgid "On your other device, sign in at {signInAddress} and enter this code when asked." +msgstr "På din anden enhed skal du logge ind på {signInAddress} og indtaste denne kode, når du bliver bedt om det." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:715 msgid "Once deleted, the application and its credentials are permanently removed." msgstr "Når appen slettes, fjernes den og dens adgangsoplysninger permanent." @@ -24733,6 +24753,11 @@ msgstr "Kun @nævnelser" msgid "Only applies on wide screens." msgstr "Gælder kun på brede skærme." +#. Warning under the title of the browser approval page, so people do not approve a sign-in someone else started. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:245 +msgid "Only continue if you started this sign-in on a device you control." +msgstr "Fortsæt kun, hvis du startede denne login på en enhed, du kontrollerer." + #. Body copy in the mature content check modal. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:32 msgid "Only credit cards are accepted. Debit and prepaid cards cannot be used for the mature content check." @@ -24921,6 +24946,11 @@ msgstr "Åbn {landmarkName}" msgid "Open {premiumProductFullName}" msgstr "Åbn {premiumProductFullName}" +#. Button on the browser page after approving that opens the desktop app again if it did not come to the front. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:304 +msgid "Open {PRODUCT_NAME}" +msgstr "Åbn {PRODUCT_NAME}" + #. Button label that opens the desktop app. productName is the app name. #. Button that hands SSO sign-in back to the mobile app. productName is the app name. #: src/features/auth/components/pages/SsoCallbackPage.tsx:47 @@ -25011,12 +25041,15 @@ msgstr "Åbn bannerindstillinger" msgid "Open bookmarks" msgstr "Åbn gemte beskeder" -#. Button label that opens the browser sign-in handoff page. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:56 #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:184 msgid "Open browser" msgstr "Åbn browser" +#. Button in the desktop app that reopens the browser sign-in page while the app waits for the browser. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:53 +msgid "Open browser again" +msgstr "Åbn browser igen" + #. Primary button in the screen-share picker on web. Hands off to the browser's native getDisplayMedia picker. #: src/features/voice/components/modals/ScreenSharePickerModal.tsx:209 msgid "Open browser picker" @@ -25392,10 +25425,6 @@ msgstr "Åbn indstillinger for lyd og video" msgid "Open with {accountName} on {instanceName}" msgstr "Åbn med {accountName} på {instanceName}" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:414 -msgid "Open your browser to finish signing in." -msgstr "Åbn din browser for at afslutte login." - #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:137 msgid "Open your browser, sign in, then enter the code below to link your account." msgstr "Åbn din browser, log ind, og indtast derefter koden herunder for at forbinde din konto." @@ -25421,7 +25450,7 @@ msgstr "Åbner siden Medlemmer. Tryk på Mellemrum eller Enter for at åbne." #. Short label in the language tab. Keep it concise. #. Spellcheck engine option in the textarea spellcheck submenu. Uses the host operating system spellchecker. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:79 #: src/features/user/components/modals/tabs/LanguageTab.tsx:110 msgid "Operating system" @@ -26439,7 +26468,7 @@ msgstr "Abonnement" msgid "Plans, perks, gifts and your subscription all live on one page." msgstr "Abonnementer, fordele, gaver og dit abonnement findes alt sammen på én side." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:172 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:89 msgid "Platform" msgstr "Platform" @@ -31859,11 +31888,6 @@ msgstr "Vis chat" msgid "Show chat with {count, plural, one {# unread message} other {# unread messages}}" msgstr "Vis chat med {count, plural, one {# ulæst besked} other {# ulæste beskeder}}" -#. Button label that opens the manual browser handoff code fallback. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:60 -msgid "Show code" -msgstr "Vis kode" - #. Developer voice status menu option for displaying the voice connection identifier. #: src/features/voice/components/voice_connection_status/VoiceConnectionStatusInner.tsx:76 msgid "Show connection ID" @@ -32306,7 +32330,9 @@ msgstr "Viser banneret i sin egen sektion under fællesskabsoverskriften." msgid "Sidebar" msgstr "Sidepanel" +#. Button in the browser that approves signing in to the desktop or mobile app that asked for it. #. Generic authentication action label. Use for buttons, links, page titles, and accessible labels. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:33 #: src/features/i18n/utils/CommonMessageDescriptors.ts:79 msgid "Sign in" msgstr "Log ind" @@ -32321,10 +32347,35 @@ msgstr "Log ind igen" msgid "Sign in again as {accountLabel}" msgstr "Log ind igen som {accountLabel}" +#. Shown in the desktop app while it waits for the browser. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:193 +msgid "Sign in to {instanceName} in your browser and confirm. This app finishes signing in on its own." +msgstr "Log ind på {instanceName} i din browser og bekræft. Denne app afslutter login af sig selv." + +#. Shown in the desktop app above the code when the browser cannot return the sign-in automatically. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:189 +msgid "Sign in to {instanceName} in your browser, and check that it shows this code:" +msgstr "Log ind på {instanceName} i din browser, og tjek, at den viser denne kode:" + #: src/features/auth/flow/GiftHeader.tsx:33 msgid "Sign in to claim your gift" msgstr "Log ind for at modtage din gave" +#. Title of the browser page where the user approves signing in to an app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:71 +msgid "Sign in to the {PRODUCT_NAME} app" +msgstr "Log ind på {PRODUCT_NAME}-appen" + +#. Title of the browser page where the user approves signing in to the desktop app that opened it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:58 +msgid "Sign in to the {PRODUCT_NAME} desktop app" +msgstr "Log ind på {PRODUCT_NAME} desktop-appen" + +#. Title of the browser page where the user approves signing in to the mobile app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:65 +msgid "Sign in to the {PRODUCT_NAME} mobile app" +msgstr "Log ind på {PRODUCT_NAME} mobilappen" + #. Action label that starts passkey authentication. #: src/features/auth/AuthMessageDescriptors.ts:13 msgid "Sign in with a passkey" @@ -32403,14 +32454,10 @@ msgstr "Log ud af andre enheder fra din konto" msgid "Sign out?" msgstr "Log ud?" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:234 -msgid "Sign-in approved" -msgstr "Login godkendt" - -#. Short label in the authentication handoff approval flow. Keep the tone plain and specific. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:26 -msgid "Sign-in code" -msgstr "Loginkode" +#. Title of the browser page after the user cancelled the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:322 +msgid "Sign-in cancelled" +msgstr "Logget ind afbrudt" #. Section title for email address and password controls in the account security tab. Keep it concise. #: src/features/user/components/modals/tabs/account_security_tab/AccountSecuritySections.tsx:23 @@ -32433,10 +32480,6 @@ msgstr "Loginforløb" msgid "Sign-in method" msgstr "Login-metode" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:84 -msgid "Sign-in request" -msgstr "Loginanmodning" - #. Aria label on the signal-strength icon shown while the first latency sample is still pending. #: src/features/voice/components/SignalStrengthIcon.tsx:16 msgid "Signal strength loading" @@ -32453,6 +32496,21 @@ msgstr "Logget ind" msgid "Signed-in devices" msgstr "Enheder, du er logget ind på" +#. Shown on the browser approval page above the buttons. name is the display name of the account that will be signed in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:137 +msgid "Signing in as {name}" +msgstr "Logger ind som {name}" + +#. Text button in the desktop app that shows a code to type into a browser on a different device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:207 +msgid "Signing in on another device?" +msgstr "Logger du ind på en anden enhed?" + +#. Title while the browser approves the sign-in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:228 +msgid "Signing in…" +msgstr "Logger ind…" + #. Label for Bluesky OAuth signing key ID input. #: src/features/app/components/setup/SetupWizardSteps.tsx:1161 msgid "Signing key ID" @@ -33504,6 +33562,8 @@ msgstr "Start mikrofontest" msgid "Start minimized" msgstr "Start minimeret" +#. Button on the browser page after cancelling that goes back to choosing an account. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:337 #: src/features/moderation/components/report/ReportStepDetails.tsx:326 #: src/features/moderation/components/report/ReportStepEmail.tsx:97 #: src/features/moderation/components/report/ReportStepVerification.tsx:134 @@ -34910,6 +34970,11 @@ msgstr "Thai" msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Tak, fordi du hjælper med at holde {productName} sikkert. Vi gennemgår din anmeldelse hurtigst muligt." +#. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 +msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." +msgstr "Den kode er ikke gyldig på {instanceHost}. Tjek koden i {productName}-appen, og prøv igen." + #. Body of the passkey page after the passkey prompt failed or was dismissed. Keep plain. #: src/features/auth/passkey_migration/PasskeyBridgePage.tsx:36 msgid "That didn't work. Try again or cancel." @@ -34953,11 +35018,6 @@ msgstr "Beskeden kunne ikke slettes" msgid "That message is gone, or you lost access to the conversation." msgstr "Den besked er væk, eller også har du mistet adgangen til samtalen." -#. Error shown when a browser sign-in handoff code expires before it is approved. -#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 -msgid "That sign-in code expired. Try again." -msgstr "Den kode til login er udløbet. Prøv igen." - #. End-of-list line in the saved messages popout after every bookmark has been shown. #. End-of-list line on the saved messages page after every bookmark has been shown. #: src/features/messaging/components/pages/SavedMessagesPage.tsx:35 @@ -34965,6 +35025,21 @@ msgstr "Den kode til login er udløbet. Prøv igen." msgid "That's all of them." msgstr "Det var alle sammen." +#. Warning on the browser approval page when the app asked for a different account than the one chosen. requestedIdentifier is the email or username the app asked for, name is the chosen account's display name. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:131 +msgid "The {PRODUCT_NAME} app asked to sign in as {requestedIdentifier}, but you chose {name}." +msgstr "Appen {PRODUCT_NAME} bad om at logge ind som {requestedIdentifier}, men du valgte {name}." + +#. Explains where the code comes from, under the title of the browser page where it is typed. Signing in on another device is the label of a button in the app and must match its translation. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:187 +msgid "The {PRODUCT_NAME} app on your other device shows it under Signing in on another device. Only enter a code from a device you control." +msgstr "Appen {PRODUCT_NAME} på din anden enhed vises under \"Logger ind på en anden enhed\". Indtast kun en kode fra en enhed, du kontrollerer." + +#. Shown after the user cancelled the sign-in request in the browser. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:327 +msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." +msgstr "Appen {PRODUCT_NAME} blev ikke logget ind. Du kan lukke denne fane." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -34983,10 +35058,6 @@ msgstr "Appen gik ned" msgid "The app has crashed. Checking for updates that might fix this issue…" msgstr "Appen er gået ned. Leder efter opdateringer, der måske kan løse problemet…" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:237 -msgid "The app should now be signed in to your account." -msgstr "Du skulle nu være logget ind på din konto i appen." - #. Activity log detail line under a lifted ban, for a temporary ban that had already ended on its own before it was lifted. A ban is the community ban, not the feature that blocks a user. {date} is when the ban ended, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:55 msgid "The ban had already expired on {date}" @@ -35184,6 +35255,16 @@ msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "Skærmdelingskilden er stoppet med at sende video, så din skærmdeling blev stoppet." +#. Error shown in the desktop app when a browser sign-in request expires before it is approved in the browser. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 +msgid "The sign-in request expired before your browser approved it." +msgstr "Anmodningen om login udløb, før din browser godkendte den." + +#. Error shown in the desktop app when the user pressed Cancel on the browser sign-in page. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:14 +msgid "The sign-in was cancelled in your browser." +msgstr "Logget ind blev afbrudt i din browser." + #. Activity log detail line under a deleted sticker, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the sticker, shown as a clickable user chip. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts:100 msgid "The sticker was uploaded by {user}" @@ -35408,6 +35489,11 @@ msgstr "Tredjepart" msgid "This account can't be blocked." msgstr "Denne konto kan ikke blokeres." +#. Error in the browser when the chosen account belongs to a different server than the app that asked to sign in. accountHost and requestHost are server addresses. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:38 +msgid "This account is on {accountHost}, but the {productName} app is signing in to {requestHost}. Choose an account on {requestHost}." +msgstr "Denne konto er på {accountHost}, men {productName}-appen logger ind på {requestHost}. Vælg en konto på {requestHost}." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:418 msgid "This action cannot be undone. All associated data, including the bot user, will be permanently deleted." msgstr "Denne handling kan ikke fortrydes. Alle tilknyttede data, inklusive botbrugeren, slettes permanent." @@ -35551,11 +35637,6 @@ msgstr "Dette rydder din backend-premiumstatus fuldstændigt, inklusive premiumt msgid "This code doesn't exist." msgstr "Denne kode findes ikke." -#. Status shown under the browser sign-in code once its countdown reaches zero. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:68 -msgid "This code expired." -msgstr "Denne kode er udløbet." - #. Gift redemption error modal body for an invalid or already used code. #: src/features/gift/commands/GiftCommands.tsx:37 msgid "This code is invalid or already used." @@ -36075,6 +36156,11 @@ msgstr "Dette nulstillingslink er udløbet. Nulstillingslinks er gyldige i 1 tim msgid "This shows how links appear: {linkPreviewExampleUrl}" msgstr "Sådan vises links: {linkPreviewExampleUrl}" +#. Error in the browser when the sign-in request from the desktop app no longer exists, because it expired or the app cancelled it. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:20 +msgid "This sign-in request expired or was cancelled in the {productName} app. Start again from the app." +msgstr "Denne anmodning om login udløb eller blev annulleret i {productName}-appen. Prøv igen fra appen." + #. Label above the community a sticker comes from in the sticker info card. #: src/features/expressions/components/ExpressionInfoCard.tsx:75 msgid "This sticker is from" @@ -38520,6 +38606,11 @@ msgstr "Brug {url}, hvor billedets URL skal indsættes." msgid "Use a dedicated modal to set a message history threshold date for members who don't have the {readMessageHistoryPermissionLabel} permission." msgstr "Brug en separat dialog til at indstille en skæringsdato for beskedhistorik for medlemmer uden tilladelsen {readMessageHistoryPermissionLabel}." +#. Text button on the browser approval page that goes back to choosing which account signs in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:149 +msgid "Use a different account" +msgstr "Brug en anden konto" + #: src/features/auth/flow/instance_selector/InstancePickerRows.tsx:267 msgid "Use a self-hosted instance URL" msgstr "Brug en selv-hostet instans-URL" @@ -39296,10 +39387,6 @@ msgstr "Bekræft din e-mail for at købe {premiumProductFullName}." msgid "Verify your email to start DMs." msgstr "Bekræft din e-mail for at starte private samtaler." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:142 -msgid "Verifying code…" -msgstr "Bekræfter kode…" - #: src/features/auth/components/pages/ResetPasswordPage.tsx:145 msgid "Verifying your reset link…" msgstr "Bekræfter dit nulstillingslink…" @@ -40073,10 +40160,6 @@ msgstr "Vent et øjeblik, før du sletter flere beskeder." msgid "Wait between messages. Members with \"{bypassSlowmodePermissionLabel}\" can bypass this." msgstr "Ventetid mellem beskeder. Medlemmer med tilladelsen \"{bypassSlowmodePermissionLabel}\" kan omgå den." -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:445 -msgid "Waiting for browser approval." -msgstr "Venter på godkendelse fra browseren." - #. Tooltip explaining that video / screen share controls are gated while the voice connection is not yet ready. #: src/features/voice/components/voice_connection_status/LocalParticipantControls.tsx:45 msgid "Waiting for connection..." @@ -40118,10 +40201,6 @@ msgstr "Væk" msgid "Warning" msgstr "Advarsel" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:158 -msgid "Was this you?" -msgstr "Var det dig?" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:243 msgctxt "us-state" @@ -40959,10 +41038,6 @@ msgstr "Du har allerede {premiumProductName} på livstid" msgid "You already have this connection." msgstr "Du har allerede denne forbindelse." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:87 -msgid "You are about to authorize an app to sign in to your account. Only continue if you initiated this request from a device you control." -msgstr "Du er ved at give en app tilladelse til at logge ind på din konto. Fortsæt kun, hvis du selv har startet denne anmodning fra en enhed, du kontrollerer." - #. External link warning title. productName is the Fluxer product name. #: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:22 msgid "You are about to leave {productName}" @@ -41732,6 +41807,11 @@ msgstr "Du har en ældre pris. Den nuværende pris for denne plan er {currentSub msgid "You're sending messages too quickly" msgstr "Du sender beskeder for hurtigt" +#. Title of the browser page after the user approved signing in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:282 +msgid "You're signed in" +msgstr "Du er logget ind" + #. Status text on the screen-share hover popout shown to the local streamer. Lightly playful tone. #: src/features/voice/components/StreamWatchHoverPopout.tsx:43 msgid "You're streaming!" diff --git a/fluxer_app/src/features/i18n/locales/de/messages.po b/fluxer_app/src/features/i18n/locales/de/messages.po index 80ad77e5b..cc5a366ed 100644 --- a/fluxer_app/src/features/i18n/locales/de/messages.po +++ b/fluxer_app/src/features/i18n/locales/de/messages.po @@ -1573,7 +1573,7 @@ msgid "{imageCount, plural, one {# image} other {# images}}, {videoCount, plural msgstr "{imageCount, plural, one {# Bild} other {# Bilder}}, {videoCount, plural, one {# Video} other {# Videos}}" #. Explanation shown when the selected instance advertises no web app endpoint. Instance name is interpolated. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:76 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:61 msgid "{instanceName} does not publish a web address, so sign-in cannot be handed to a browser." msgstr "{instanceName} veröffentlicht keine Webadresse, daher kann die Anmeldung nicht an einen Browser übergeben werden." @@ -2777,14 +2777,6 @@ msgstr "ein formatierter eingebetteter Inhalt oder eine Linkvorschau (keine hoch msgid "A separate profile for each community" msgstr "Ein separates Profil für jede Community" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:164 -msgid "A sign-in request was made for your account. Only approve if you initiated it." -msgstr "Für deinen Account wurde eine Anmeldeanfrage gestellt. Genehmige sie nur, wenn du sie selbst initiiert hast." - -#: src/features/auth/flow/HandoffApprovalFlow.tsx:162 -msgid "A sign-in request was made from the following device. Only approve if you recognize it." -msgstr "Eine Anmeldeanfrage wurde von folgendem Gerät gesendet. Genehmige sie nur, wenn du das Gerät erkennst." - #. Description for has:sticker. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:51 msgid "a sticker" @@ -4811,10 +4803,6 @@ msgstr "Auf alle Communitys anwenden" msgid "Approval required" msgstr "Genehmigung erforderlich" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:206 -msgid "Approve" -msgstr "Genehmigen" - #. Hint under the sign-in option on fluxer.com that pairs a newly installed app with the old installed app. productName is the app name. #: src/features/auth/flow/AuthLoginLayout.tsx:101 msgid "Approve this app from the {productName} app you already use. No password needed." @@ -7873,6 +7861,11 @@ msgstr "Zugriff wird geprüft …" msgid "Checking screen recording permission..." msgstr "Berechtigung zur Bildschirmaufnahme wird geprüft …" +#. Title while the browser looks up the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:224 +msgid "Checking the sign-in request…" +msgstr "Anfrage wird geprüft…" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -8847,6 +8840,11 @@ msgstr "Codeblöcke" msgid "Code expired" msgstr "Code abgelaufen" +#. Label of the field in the browser where the user types the 12-character code shown in the desktop or mobile app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:28 +msgid "Code from the {productName} app" +msgstr "Code aus der {productName}-App" + #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 @@ -9348,7 +9346,6 @@ msgstr "Dein {premiumProductName}-Abzeichen vollständig vor anderen Nutzern ver #: src/features/auth/components/pages/SsoCallbackPage.tsx:256 #: src/features/auth/components/pages/SsoCallbackPage.tsx:322 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:216 msgid "Completing sign-in…" msgstr "Anmeldung wird abgeschlossen …" @@ -9782,7 +9779,6 @@ msgstr "Kontextmenüs können per Linksklick (auf Schaltflächen) oder Rechtskli #: src/features/auth/components/modals/DeviceRevokeModal.tsx:77 #: src/features/auth/components/modals/PasskeyPinModal.tsx:111 #: src/features/auth/components/pages/oauth_authorize_page/OAuthAccountStep.tsx:36 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/connection/components/modals/AddConnectionModal.tsx:384 #: src/features/i18n/utils/CommonMessageDescriptors.ts:726 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:413 @@ -9790,6 +9786,11 @@ msgstr "Kontextmenüs können per Linksklick (auf Schaltflächen) oder Rechtskli msgid "Continue" msgstr "Weiter" +#. Title in the desktop app while it waits for the user to sign in on the browser page it opened. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:177 +msgid "Continue in your browser" +msgstr "In deinem Browser fortfahren" + #. Button in the gift time confirmation that proceeds to subscription checkout. #: src/features/app/components/dialogs/components/plutonium/hooks/useCheckoutActions.tsx:145 msgid "Continue to checkout" @@ -10437,7 +10438,7 @@ msgid "Couldn't close DM" msgstr "DM konnte nicht geschlossen werden" #. Desktop handoff flow error shown when finalizing the sign-in fails after a valid code. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:21 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:34 msgid "Couldn't complete sign-in. Try again." msgstr "Anmeldung konnte nicht abgeschlossen werden. Bitte versuche es noch einmal." @@ -10831,6 +10832,11 @@ msgstr "Autorisierung für {blueskyProviderName} konnte nicht gestartet werden" msgid "Couldn't start checkout" msgstr "Kauf konnte nicht gestartet werden" +#. Shown in the desktop app when the browser sign-in request could not be created. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:66 +msgid "Couldn't start signing in with your browser." +msgstr "Anmeldung im Browser konnte nicht gestartet werden." + #. Toast error shown when creating a new account connection fails. #: src/features/connection/commands/ConnectionCommands.ts:27 msgid "Couldn't start the connection" @@ -10942,7 +10948,7 @@ msgid "Couldn't upload banner" msgstr "Banner konnte nicht hochgeladen werden" #. Desktop handoff flow error shown when verifying the pairing code fails for an unexpected reason. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:17 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:30 msgid "Couldn't verify that code. Try again." msgstr "Code konnte nicht verifiziert werden. Bitte versuche es erneut." @@ -12503,7 +12509,6 @@ msgstr "Kompakte Ansicht" #. Short label in the settings dialog permission components. Keep the tone plain and specific. #: src/features/app/components/dialogs/shared/PermissionComponents.tsx:16 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:203 msgid "Deny" msgstr "Ablehnen" @@ -14910,15 +14915,16 @@ msgstr "Gib den {digitCount}-stelligen Code aus deiner Authenticator-App oder ei msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Gib den {digitCount}-stelligen Code aus deiner Authenticator-App ein." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:108 -msgid "Enter the code" -msgstr "Code eingeben" - #. Inline validation error on the verification step of the DSA report flow when the code field is empty. #: src/features/moderation/components/pages/ReportPage.tsx:74 msgid "Enter the code before continuing." msgstr "Gib den Code ein, um fortzufahren." +#. Title of the browser page where the user types the 12-character code the app shows under Signing in on another device. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +msgid "Enter the code from the {PRODUCT_NAME} app" +msgstr "Gib den Code aus der {PRODUCT_NAME}-App ein" + #. Body text in the authentication sudo verification modal. Keep the tone plain and specific. #: src/features/auth/components/modals/SudoVerificationModal.tsx:56 msgid "Enter the code from your authenticator app." @@ -14933,10 +14939,6 @@ msgstr "Gib den Code ein, der an deine aktuelle E-Mail-Adresse gesendet wurde." msgid "Enter the code sent to your email address." msgstr "Gib den Code ein, der an deine E-Mail-Adresse gesendet wurde." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:111 -msgid "Enter the code shown in the app to continue." -msgstr "Gib den in der App angezeigten Code ein, um fortzufahren." - #: src/features/user/components/modals/BouncedEmailChangeModal.tsx:157 #: src/features/user/components/modals/EmailChangeModal.tsx:244 msgid "Enter the code we emailed to your new address." @@ -14959,6 +14961,11 @@ msgstr "Gib die neue E-Mail-Adresse ein, die du verwenden möchtest. Wir senden msgid "Enter the PIN for your security key to continue." msgstr "Gib die PIN für deinen Sicherheitsschlüssel ein, um fortzufahren." +#. Title in the desktop app above the code the user types into a browser on another device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:228 +msgid "Enter this code in your browser" +msgstr "Gib diesen Code in deinem Browser ein" + #: src/features/auth/flow/HandoffCodeDisplay.tsx:132 msgid "Enter this code in your browser to complete sign-in." msgstr "Gib diesen Code in deinem Browser ein, um die Anmeldung abzuschließen." @@ -15362,7 +15369,7 @@ msgstr "Läuft zwischen {earliest} und {latest} ab" msgid "Expires in {remaining}s" msgstr "Läuft in {remaining}s ab" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:374 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:250 msgid "Expires in {remainingSeconds}s" msgstr "Gültig für {remainingSeconds}s" @@ -16165,7 +16172,7 @@ msgid "Fluxer" msgstr "Fluxer" #. Status shown when browser sign-in status polling gives up after repeated failures. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:72 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:57 msgid "Fluxer stopped checking whether the browser approved this sign-in. It didn't lose your code." msgstr "Fluxer hat die Überprüfung, ob der Browser die Anmeldung genehmigt hat, beendet. Dein Code ist nicht verloren gegangen." @@ -16952,8 +16959,6 @@ msgstr "Generiere einen teilbaren Link oder kopiere dein kombiniertes benutzerde msgid "Generate invite link" msgstr "Einladungslink erstellen" -#. Button label that replaces an expired browser sign-in code with a fresh one. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:64 #: src/features/auth/flow/HandoffCodeDisplay.tsx:117 msgid "Generate new code" msgstr "Neuen Code generieren" @@ -17348,6 +17353,16 @@ msgstr "Gehe zurück und gib eine gültige E-Mail-Adresse ein." msgid "Go back to {productName} to continue." msgstr "Zurück zu {productName}, um fortzufahren." +#. Shown after approving a sign-in for an app on another device, which signs in by itself shortly. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:292 +msgid "Go back to the {PRODUCT_NAME} app. It finishes signing in on its own." +msgstr "Zurück zur {PRODUCT_NAME}-App. Die Anmeldung wird automatisch abgeschlossen." + +#. Shown after approving, when the browser has already handed the sign-in back to the desktop app. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:288 +msgid "Go back to the {PRODUCT_NAME} app. You can close this tab." +msgstr "Zurück zur {PRODUCT_NAME}-App. Du kannst diesen Tab schließen." + #. Accessible label for the community row of an expression info card, which opens a community the viewer is already a member of. {communityName} is the community name. #: src/features/expressions/components/ExpressionInfoCard.tsx:89 msgid "Go to {communityName}" @@ -19295,11 +19310,6 @@ msgstr "Ungültiges JSON. Füge die vollständige Antwort von der obigen URL ein msgid "Invalid or expired code" msgstr "Ungültiger oder abgelaufener Code" -#. Desktop handoff flow error shown when the entered pairing code is invalid or expired. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:13 -msgid "Invalid or expired code. Try again." -msgstr "Ungültiger oder abgelaufener Code. Bitte versuche es noch einmal." - #. Short label in the authentication authorize flow. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/state/useAuthorizeFlow.ts:82 msgid "Invalid redirect_uri" @@ -20876,7 +20886,7 @@ msgstr "Zeitformat" msgid "Localization" msgstr "Lokalisierung" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:192 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:109 #: src/features/user/components/modals/tabs/DevicesTab.tsx:152 msgid "Location" msgstr "Standort" @@ -21034,6 +21044,11 @@ msgstr "{userName} zum Gruppeneigentümer machen? Du verlierst dann die Eigentü msgid "Make group owner" msgstr "Zum Gruppeneigentümer machen" +#. Shown above the code on the browser approval page when the app cannot be signed in automatically. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:253 +msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." +msgstr "Stelle sicher, dass dieser Code mit dem in der {PRODUCT_NAME}-App übereinstimmt." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" @@ -24668,6 +24683,11 @@ msgstr "Am <0>{listPriceEffectiveDate} wechselt dein Abo von {listPriceCurre msgid "On click" msgstr "Beim Klicken" +#. One line explanation in the desktop app above the code. signInAddress is the web address of the sign-in page, such as web.fluxer.app/login?handoff=1. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:236 +msgid "On your other device, sign in at {signInAddress} and enter this code when asked." +msgstr "Melde dich auf deinem anderen Gerät unter {signInAddress} an und gib diesen Code ein, wenn du dazu aufgefordert wirst." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:715 msgid "Once deleted, the application and its credentials are permanently removed." msgstr "Nach dem Löschen werden die Anwendung und ihre Anmeldeinformationen dauerhaft entfernt." @@ -24733,6 +24753,11 @@ msgstr "Nur Erwähnungen" msgid "Only applies on wide screens." msgstr "Gilt nur für breite Bildschirme." +#. Warning under the title of the browser approval page, so people do not approve a sign-in someone else started. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:245 +msgid "Only continue if you started this sign-in on a device you control." +msgstr "Nur fortfahren, wenn du diese Anmeldung auf einem Gerät gestartet hast, das dir gehört." + #. Body copy in the mature content check modal. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:32 msgid "Only credit cards are accepted. Debit and prepaid cards cannot be used for the mature content check." @@ -24921,6 +24946,11 @@ msgstr "„{landmarkName}“ öffnen" msgid "Open {premiumProductFullName}" msgstr "Öffne {premiumProductFullName}" +#. Button on the browser page after approving that opens the desktop app again if it did not come to the front. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:304 +msgid "Open {PRODUCT_NAME}" +msgstr "{PRODUCT_NAME} öffnen" + #. Button label that opens the desktop app. productName is the app name. #. Button that hands SSO sign-in back to the mobile app. productName is the app name. #: src/features/auth/components/pages/SsoCallbackPage.tsx:47 @@ -25011,12 +25041,15 @@ msgstr "Banner-Optionen öffnen" msgid "Open bookmarks" msgstr "Lesezeichen öffnen" -#. Button label that opens the browser sign-in handoff page. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:56 #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:184 msgid "Open browser" msgstr "Browser öffnen" +#. Button in the desktop app that reopens the browser sign-in page while the app waits for the browser. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:53 +msgid "Open browser again" +msgstr "Browser erneut öffnen" + #. Primary button in the screen-share picker on web. Hands off to the browser's native getDisplayMedia picker. #: src/features/voice/components/modals/ScreenSharePickerModal.tsx:209 msgid "Open browser picker" @@ -25392,10 +25425,6 @@ msgstr "Einstellungen für Audio & Video öffnen" msgid "Open with {accountName} on {instanceName}" msgstr "Öffnen mit {accountName} auf {instanceName}" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:414 -msgid "Open your browser to finish signing in." -msgstr "Öffne deinen Browser, um die Anmeldung abzuschließen." - #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:137 msgid "Open your browser, sign in, then enter the code below to link your account." msgstr "Öffne deinen Browser, melde dich an und gib dann den folgenden Code ein, um deinen Account zu verknüpfen." @@ -25421,7 +25450,7 @@ msgstr "Öffnet die Mitgliederseite. Drücke Leertaste oder Eingabetaste zum Öf #. Short label in the language tab. Keep it concise. #. Spellcheck engine option in the textarea spellcheck submenu. Uses the host operating system spellchecker. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:79 #: src/features/user/components/modals/tabs/LanguageTab.tsx:110 msgid "Operating system" @@ -26439,7 +26468,7 @@ msgstr "Tarif" msgid "Plans, perks, gifts and your subscription all live on one page." msgstr "Pläne, Vorteile, Geschenke und dein Abonnement – alles auf einer Seite." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:172 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:89 msgid "Platform" msgstr "Plattform" @@ -31859,11 +31888,6 @@ msgstr "Chat anzeigen" msgid "Show chat with {count, plural, one {# unread message} other {# unread messages}}" msgstr "Chat anzeigen ({count, plural, one {# ungelesene Nachricht} other {# ungelesene Nachrichten}})" -#. Button label that opens the manual browser handoff code fallback. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:60 -msgid "Show code" -msgstr "Code anzeigen" - #. Developer voice status menu option for displaying the voice connection identifier. #: src/features/voice/components/voice_connection_status/VoiceConnectionStatusInner.tsx:76 msgid "Show connection ID" @@ -32306,7 +32330,9 @@ msgstr "Zeigt das Banner in einem eigenen Bereich unterhalb des Community-Header msgid "Sidebar" msgstr "Seitenleiste" +#. Button in the browser that approves signing in to the desktop or mobile app that asked for it. #. Generic authentication action label. Use for buttons, links, page titles, and accessible labels. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:33 #: src/features/i18n/utils/CommonMessageDescriptors.ts:79 msgid "Sign in" msgstr "Anmelden" @@ -32321,10 +32347,35 @@ msgstr "Erneut anmelden" msgid "Sign in again as {accountLabel}" msgstr "Melde dich erneut als {accountLabel} an" +#. Shown in the desktop app while it waits for the browser. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:193 +msgid "Sign in to {instanceName} in your browser and confirm. This app finishes signing in on its own." +msgstr "Melde dich in deinem Browser bei {instanceName} an und bestätige. Diese App schließt die Anmeldung von selbst ab." + +#. Shown in the desktop app above the code when the browser cannot return the sign-in automatically. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:189 +msgid "Sign in to {instanceName} in your browser, and check that it shows this code:" +msgstr "Melde dich in deinem Browser bei {instanceName} an und prüfe, ob dieser Code angezeigt wird:" + #: src/features/auth/flow/GiftHeader.tsx:33 msgid "Sign in to claim your gift" msgstr "Melde dich an, um dein Geschenk einzulösen" +#. Title of the browser page where the user approves signing in to an app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:71 +msgid "Sign in to the {PRODUCT_NAME} app" +msgstr "Bei {PRODUCT_NAME} anmelden" + +#. Title of the browser page where the user approves signing in to the desktop app that opened it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:58 +msgid "Sign in to the {PRODUCT_NAME} desktop app" +msgstr "Bei {PRODUCT_NAME} Desktop anmelden" + +#. Title of the browser page where the user approves signing in to the mobile app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:65 +msgid "Sign in to the {PRODUCT_NAME} mobile app" +msgstr "Bei {PRODUCT_NAME} mobil anmelden" + #. Action label that starts passkey authentication. #: src/features/auth/AuthMessageDescriptors.ts:13 msgid "Sign in with a passkey" @@ -32403,14 +32454,10 @@ msgstr "Andere Geräte von deinem Account abmelden" msgid "Sign out?" msgstr "Abmelden?" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:234 -msgid "Sign-in approved" -msgstr "Anmeldung genehmigt" - -#. Short label in the authentication handoff approval flow. Keep the tone plain and specific. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:26 -msgid "Sign-in code" -msgstr "Anmeldecode" +#. Title of the browser page after the user cancelled the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:322 +msgid "Sign-in cancelled" +msgstr "Anmeldung abgebrochen" #. Section title for email address and password controls in the account security tab. Keep it concise. #: src/features/user/components/modals/tabs/account_security_tab/AccountSecuritySections.tsx:23 @@ -32433,10 +32480,6 @@ msgstr "Anmeldevorgang" msgid "Sign-in method" msgstr "Anmeldemethode" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:84 -msgid "Sign-in request" -msgstr "Anmeldeanfrage" - #. Aria label on the signal-strength icon shown while the first latency sample is still pending. #: src/features/voice/components/SignalStrengthIcon.tsx:16 msgid "Signal strength loading" @@ -32453,6 +32496,21 @@ msgstr "Angemeldet" msgid "Signed-in devices" msgstr "Angemeldete Geräte" +#. Shown on the browser approval page above the buttons. name is the display name of the account that will be signed in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:137 +msgid "Signing in as {name}" +msgstr "Anmeldung als {name}" + +#. Text button in the desktop app that shows a code to type into a browser on a different device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:207 +msgid "Signing in on another device?" +msgstr "Auf einem anderen Gerät anmelden?" + +#. Title while the browser approves the sign-in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:228 +msgid "Signing in…" +msgstr "Anmeldung läuft…" + #. Label for Bluesky OAuth signing key ID input. #: src/features/app/components/setup/SetupWizardSteps.tsx:1161 msgid "Signing key ID" @@ -33504,6 +33562,8 @@ msgstr "Mikrofontest starten" msgid "Start minimized" msgstr "Minimiert starten" +#. Button on the browser page after cancelling that goes back to choosing an account. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:337 #: src/features/moderation/components/report/ReportStepDetails.tsx:326 #: src/features/moderation/components/report/ReportStepEmail.tsx:97 #: src/features/moderation/components/report/ReportStepVerification.tsx:134 @@ -34910,6 +34970,11 @@ msgstr "Thailändisch" msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Danke, dass du dabei hilfst, {productName} sicher zu halten. Wir prüfen deine Meldung so schnell wie möglich." +#. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 +msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." +msgstr "Dieser Code ist auf {instanceHost} nicht gültig. Überprüfe den Code in der {productName}-App und versuche es erneut." + #. Body of the passkey page after the passkey prompt failed or was dismissed. Keep plain. #: src/features/auth/passkey_migration/PasskeyBridgePage.tsx:36 msgid "That didn't work. Try again or cancel." @@ -34953,11 +35018,6 @@ msgstr "Nachricht konnte nicht gelöscht werden" msgid "That message is gone, or you lost access to the conversation." msgstr "Diese Nachricht ist nicht mehr verfügbar oder du hast den Zugriff auf die Unterhaltung verloren." -#. Error shown when a browser sign-in handoff code expires before it is approved. -#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 -msgid "That sign-in code expired. Try again." -msgstr "Dieser Anmeldecode ist abgelaufen. Versuche es erneut." - #. End-of-list line in the saved messages popout after every bookmark has been shown. #. End-of-list line on the saved messages page after every bookmark has been shown. #: src/features/messaging/components/pages/SavedMessagesPage.tsx:35 @@ -34965,6 +35025,21 @@ msgstr "Dieser Anmeldecode ist abgelaufen. Versuche es erneut." msgid "That's all of them." msgstr "Das waren alle." +#. Warning on the browser approval page when the app asked for a different account than the one chosen. requestedIdentifier is the email or username the app asked for, name is the chosen account's display name. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:131 +msgid "The {PRODUCT_NAME} app asked to sign in as {requestedIdentifier}, but you chose {name}." +msgstr "Die {PRODUCT_NAME}-App hat versucht, sich als {requestedIdentifier} anzumelden, aber du hast {name} gewählt." + +#. Explains where the code comes from, under the title of the browser page where it is typed. Signing in on another device is the label of a button in the app and must match its translation. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:187 +msgid "The {PRODUCT_NAME} app on your other device shows it under Signing in on another device. Only enter a code from a device you control." +msgstr "Die {PRODUCT_NAME}-App auf deinem anderen Gerät zeigt sie unter „Auf einem anderen Gerät anmelden“ an. Gib nur einen Code von einem Gerät ein, das du kontrollierst." + +#. Shown after the user cancelled the sign-in request in the browser. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:327 +msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." +msgstr "Die App {PRODUCT_NAME} wurde nicht angemeldet. Du kannst diesen Tab schließen." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -34983,10 +35058,6 @@ msgstr "Die App ist abgestürzt" msgid "The app has crashed. Checking for updates that might fix this issue…" msgstr "Die App ist abgestürzt. Es wird nach Updates gesucht, die das Problem beheben könnten …" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:237 -msgid "The app should now be signed in to your account." -msgstr "Die App sollte jetzt bei deinem Account angemeldet sein." - #. Activity log detail line under a lifted ban, for a temporary ban that had already ended on its own before it was lifted. A ban is the community ban, not the feature that blocks a user. {date} is when the ban ended, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:55 msgid "The ban had already expired on {date}" @@ -35184,6 +35255,16 @@ msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "Die Quelle der Bildschirmfreigabe hat keine Videodaten mehr gesendet. Deshalb wurde deine Bildschirmfreigabe beendet." +#. Error shown in the desktop app when a browser sign-in request expires before it is approved in the browser. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 +msgid "The sign-in request expired before your browser approved it." +msgstr "Die Anmeldeanfrage ist abgelaufen, bevor dein Browser sie genehmigt hat." + +#. Error shown in the desktop app when the user pressed Cancel on the browser sign-in page. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:14 +msgid "The sign-in was cancelled in your browser." +msgstr "Die Anmeldung wurde in deinem Browser abgebrochen." + #. Activity log detail line under a deleted sticker, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the sticker, shown as a clickable user chip. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts:100 msgid "The sticker was uploaded by {user}" @@ -35408,6 +35489,11 @@ msgstr "Drittanbieter" msgid "This account can't be blocked." msgstr "Dieser Account kann nicht blockiert werden." +#. Error in the browser when the chosen account belongs to a different server than the app that asked to sign in. accountHost and requestHost are server addresses. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:38 +msgid "This account is on {accountHost}, but the {productName} app is signing in to {requestHost}. Choose an account on {requestHost}." +msgstr "Dieses Konto ist auf {accountHost}, aber die App {productName} meldet sich bei {requestHost} an. Wähle ein Konto auf {requestHost}." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:418 msgid "This action cannot be undone. All associated data, including the bot user, will be permanently deleted." msgstr "Diese Aktion kann nicht rückgängig gemacht werden. Alle zugehörigen Daten, einschließlich des Bot-Benutzers, werden dauerhaft gelöscht." @@ -35551,11 +35637,6 @@ msgstr "Dadurch wird dein Premium-Status im Backend vollständig gelöscht, eins msgid "This code doesn't exist." msgstr "Dieser Code existiert nicht." -#. Status shown under the browser sign-in code once its countdown reaches zero. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:68 -msgid "This code expired." -msgstr "Dieser Code ist abgelaufen." - #. Gift redemption error modal body for an invalid or already used code. #: src/features/gift/commands/GiftCommands.tsx:37 msgid "This code is invalid or already used." @@ -36075,6 +36156,11 @@ msgstr "Dieser Zurücksetzungslink ist abgelaufen. Zurücksetzungslinks sind 1 S msgid "This shows how links appear: {linkPreviewExampleUrl}" msgstr "So werden Links angezeigt: {linkPreviewExampleUrl}" +#. Error in the browser when the sign-in request from the desktop app no longer exists, because it expired or the app cancelled it. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:20 +msgid "This sign-in request expired or was cancelled in the {productName} app. Start again from the app." +msgstr "Diese Anmeldeanfrage ist in der {productName}-App abgelaufen oder wurde abgebrochen. Bitte starte sie erneut aus der App." + #. Label above the community a sticker comes from in the sticker info card. #: src/features/expressions/components/ExpressionInfoCard.tsx:75 msgid "This sticker is from" @@ -38520,6 +38606,11 @@ msgstr "Verwende {url} an der Stelle, an der die Bild-URL eingefügt werden soll msgid "Use a dedicated modal to set a message history threshold date for members who don't have the {readMessageHistoryPermissionLabel} permission." msgstr "Lege in einem eigenen Dialog einen Stichtag für den Nachrichtenverlauf fest. Er gilt für Mitglieder ohne die Berechtigung „{readMessageHistoryPermissionLabel}“." +#. Text button on the browser approval page that goes back to choosing which account signs in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:149 +msgid "Use a different account" +msgstr "Anderes Konto verwenden" + #: src/features/auth/flow/instance_selector/InstancePickerRows.tsx:267 msgid "Use a self-hosted instance URL" msgstr "Gib eine URL für eine selbst gehostete Instanz ein" @@ -39296,10 +39387,6 @@ msgstr "Bestätige deine E-Mail-Adresse, um {premiumProductFullName} zu kaufen." msgid "Verify your email to start DMs." msgstr "Bestätige deine E-Mail-Adresse, um DMs zu starten." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:142 -msgid "Verifying code…" -msgstr "Code wird überprüft …" - #: src/features/auth/components/pages/ResetPasswordPage.tsx:145 msgid "Verifying your reset link…" msgstr "Dein Zurücksetzungslink wird überprüft …" @@ -40073,10 +40160,6 @@ msgstr "Warte einen Moment, bevor du weitere Nachrichten löschst." msgid "Wait between messages. Members with \"{bypassSlowmodePermissionLabel}\" can bypass this." msgstr "Wartezeit zwischen Nachrichten. Mitglieder mit der Berechtigung „{bypassSlowmodePermissionLabel}“ können sie umgehen." -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:445 -msgid "Waiting for browser approval." -msgstr "Warte auf die Bestätigung des Browsers." - #. Tooltip explaining that video / screen share controls are gated while the voice connection is not yet ready. #: src/features/voice/components/voice_connection_status/LocalParticipantControls.tsx:45 msgid "Waiting for connection..." @@ -40118,10 +40201,6 @@ msgstr "Aufwecken" msgid "Warning" msgstr "Warnung" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:158 -msgid "Was this you?" -msgstr "Warst du das?" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:243 msgctxt "us-state" @@ -40959,10 +41038,6 @@ msgstr "Du hast bereits lebenslangen Zugriff auf {premiumProductName}" msgid "You already have this connection." msgstr "Diese Verbindung ist bereits vorhanden." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:87 -msgid "You are about to authorize an app to sign in to your account. Only continue if you initiated this request from a device you control." -msgstr "Du bist dabei, einer App die Anmeldung bei deinem Account zu erlauben. Fahre nur fort, wenn du diese Anfrage von einem Gerät aus gestartet hast, das du kontrollierst." - #. External link warning title. productName is the Fluxer product name. #: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:22 msgid "You are about to leave {productName}" @@ -41732,6 +41807,11 @@ msgstr "Du nutzt einen älteren Tarif. Der aktuelle Preis dafür beträgt {curre msgid "You're sending messages too quickly" msgstr "Du sendest zu schnell Nachrichten" +#. Title of the browser page after the user approved signing in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:282 +msgid "You're signed in" +msgstr "Du bist angemeldet" + #. Status text on the screen-share hover popout shown to the local streamer. Lightly playful tone. #: src/features/voice/components/StreamWatchHoverPopout.tsx:43 msgid "You're streaming!" diff --git a/fluxer_app/src/features/i18n/locales/el/messages.po b/fluxer_app/src/features/i18n/locales/el/messages.po index a73b2c2ca..f95d435b2 100644 --- a/fluxer_app/src/features/i18n/locales/el/messages.po +++ b/fluxer_app/src/features/i18n/locales/el/messages.po @@ -1573,7 +1573,7 @@ msgid "{imageCount, plural, one {# image} other {# images}}, {videoCount, plural msgstr "{imageCount, plural, one {# εικόνα} other {# εικόνες}}, {videoCount, plural, one {# βίντεο} other {# βίντεο}}" #. Explanation shown when the selected instance advertises no web app endpoint. Instance name is interpolated. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:76 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:61 msgid "{instanceName} does not publish a web address, so sign-in cannot be handed to a browser." msgstr "Το {instanceName} δεν δημοσιεύει διεύθυνση ιστού, επομένως η σύνδεση δεν μπορεί να γίνει μέσω προγράμματος περιήγησης." @@ -2777,14 +2777,6 @@ msgstr "μια εμπλουτισμένη ενσωμάτωση ή προεπισ msgid "A separate profile for each community" msgstr "Ένα ξεχωριστό προφίλ για κάθε κοινότητα" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:164 -msgid "A sign-in request was made for your account. Only approve if you initiated it." -msgstr "Έγινε αίτημα σύνδεσης για τον λογαριασμό σας. Εγκρίνετε μόνο αν το ξεκινήσατε εσείς." - -#: src/features/auth/flow/HandoffApprovalFlow.tsx:162 -msgid "A sign-in request was made from the following device. Only approve if you recognize it." -msgstr "Έγινε αίτημα σύνδεσης από την παρακάτω συσκευή. Εγκρίνετε μόνο αν την αναγνωρίζετε." - #. Description for has:sticker. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:51 msgid "a sticker" @@ -4811,10 +4803,6 @@ msgstr "Εφαρμογή σε όλες τις κοινότητες" msgid "Approval required" msgstr "Απαιτείται έγκριση" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:206 -msgid "Approve" -msgstr "Έγκριση" - #. Hint under the sign-in option on fluxer.com that pairs a newly installed app with the old installed app. productName is the app name. #: src/features/auth/flow/AuthLoginLayout.tsx:101 msgid "Approve this app from the {productName} app you already use. No password needed." @@ -7873,6 +7861,11 @@ msgstr "Έλεγχος πρόσβασης..." msgid "Checking screen recording permission..." msgstr "Έλεγχος της άδειας εγγραφής οθόνης..." +#. Title while the browser looks up the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:224 +msgid "Checking the sign-in request…" +msgstr "Ελέγχεται το αίτημα σύνδεσης…" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -8847,6 +8840,11 @@ msgstr "Μπλοκ κώδικα" msgid "Code expired" msgstr "Ο κωδικός έληξε" +#. Label of the field in the browser where the user types the 12-character code shown in the desktop or mobile app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:28 +msgid "Code from the {productName} app" +msgstr "Κωδικός από την εφαρμογή {productName}" + #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 @@ -9348,7 +9346,6 @@ msgstr "Πλήρης απόκρυψη του σήματος {premiumProductName} #: src/features/auth/components/pages/SsoCallbackPage.tsx:256 #: src/features/auth/components/pages/SsoCallbackPage.tsx:322 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:216 msgid "Completing sign-in…" msgstr "Ολοκλήρωση σύνδεσης…" @@ -9782,7 +9779,6 @@ msgstr "Τα μενού περιβάλλοντος μπορούν να ανοί #: src/features/auth/components/modals/DeviceRevokeModal.tsx:77 #: src/features/auth/components/modals/PasskeyPinModal.tsx:111 #: src/features/auth/components/pages/oauth_authorize_page/OAuthAccountStep.tsx:36 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/connection/components/modals/AddConnectionModal.tsx:384 #: src/features/i18n/utils/CommonMessageDescriptors.ts:726 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:413 @@ -9790,6 +9786,11 @@ msgstr "Τα μενού περιβάλλοντος μπορούν να ανοί msgid "Continue" msgstr "Συνέχεια" +#. Title in the desktop app while it waits for the user to sign in on the browser page it opened. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:177 +msgid "Continue in your browser" +msgstr "Συνέχεια στο πρόγραμμα περιήγησής σας" + #. Button in the gift time confirmation that proceeds to subscription checkout. #: src/features/app/components/dialogs/components/plutonium/hooks/useCheckoutActions.tsx:145 msgid "Continue to checkout" @@ -10437,7 +10438,7 @@ msgid "Couldn't close DM" msgstr "Δεν ήταν δυνατό το κλείσιμο του DM" #. Desktop handoff flow error shown when finalizing the sign-in fails after a valid code. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:21 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:34 msgid "Couldn't complete sign-in. Try again." msgstr "Δεν ήταν δυνατή η ολοκλήρωση της σύνδεσης. Δοκιμάστε ξανά." @@ -10831,6 +10832,11 @@ msgstr "Δεν ήταν δυνατή η έναρξη της εξουσιοδότ msgid "Couldn't start checkout" msgstr "Δεν ήταν δυνατή η έναρξη της ολοκλήρωσης αγοράς" +#. Shown in the desktop app when the browser sign-in request could not be created. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:66 +msgid "Couldn't start signing in with your browser." +msgstr "Δεν ήταν δυνατή η έναρξη της σύνδεσης μέσω του προγράμματος περιήγησής σας." + #. Toast error shown when creating a new account connection fails. #: src/features/connection/commands/ConnectionCommands.ts:27 msgid "Couldn't start the connection" @@ -10942,7 +10948,7 @@ msgid "Couldn't upload banner" msgstr "Δεν ήταν δυνατή η μεταφόρτωση της εικόνας εξωφύλλου" #. Desktop handoff flow error shown when verifying the pairing code fails for an unexpected reason. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:17 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:30 msgid "Couldn't verify that code. Try again." msgstr "Δεν ήταν δυνατή η επαλήθευση αυτού του κωδικού. Δοκιμάστε ξανά." @@ -12503,7 +12509,6 @@ msgstr "Συμπαγής διάταξη" #. Short label in the settings dialog permission components. Keep the tone plain and specific. #: src/features/app/components/dialogs/shared/PermissionComponents.tsx:16 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:203 msgid "Deny" msgstr "Άρνηση" @@ -14910,15 +14915,16 @@ msgstr "Εισαγάγετε τον κωδικό {digitCount} ψηφίων απ msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Εισαγάγετε τον κωδικό {digitCount} ψηφίων από την εφαρμογή ελέγχου ταυτότητας." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:108 -msgid "Enter the code" -msgstr "Εισαγάγετε τον κωδικό" - #. Inline validation error on the verification step of the DSA report flow when the code field is empty. #: src/features/moderation/components/pages/ReportPage.tsx:74 msgid "Enter the code before continuing." msgstr "Εισάγετε τον κωδικό πριν συνεχίσετε." +#. Title of the browser page where the user types the 12-character code the app shows under Signing in on another device. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +msgid "Enter the code from the {PRODUCT_NAME} app" +msgstr "Εισάγετε τον κωδικό από την εφαρμογή {PRODUCT_NAME}" + #. Body text in the authentication sudo verification modal. Keep the tone plain and specific. #: src/features/auth/components/modals/SudoVerificationModal.tsx:56 msgid "Enter the code from your authenticator app." @@ -14933,10 +14939,6 @@ msgstr "Εισάγετε τον κωδικό που στάλθηκε στο τρ msgid "Enter the code sent to your email address." msgstr "Εισάγετε τον κωδικό που στάλθηκε στη διεύθυνση email σας." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:111 -msgid "Enter the code shown in the app to continue." -msgstr "Εισαγάγετε τον κωδικό που εμφανίζεται στην εφαρμογή για να συνεχίσετε." - #: src/features/user/components/modals/BouncedEmailChangeModal.tsx:157 #: src/features/user/components/modals/EmailChangeModal.tsx:244 msgid "Enter the code we emailed to your new address." @@ -14959,6 +14961,11 @@ msgstr "Εισάγετε το νέο email που θέλετε να χρησιμ msgid "Enter the PIN for your security key to continue." msgstr "Εισαγάγετε τον κωδικό PIN για το κλειδί ασφαλείας σας, ώστε να συνεχίσετε." +#. Title in the desktop app above the code the user types into a browser on another device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:228 +msgid "Enter this code in your browser" +msgstr "Εισάγετε αυτόν τον κωδικό στο πρόγραμμα περιήγησής σας" + #: src/features/auth/flow/HandoffCodeDisplay.tsx:132 msgid "Enter this code in your browser to complete sign-in." msgstr "Πληκτρολογήστε αυτόν τον κωδικό στο πρόγραμμα περιήγησής σας για να ολοκληρώσετε τη σύνδεση." @@ -15362,7 +15369,7 @@ msgstr "Λήγει μεταξύ {earliest} και {latest}" msgid "Expires in {remaining}s" msgstr "Λήγει σε {remaining} δευτ." -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:374 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:250 msgid "Expires in {remainingSeconds}s" msgstr "Λήγει σε {remainingSeconds} δευτ." @@ -16165,7 +16172,7 @@ msgid "Fluxer" msgstr "Fluxer" #. Status shown when browser sign-in status polling gives up after repeated failures. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:72 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:57 msgid "Fluxer stopped checking whether the browser approved this sign-in. It didn't lose your code." msgstr "Το Fluxer σταμάτησε να ελέγχει αν ο περιηγητής ενέκρινε αυτήν τη σύνδεση. Δεν έχασε τον κωδικό σας." @@ -16952,8 +16959,6 @@ msgstr "Δημιουργήστε έναν σύνδεσμο κοινής χρήσ msgid "Generate invite link" msgstr "Δημιουργία συνδέσμου πρόσκλησης" -#. Button label that replaces an expired browser sign-in code with a fresh one. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:64 #: src/features/auth/flow/HandoffCodeDisplay.tsx:117 msgid "Generate new code" msgstr "Δημιουργία νέου κωδικού" @@ -17348,6 +17353,16 @@ msgstr "Επιστρέψτε και εισαγάγετε ένα έγκυρο ema msgid "Go back to {productName} to continue." msgstr "Επιστρέψτε στο {productName} για να συνεχίσετε." +#. Shown after approving a sign-in for an app on another device, which signs in by itself shortly. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:292 +msgid "Go back to the {PRODUCT_NAME} app. It finishes signing in on its own." +msgstr "Επιστροφή στην εφαρμογή {PRODUCT_NAME}. Ολοκληρώνει τη σύνδεση μόνη της." + +#. Shown after approving, when the browser has already handed the sign-in back to the desktop app. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:288 +msgid "Go back to the {PRODUCT_NAME} app. You can close this tab." +msgstr "Επιστροφή στην εφαρμογή {PRODUCT_NAME}. Μπορείς να κλείσεις αυτή την καρτέλα." + #. Accessible label for the community row of an expression info card, which opens a community the viewer is already a member of. {communityName} is the community name. #: src/features/expressions/components/ExpressionInfoCard.tsx:89 msgid "Go to {communityName}" @@ -19295,11 +19310,6 @@ msgstr "Μη έγκυρο JSON. Επικολλήστε την πλήρη από msgid "Invalid or expired code" msgstr "Μη έγκυρος ή ληγμένος κωδικός" -#. Desktop handoff flow error shown when the entered pairing code is invalid or expired. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:13 -msgid "Invalid or expired code. Try again." -msgstr "Μη έγκυρος ή ληγμένος κωδικός. Δοκιμάστε ξανά." - #. Short label in the authentication authorize flow. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/state/useAuthorizeFlow.ts:82 msgid "Invalid redirect_uri" @@ -20876,7 +20886,7 @@ msgstr "Μορφή ώρας περιοχής" msgid "Localization" msgstr "Γλώσσα και περιοχή" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:192 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:109 #: src/features/user/components/modals/tabs/DevicesTab.tsx:152 msgid "Location" msgstr "Τοποθεσία" @@ -21034,6 +21044,11 @@ msgstr "Να γίνει ο/η {userName} κάτοχος της ομάδας; Θ msgid "Make group owner" msgstr "Ορισμός ως κατόχου ομάδας" +#. Shown above the code on the browser approval page when the app cannot be signed in automatically. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:253 +msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." +msgstr "Βεβαιωθείτε ότι αυτός ο κωδικός ταιριάζει με αυτόν στην εφαρμογή {PRODUCT_NAME}." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" @@ -24668,6 +24683,11 @@ msgstr "Στις <0>{listPriceEffectiveDate} η συνδρομή σας αλ msgid "On click" msgstr "Με κλικ" +#. One line explanation in the desktop app above the code. signInAddress is the web address of the sign-in page, such as web.fluxer.app/login?handoff=1. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:236 +msgid "On your other device, sign in at {signInAddress} and enter this code when asked." +msgstr "Στη συσκευή σας, συνδεθείτε στη διεύθυνση {signInAddress} και εισαγάγετε αυτόν τον κωδικό όταν σας ζητηθεί." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:715 msgid "Once deleted, the application and its credentials are permanently removed." msgstr "Μόλις διαγραφεί, η εφαρμογή και τα διαπιστευτήριά της καταργούνται οριστικά." @@ -24733,6 +24753,11 @@ msgstr "Μόνο @αναφορές" msgid "Only applies on wide screens." msgstr "Εφαρμόζεται μόνο σε μεγάλες οθόνες." +#. Warning under the title of the browser approval page, so people do not approve a sign-in someone else started. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:245 +msgid "Only continue if you started this sign-in on a device you control." +msgstr "Συνέχισε μόνο αν ξεκίνησες αυτήν τη σύνδεση σε μια συσκευή που ελέγχεις." + #. Body copy in the mature content check modal. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:32 msgid "Only credit cards are accepted. Debit and prepaid cards cannot be used for the mature content check." @@ -24921,6 +24946,11 @@ msgstr "Άνοιγμα {landmarkName}" msgid "Open {premiumProductFullName}" msgstr "Άνοιγμα {premiumProductFullName}" +#. Button on the browser page after approving that opens the desktop app again if it did not come to the front. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:304 +msgid "Open {PRODUCT_NAME}" +msgstr "Άνοιγμα {PRODUCT_NAME}" + #. Button label that opens the desktop app. productName is the app name. #. Button that hands SSO sign-in back to the mobile app. productName is the app name. #: src/features/auth/components/pages/SsoCallbackPage.tsx:47 @@ -25011,12 +25041,15 @@ msgstr "Άνοιγμα επιλογών banner" msgid "Open bookmarks" msgstr "Άνοιγμα σελιδοδεικτών" -#. Button label that opens the browser sign-in handoff page. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:56 #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:184 msgid "Open browser" msgstr "Άνοιγμα προγράμματος περιήγησης" +#. Button in the desktop app that reopens the browser sign-in page while the app waits for the browser. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:53 +msgid "Open browser again" +msgstr "Άνοιγμα προγράμματος περιήγησης ξανά" + #. Primary button in the screen-share picker on web. Hands off to the browser's native getDisplayMedia picker. #: src/features/voice/components/modals/ScreenSharePickerModal.tsx:209 msgid "Open browser picker" @@ -25392,10 +25425,6 @@ msgstr "Άνοιγμα ρυθμίσεων φωνής και βίντεο" msgid "Open with {accountName} on {instanceName}" msgstr "Άνοιγμα με {accountName} στο {instanceName}" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:414 -msgid "Open your browser to finish signing in." -msgstr "Άνοιξε το πρόγραμμα περιήγησής σου για να ολοκληρώσεις τη σύνδεση." - #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:137 msgid "Open your browser, sign in, then enter the code below to link your account." msgstr "Ανοίξτε το πρόγραμμα περιήγησής σας, συνδεθείτε και, στη συνέχεια, εισαγάγετε τον παρακάτω κωδικό για να συνδέσετε τον λογαριασμό σας." @@ -25421,7 +25450,7 @@ msgstr "Ανοίγει τη σελίδα Μέλη. Πατήστε το Διάσ #. Short label in the language tab. Keep it concise. #. Spellcheck engine option in the textarea spellcheck submenu. Uses the host operating system spellchecker. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:79 #: src/features/user/components/modals/tabs/LanguageTab.tsx:110 msgid "Operating system" @@ -26439,7 +26468,7 @@ msgstr "Πρόγραμμα" msgid "Plans, perks, gifts and your subscription all live on one page." msgstr "Πλάνα, προνόμια, δώρα και η συνδρομή σας βρίσκονται όλα σε μία σελίδα." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:172 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:89 msgid "Platform" msgstr "Πλατφόρμα" @@ -31859,11 +31888,6 @@ msgstr "Εμφάνιση συνομιλίας" msgid "Show chat with {count, plural, one {# unread message} other {# unread messages}}" msgstr "Εμφάνιση συνομιλίας με {count, plural, one {# μη αναγνωσμένο μήνυμα} other {# μη αναγνωσμένα μηνύματα}}" -#. Button label that opens the manual browser handoff code fallback. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:60 -msgid "Show code" -msgstr "Εμφάνιση κωδικού" - #. Developer voice status menu option for displaying the voice connection identifier. #: src/features/voice/components/voice_connection_status/VoiceConnectionStatusInner.tsx:76 msgid "Show connection ID" @@ -32306,7 +32330,9 @@ msgstr "Εμφανίζει το banner στη δική του ενότητα κ msgid "Sidebar" msgstr "Πλευρική γραμμή" +#. Button in the browser that approves signing in to the desktop or mobile app that asked for it. #. Generic authentication action label. Use for buttons, links, page titles, and accessible labels. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:33 #: src/features/i18n/utils/CommonMessageDescriptors.ts:79 msgid "Sign in" msgstr "Σύνδεση" @@ -32321,10 +32347,35 @@ msgstr "Συνδεθείτε ξανά" msgid "Sign in again as {accountLabel}" msgstr "Συνδέσου ξανά ως {accountLabel}" +#. Shown in the desktop app while it waits for the browser. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:193 +msgid "Sign in to {instanceName} in your browser and confirm. This app finishes signing in on its own." +msgstr "Συνδέσου στο {instanceName} από τον περιηγητή σου και επιβεβαίωσε. Η εφαρμογή θα ολοκληρώσει τη σύνδεση μόνη της." + +#. Shown in the desktop app above the code when the browser cannot return the sign-in automatically. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:189 +msgid "Sign in to {instanceName} in your browser, and check that it shows this code:" +msgstr "Συνδέσου στο {instanceName} από τον περιηγητή σου και έλεγξε ότι εμφανίζει αυτόν τον κωδικό:" + #: src/features/auth/flow/GiftHeader.tsx:33 msgid "Sign in to claim your gift" msgstr "Συνδεθείτε για να παραλάβετε το δώρο σας" +#. Title of the browser page where the user approves signing in to an app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:71 +msgid "Sign in to the {PRODUCT_NAME} app" +msgstr "Σύνδεση στην εφαρμογή {PRODUCT_NAME}" + +#. Title of the browser page where the user approves signing in to the desktop app that opened it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:58 +msgid "Sign in to the {PRODUCT_NAME} desktop app" +msgstr "Σύνδεση στην εφαρμογή επιφάνειας εργασίας {PRODUCT_NAME}" + +#. Title of the browser page where the user approves signing in to the mobile app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:65 +msgid "Sign in to the {PRODUCT_NAME} mobile app" +msgstr "Σύνδεση στην εφαρμογή κινητού {PRODUCT_NAME}" + #. Action label that starts passkey authentication. #: src/features/auth/AuthMessageDescriptors.ts:13 msgid "Sign in with a passkey" @@ -32403,14 +32454,10 @@ msgstr "Αποσύνδεση άλλων συσκευών από τον λογα msgid "Sign out?" msgstr "Αποσύνδεση;" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:234 -msgid "Sign-in approved" -msgstr "Η σύνδεση εγκρίθηκε" - -#. Short label in the authentication handoff approval flow. Keep the tone plain and specific. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:26 -msgid "Sign-in code" -msgstr "Κωδικός σύνδεσης" +#. Title of the browser page after the user cancelled the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:322 +msgid "Sign-in cancelled" +msgstr "Ακύρωση σύνδεσης" #. Section title for email address and password controls in the account security tab. Keep it concise. #: src/features/user/components/modals/tabs/account_security_tab/AccountSecuritySections.tsx:23 @@ -32433,10 +32480,6 @@ msgstr "Ροή σύνδεσης" msgid "Sign-in method" msgstr "Μέθοδος σύνδεσης" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:84 -msgid "Sign-in request" -msgstr "Αίτημα σύνδεσης" - #. Aria label on the signal-strength icon shown while the first latency sample is still pending. #: src/features/voice/components/SignalStrengthIcon.tsx:16 msgid "Signal strength loading" @@ -32453,6 +32496,21 @@ msgstr "Συνδεδεμένος" msgid "Signed-in devices" msgstr "Συνδεδεμένες συσκευές" +#. Shown on the browser approval page above the buttons. name is the display name of the account that will be signed in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:137 +msgid "Signing in as {name}" +msgstr "Σύνδεση ως {name}" + +#. Text button in the desktop app that shows a code to type into a browser on a different device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:207 +msgid "Signing in on another device?" +msgstr "Συνδέεστε σε άλλη συσκευή;" + +#. Title while the browser approves the sign-in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:228 +msgid "Signing in…" +msgstr "Είσοδος σε εξέλιξη…" + #. Label for Bluesky OAuth signing key ID input. #: src/features/app/components/setup/SetupWizardSteps.tsx:1161 msgid "Signing key ID" @@ -33504,6 +33562,8 @@ msgstr "Έναρξη δοκιμής μικροφώνου" msgid "Start minimized" msgstr "Έναρξη ελαχιστοποιημένο" +#. Button on the browser page after cancelling that goes back to choosing an account. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:337 #: src/features/moderation/components/report/ReportStepDetails.tsx:326 #: src/features/moderation/components/report/ReportStepEmail.tsx:97 #: src/features/moderation/components/report/ReportStepVerification.tsx:134 @@ -34910,6 +34970,11 @@ msgstr "Ταϊλανδικά" msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Σας ευχαριστούμε που συμβάλλετε στη διατήρηση της ασφάλειας του {productName}. Θα εξετάσουμε την αναφορά σας το συντομότερο δυνατό." +#. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 +msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." +msgstr "Αυτός ο κωδικός δεν είναι έγκυρος στο {instanceHost}. Ελέγξτε τον κωδικό στην εφαρμογή {productName} και δοκιμάστε ξανά." + #. Body of the passkey page after the passkey prompt failed or was dismissed. Keep plain. #: src/features/auth/passkey_migration/PasskeyBridgePage.tsx:36 msgid "That didn't work. Try again or cancel." @@ -34953,11 +35018,6 @@ msgstr "Δεν ήταν δυνατή η διαγραφή του μηνύματο msgid "That message is gone, or you lost access to the conversation." msgstr "Αυτό το μήνυμα έχει διαγραφεί ή χάσατε την πρόσβαση στη συνομιλία." -#. Error shown when a browser sign-in handoff code expires before it is approved. -#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 -msgid "That sign-in code expired. Try again." -msgstr "Αυτός ο κωδικός σύνδεσης έληξε. Δοκιμάστε ξανά." - #. End-of-list line in the saved messages popout after every bookmark has been shown. #. End-of-list line on the saved messages page after every bookmark has been shown. #: src/features/messaging/components/pages/SavedMessagesPage.tsx:35 @@ -34965,6 +35025,21 @@ msgstr "Αυτός ο κωδικός σύνδεσης έληξε. Δοκιμάσ msgid "That's all of them." msgstr "Αυτά ήταν όλα." +#. Warning on the browser approval page when the app asked for a different account than the one chosen. requestedIdentifier is the email or username the app asked for, name is the chosen account's display name. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:131 +msgid "The {PRODUCT_NAME} app asked to sign in as {requestedIdentifier}, but you chose {name}." +msgstr "Η εφαρμογή {PRODUCT_NAME} ζήτησε να συνδεθείτε ως {requestedIdentifier}, αλλά επιλέξατε {name}." + +#. Explains where the code comes from, under the title of the browser page where it is typed. Signing in on another device is the label of a button in the app and must match its translation. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:187 +msgid "The {PRODUCT_NAME} app on your other device shows it under Signing in on another device. Only enter a code from a device you control." +msgstr "Η εφαρμογή {PRODUCT_NAME} στη συσκευή σας δείχνει \"Σύνδεση σε άλλη συσκευή\". Εισαγάγετε μόνο έναν κωδικό από μια συσκευή που ελέγχετε." + +#. Shown after the user cancelled the sign-in request in the browser. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:327 +msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." +msgstr "Η εφαρμογή {PRODUCT_NAME} δεν συνδέθηκε. Μπορείτε να κλείσετε αυτήν την καρτέλα." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -34983,10 +35058,6 @@ msgstr "Η εφαρμογή έκλεισε απροσδόκητα" msgid "The app has crashed. Checking for updates that might fix this issue…" msgstr "Η εφαρμογή έκλεισε απροσδόκητα. Αναζητούμε ενημερώσεις που μπορεί να διορθώσουν το πρόβλημα…" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:237 -msgid "The app should now be signed in to your account." -msgstr "Η εφαρμογή θα πρέπει τώρα να έχει συνδεθεί στον λογαριασμό σας." - #. Activity log detail line under a lifted ban, for a temporary ban that had already ended on its own before it was lifted. A ban is the community ban, not the feature that blocks a user. {date} is when the ban ended, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:55 msgid "The ban had already expired on {date}" @@ -35184,6 +35255,16 @@ msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "Η πηγή κοινής χρήσης οθόνης σταμάτησε να στέλνει βίντεο, επομένως η κοινή χρήση της οθόνης σας διακόπηκε." +#. Error shown in the desktop app when a browser sign-in request expires before it is approved in the browser. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 +msgid "The sign-in request expired before your browser approved it." +msgstr "Το αίτημα σύνδεσης έληξε πριν το εγκρίνετε στο πρόγραμμα περιήγησής σας." + +#. Error shown in the desktop app when the user pressed Cancel on the browser sign-in page. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:14 +msgid "The sign-in was cancelled in your browser." +msgstr "Η σύνδεση ακυρώθηκε στο πρόγραμμα περιήγησής σας." + #. Activity log detail line under a deleted sticker, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the sticker, shown as a clickable user chip. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts:100 msgid "The sticker was uploaded by {user}" @@ -35408,6 +35489,11 @@ msgstr "Τρίτα μέρη" msgid "This account can't be blocked." msgstr "Αυτός ο λογαριασμός δεν μπορεί να μπλοκαριστεί." +#. Error in the browser when the chosen account belongs to a different server than the app that asked to sign in. accountHost and requestHost are server addresses. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:38 +msgid "This account is on {accountHost}, but the {productName} app is signing in to {requestHost}. Choose an account on {requestHost}." +msgstr "Αυτός ο λογαριασμός βρίσκεται στο {accountHost}, αλλά η εφαρμογή {productName} συνδέεται στο {requestHost}. Επιλέξτε έναν λογαριασμό από το {requestHost}." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:418 msgid "This action cannot be undone. All associated data, including the bot user, will be permanently deleted." msgstr "Αυτή η ενέργεια δεν μπορεί να αναιρεθεί. Όλα τα σχετικά δεδομένα, συμπεριλαμβανομένου του χρήστη bot, θα διαγραφούν οριστικά." @@ -35551,11 +35637,6 @@ msgstr "Αυτό διαγράφει εντελώς την κατάσταση pre msgid "This code doesn't exist." msgstr "Αυτός ο κωδικός δεν υπάρχει." -#. Status shown under the browser sign-in code once its countdown reaches zero. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:68 -msgid "This code expired." -msgstr "Αυτός ο κωδικός έληξε." - #. Gift redemption error modal body for an invalid or already used code. #: src/features/gift/commands/GiftCommands.tsx:37 msgid "This code is invalid or already used." @@ -36075,6 +36156,11 @@ msgstr "Αυτός ο σύνδεσμος επαναφοράς έχει λήξε msgid "This shows how links appear: {linkPreviewExampleUrl}" msgstr "Έτσι εμφανίζονται οι σύνδεσμοι: {linkPreviewExampleUrl}" +#. Error in the browser when the sign-in request from the desktop app no longer exists, because it expired or the app cancelled it. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:20 +msgid "This sign-in request expired or was cancelled in the {productName} app. Start again from the app." +msgstr "Αυτό το αίτημα σύνδεσης έληξε ή ακυρώθηκε στην εφαρμογή {productName}. Ξεκινήστε ξανά από την εφαρμογή." + #. Label above the community a sticker comes from in the sticker info card. #: src/features/expressions/components/ExpressionInfoCard.tsx:75 msgid "This sticker is from" @@ -38520,6 +38606,11 @@ msgstr "Χρησιμοποιήστε το {url} όπου πρέπει να ει msgid "Use a dedicated modal to set a message history threshold date for members who don't have the {readMessageHistoryPermissionLabel} permission." msgstr "Χρησιμοποιήστε ένα ειδικό αναδυόμενο παράθυρο για να ορίσετε μια ημερομηνία ορίου ιστορικού μηνυμάτων για μέλη που δεν έχουν το δικαίωμα {readMessageHistoryPermissionLabel}." +#. Text button on the browser approval page that goes back to choosing which account signs in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:149 +msgid "Use a different account" +msgstr "Χρήση διαφορετικού λογαριασμού" + #: src/features/auth/flow/instance_selector/InstancePickerRows.tsx:267 msgid "Use a self-hosted instance URL" msgstr "Χρησιμοποιήστε μια διεύθυνση URL για αυτο-φιλοξενούμενη παρουσία" @@ -39296,10 +39387,6 @@ msgstr "Επαληθεύστε το email σας για να αγοράσετε msgid "Verify your email to start DMs." msgstr "Επαληθεύστε το email σας για να ξεκινήσετε DM." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:142 -msgid "Verifying code…" -msgstr "Επαλήθευση κωδικού…" - #: src/features/auth/components/pages/ResetPasswordPage.tsx:145 msgid "Verifying your reset link…" msgstr "Επαλήθευση του συνδέσμου επαναφοράς…" @@ -40073,10 +40160,6 @@ msgstr "Περίμενε λίγο πριν διαγράψεις κι άλλα μ msgid "Wait between messages. Members with \"{bypassSlowmodePermissionLabel}\" can bypass this." msgstr "Χρονικό διάστημα μεταξύ των μηνυμάτων. Τα μέλη με το δικαίωμα \"{bypassSlowmodePermissionLabel}\" μπορούν να το παρακάμψουν." -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:445 -msgid "Waiting for browser approval." -msgstr "Αναμονή έγκρισης από το πρόγραμμα περιήγησης." - #. Tooltip explaining that video / screen share controls are gated while the voice connection is not yet ready. #: src/features/voice/components/voice_connection_status/LocalParticipantControls.tsx:45 msgid "Waiting for connection..." @@ -40118,10 +40201,6 @@ msgstr "Αφύπνιση" msgid "Warning" msgstr "Προειδοποίηση" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:158 -msgid "Was this you?" -msgstr "Ήσασταν εσείς;" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:243 msgctxt "us-state" @@ -40959,10 +41038,6 @@ msgstr "Έχετε ήδη ισόβιο {premiumProductName}" msgid "You already have this connection." msgstr "Έχετε ήδη αυτήν τη σύνδεση." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:87 -msgid "You are about to authorize an app to sign in to your account. Only continue if you initiated this request from a device you control." -msgstr "Πρόκειται να εξουσιοδοτήσετε μια εφαρμογή να συνδεθεί στον λογαριασμό σας. Συνεχίστε μόνο αν ξεκινήσατε αυτό το αίτημα από μια συσκευή που ελέγχετε." - #. External link warning title. productName is the Fluxer product name. #: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:22 msgid "You are about to leave {productName}" @@ -41732,6 +41807,11 @@ msgstr "Έχετε μια παλιά τιμή. Η τρέχουσα τιμή γι msgid "You're sending messages too quickly" msgstr "Στέλνετε μηνύματα πολύ γρήγορα" +#. Title of the browser page after the user approved signing in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:282 +msgid "You're signed in" +msgstr "Συνδεθήκατε" + #. Status text on the screen-share hover popout shown to the local streamer. Lightly playful tone. #: src/features/voice/components/StreamWatchHoverPopout.tsx:43 msgid "You're streaming!" 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 ad3461c7c..f3588d387 100644 --- a/fluxer_app/src/features/i18n/locales/en-GB/messages.po +++ b/fluxer_app/src/features/i18n/locales/en-GB/messages.po @@ -1573,7 +1573,7 @@ msgid "{imageCount, plural, one {# image} other {# images}}, {videoCount, plural msgstr "{imageCount, plural, one {# image} other {# images}}, {videoCount, plural, one {# video} other {# videos}}" #. Explanation shown when the selected instance advertises no web app endpoint. Instance name is interpolated. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:76 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:61 msgid "{instanceName} does not publish a web address, so sign-in cannot be handed to a browser." msgstr "{instanceName} does not publish a web address, so sign-in cannot be handed to a browser." @@ -2778,14 +2778,6 @@ msgstr "a rich embed or link preview (not an uploaded file)" msgid "A separate profile for each community" msgstr "A separate profile for each community" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:164 -msgid "A sign-in request was made for your account. Only approve if you initiated it." -msgstr "A sign-in request was made for your account. Only approve if you initiated it." - -#: src/features/auth/flow/HandoffApprovalFlow.tsx:162 -msgid "A sign-in request was made from the following device. Only approve if you recognize it." -msgstr "A sign-in request was made from the following device. Only approve if you recognise it." - #. Description for has:sticker. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:51 msgid "a sticker" @@ -4812,10 +4804,6 @@ msgstr "Apply to all communities" msgid "Approval required" msgstr "Approval required" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:206 -msgid "Approve" -msgstr "Approve" - #. Hint under the sign-in option on fluxer.com that pairs a newly installed app with the old installed app. productName is the app name. #: src/features/auth/flow/AuthLoginLayout.tsx:101 msgid "Approve this app from the {productName} app you already use. No password needed." @@ -7874,6 +7862,11 @@ msgstr "Checking access..." msgid "Checking screen recording permission..." msgstr "Checking screen recording permission..." +#. Title while the browser looks up the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:224 +msgid "Checking the sign-in request…" +msgstr "Checking the sign-in request…" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -8848,6 +8841,11 @@ msgstr "Code blocks" msgid "Code expired" msgstr "Code expired" +#. Label of the field in the browser where the user types the 12-character code shown in the desktop or mobile app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:28 +msgid "Code from the {productName} app" +msgstr "Code from the {productName} app" + #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 @@ -9349,7 +9347,6 @@ msgstr "Completely hide your {premiumProductName} badge from other users" #: src/features/auth/components/pages/SsoCallbackPage.tsx:256 #: src/features/auth/components/pages/SsoCallbackPage.tsx:322 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:216 msgid "Completing sign-in…" msgstr "Completing sign-in…" @@ -9783,7 +9780,6 @@ msgstr "Context menus can be opened with left-click (on buttons) or right-click #: src/features/auth/components/modals/DeviceRevokeModal.tsx:77 #: src/features/auth/components/modals/PasskeyPinModal.tsx:111 #: src/features/auth/components/pages/oauth_authorize_page/OAuthAccountStep.tsx:36 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/connection/components/modals/AddConnectionModal.tsx:384 #: src/features/i18n/utils/CommonMessageDescriptors.ts:726 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:413 @@ -9791,6 +9787,11 @@ msgstr "Context menus can be opened with left-click (on buttons) or right-click msgid "Continue" msgstr "Continue" +#. Title in the desktop app while it waits for the user to sign in on the browser page it opened. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:177 +msgid "Continue in your browser" +msgstr "Continue in your browser" + #. Button in the gift time confirmation that proceeds to subscription checkout. #: src/features/app/components/dialogs/components/plutonium/hooks/useCheckoutActions.tsx:145 msgid "Continue to checkout" @@ -10438,7 +10439,7 @@ msgid "Couldn't close DM" msgstr "Couldn't close DM" #. Desktop handoff flow error shown when finalizing the sign-in fails after a valid code. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:21 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:34 msgid "Couldn't complete sign-in. Try again." msgstr "Couldn't complete sign-in. Try again." @@ -10832,6 +10833,11 @@ msgstr "Couldn't start {blueskyProviderName} authorisation" msgid "Couldn't start checkout" msgstr "Couldn't start checkout" +#. Shown in the desktop app when the browser sign-in request could not be created. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:66 +msgid "Couldn't start signing in with your browser." +msgstr "Couldn't start signing in with your browser." + #. Toast error shown when creating a new account connection fails. #: src/features/connection/commands/ConnectionCommands.ts:27 msgid "Couldn't start the connection" @@ -10943,7 +10949,7 @@ msgid "Couldn't upload banner" msgstr "Couldn't upload banner" #. Desktop handoff flow error shown when verifying the pairing code fails for an unexpected reason. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:17 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:30 msgid "Couldn't verify that code. Try again." msgstr "Couldn't verify that code. Try again." @@ -12504,7 +12510,6 @@ msgstr "Dense layout" #. Short label in the settings dialog permission components. Keep the tone plain and specific. #: src/features/app/components/dialogs/shared/PermissionComponents.tsx:16 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:203 msgid "Deny" msgstr "Deny" @@ -14911,15 +14916,16 @@ msgstr "Enter the {digitCount}-digit code from your authenticator app or one of msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Enter the {digitCount}-digit code from your authenticator app." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:108 -msgid "Enter the code" -msgstr "Enter the code" - #. Inline validation error on the verification step of the DSA report flow when the code field is empty. #: src/features/moderation/components/pages/ReportPage.tsx:74 msgid "Enter the code before continuing." msgstr "Enter the code before continuing." +#. Title of the browser page where the user types the 12-character code the app shows under Signing in on another device. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +msgid "Enter the code from the {PRODUCT_NAME} app" +msgstr "Enter the code from the {PRODUCT_NAME} app" + #. Body text in the authentication sudo verification modal. Keep the tone plain and specific. #: src/features/auth/components/modals/SudoVerificationModal.tsx:56 msgid "Enter the code from your authenticator app." @@ -14934,10 +14940,6 @@ msgstr "Enter the code sent to your current email." msgid "Enter the code sent to your email address." msgstr "Enter the code sent to your email address." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:111 -msgid "Enter the code shown in the app to continue." -msgstr "Enter the code shown in the app to continue." - #: src/features/user/components/modals/BouncedEmailChangeModal.tsx:157 #: src/features/user/components/modals/EmailChangeModal.tsx:244 msgid "Enter the code we emailed to your new address." @@ -14960,6 +14962,11 @@ msgstr "Enter the new email you want to use. We'll send a code there next." msgid "Enter the PIN for your security key to continue." msgstr "Enter the PIN for your security key to continue." +#. Title in the desktop app above the code the user types into a browser on another device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:228 +msgid "Enter this code in your browser" +msgstr "Enter this code in your browser" + #: src/features/auth/flow/HandoffCodeDisplay.tsx:132 msgid "Enter this code in your browser to complete sign-in." msgstr "Enter this code in your browser to complete sign-in." @@ -15363,7 +15370,7 @@ msgstr "Expires between {earliest} and {latest}" msgid "Expires in {remaining}s" msgstr "Expires in {remaining}s" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:374 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:250 msgid "Expires in {remainingSeconds}s" msgstr "Expires in {remainingSeconds}s" @@ -16166,7 +16173,7 @@ msgid "Fluxer" msgstr "Fluxer" #. Status shown when browser sign-in status polling gives up after repeated failures. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:72 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:57 msgid "Fluxer stopped checking whether the browser approved this sign-in. It didn't lose your code." msgstr "Fluxer stopped checking whether the browser approved this sign-in. It didn't lose your code." @@ -16953,8 +16960,6 @@ msgstr "Generate a shareable link or copy your combined custom CSS." msgid "Generate invite link" msgstr "Generate invite link" -#. Button label that replaces an expired browser sign-in code with a fresh one. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:64 #: src/features/auth/flow/HandoffCodeDisplay.tsx:117 msgid "Generate new code" msgstr "Generate new code" @@ -17349,6 +17354,16 @@ msgstr "Go back and enter a valid email." msgid "Go back to {productName} to continue." msgstr "Go back to {productName} to continue." +#. Shown after approving a sign-in for an app on another device, which signs in by itself shortly. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:292 +msgid "Go back to the {PRODUCT_NAME} app. It finishes signing in on its own." +msgstr "Go back to the {PRODUCT_NAME} app. It finishes signing in on its own." + +#. Shown after approving, when the browser has already handed the sign-in back to the desktop app. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:288 +msgid "Go back to the {PRODUCT_NAME} app. You can close this tab." +msgstr "Go back to the {PRODUCT_NAME} app. You can close this tab." + #. Accessible label for the community row of an expression info card, which opens a community the viewer is already a member of. {communityName} is the community name. #: src/features/expressions/components/ExpressionInfoCard.tsx:89 msgid "Go to {communityName}" @@ -19296,11 +19311,6 @@ msgstr "Invalid JSON. Paste the full response from the URL above." msgid "Invalid or expired code" msgstr "Invalid or expired code" -#. Desktop handoff flow error shown when the entered pairing code is invalid or expired. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:13 -msgid "Invalid or expired code. Try again." -msgstr "Invalid or expired code. Try again." - #. Short label in the authentication authorize flow. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/state/useAuthorizeFlow.ts:82 msgid "Invalid redirect_uri" @@ -20877,7 +20887,7 @@ msgstr "Locale time format" msgid "Localization" msgstr "Localisation" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:192 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:109 #: src/features/user/components/modals/tabs/DevicesTab.tsx:152 msgid "Location" msgstr "Location" @@ -21035,6 +21045,11 @@ msgstr "Make {userName} the group owner? You'll lose owner privileges." msgid "Make group owner" msgstr "Make group owner" +#. Shown above the code on the browser approval page when the app cannot be signed in automatically. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:253 +msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." +msgstr "Make sure this code matches the one in the {PRODUCT_NAME} app." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" @@ -24669,6 +24684,11 @@ msgstr "On <0>{listPriceEffectiveDate} your subscription moves from {listPri msgid "On click" msgstr "On click" +#. One line explanation in the desktop app above the code. signInAddress is the web address of the sign-in page, such as web.fluxer.app/login?handoff=1. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:236 +msgid "On your other device, sign in at {signInAddress} and enter this code when asked." +msgstr "On your other device, sign in at {signInAddress} and enter this code when asked." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:715 msgid "Once deleted, the application and its credentials are permanently removed." msgstr "Once deleted, the application and its credentials are permanently removed." @@ -24734,6 +24754,11 @@ msgstr "Only @mentions" msgid "Only applies on wide screens." msgstr "Only applies on wide screens." +#. Warning under the title of the browser approval page, so people do not approve a sign-in someone else started. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:245 +msgid "Only continue if you started this sign-in on a device you control." +msgstr "Only continue if you started this sign-in on a device you control." + #. Body copy in the mature content check modal. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:32 msgid "Only credit cards are accepted. Debit and prepaid cards cannot be used for the mature content check." @@ -24922,6 +24947,11 @@ msgstr "Open {landmarkName}" msgid "Open {premiumProductFullName}" msgstr "Open {premiumProductFullName}" +#. Button on the browser page after approving that opens the desktop app again if it did not come to the front. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:304 +msgid "Open {PRODUCT_NAME}" +msgstr "Open {PRODUCT_NAME}" + #. Button label that opens the desktop app. productName is the app name. #. Button that hands SSO sign-in back to the mobile app. productName is the app name. #: src/features/auth/components/pages/SsoCallbackPage.tsx:47 @@ -25012,12 +25042,15 @@ msgstr "Open banner options" msgid "Open bookmarks" msgstr "Open bookmarks" -#. Button label that opens the browser sign-in handoff page. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:56 #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:184 msgid "Open browser" msgstr "Open browser" +#. Button in the desktop app that reopens the browser sign-in page while the app waits for the browser. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:53 +msgid "Open browser again" +msgstr "Open browser again" + #. Primary button in the screen-share picker on web. Hands off to the browser's native getDisplayMedia picker. #: src/features/voice/components/modals/ScreenSharePickerModal.tsx:209 msgid "Open browser picker" @@ -25393,10 +25426,6 @@ msgstr "Open voice & video settings" msgid "Open with {accountName} on {instanceName}" msgstr "Open with {accountName} on {instanceName}" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:414 -msgid "Open your browser to finish signing in." -msgstr "Open your browser to finish signing in." - #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:137 msgid "Open your browser, sign in, then enter the code below to link your account." msgstr "Open your browser, sign in, then enter the code below to link your account." @@ -25422,7 +25451,7 @@ msgstr "Opens the Members page. Press Space or Enter to open." #. Short label in the language tab. Keep it concise. #. Spellcheck engine option in the textarea spellcheck submenu. Uses the host operating system spellchecker. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:79 #: src/features/user/components/modals/tabs/LanguageTab.tsx:110 msgid "Operating system" @@ -26440,7 +26469,7 @@ msgstr "Plan" msgid "Plans, perks, gifts and your subscription all live on one page." msgstr "Plans, perks, gifts and your subscription all live on one page." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:172 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:89 msgid "Platform" msgstr "Platform" @@ -31860,11 +31889,6 @@ msgstr "Show chat" msgid "Show chat with {count, plural, one {# unread message} other {# unread messages}}" msgstr "Show chat with {count, plural, one {# unread message} other {# unread messages}}" -#. Button label that opens the manual browser handoff code fallback. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:60 -msgid "Show code" -msgstr "Show code" - #. Developer voice status menu option for displaying the voice connection identifier. #: src/features/voice/components/voice_connection_status/VoiceConnectionStatusInner.tsx:76 msgid "Show connection ID" @@ -32307,7 +32331,9 @@ msgstr "Shows the banner in its own section below the community header." msgid "Sidebar" msgstr "Sidebar" +#. Button in the browser that approves signing in to the desktop or mobile app that asked for it. #. Generic authentication action label. Use for buttons, links, page titles, and accessible labels. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:33 #: src/features/i18n/utils/CommonMessageDescriptors.ts:79 msgid "Sign in" msgstr "Sign in" @@ -32322,10 +32348,35 @@ msgstr "Sign in again" msgid "Sign in again as {accountLabel}" msgstr "Sign in again as {accountLabel}" +#. Shown in the desktop app while it waits for the browser. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:193 +msgid "Sign in to {instanceName} in your browser and confirm. This app finishes signing in on its own." +msgstr "Sign in to {instanceName} in your browser and confirm. This app finishes signing in on its own." + +#. Shown in the desktop app above the code when the browser cannot return the sign-in automatically. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:189 +msgid "Sign in to {instanceName} in your browser, and check that it shows this code:" +msgstr "Sign in to {instanceName} in your browser, and check that it shows this code:" + #: src/features/auth/flow/GiftHeader.tsx:33 msgid "Sign in to claim your gift" msgstr "Sign in to claim your gift" +#. Title of the browser page where the user approves signing in to an app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:71 +msgid "Sign in to the {PRODUCT_NAME} app" +msgstr "Sign in to the {PRODUCT_NAME} app" + +#. Title of the browser page where the user approves signing in to the desktop app that opened it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:58 +msgid "Sign in to the {PRODUCT_NAME} desktop app" +msgstr "Sign in to the {PRODUCT_NAME} desktop app" + +#. Title of the browser page where the user approves signing in to the mobile app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:65 +msgid "Sign in to the {PRODUCT_NAME} mobile app" +msgstr "Sign in to the {PRODUCT_NAME} mobile app" + #. Action label that starts passkey authentication. #: src/features/auth/AuthMessageDescriptors.ts:13 msgid "Sign in with a passkey" @@ -32404,14 +32455,10 @@ msgstr "Sign out other devices from your account" msgid "Sign out?" msgstr "Sign out?" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:234 -msgid "Sign-in approved" -msgstr "Sign-in approved" - -#. Short label in the authentication handoff approval flow. Keep the tone plain and specific. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:26 -msgid "Sign-in code" -msgstr "Sign-in code" +#. Title of the browser page after the user cancelled the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:322 +msgid "Sign-in cancelled" +msgstr "Sign-in cancelled" #. Section title for email address and password controls in the account security tab. Keep it concise. #: src/features/user/components/modals/tabs/account_security_tab/AccountSecuritySections.tsx:23 @@ -32434,10 +32481,6 @@ msgstr "Sign-in flow" msgid "Sign-in method" msgstr "Sign-in method" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:84 -msgid "Sign-in request" -msgstr "Sign-in request" - #. Aria label on the signal-strength icon shown while the first latency sample is still pending. #: src/features/voice/components/SignalStrengthIcon.tsx:16 msgid "Signal strength loading" @@ -32454,6 +32497,21 @@ msgstr "Signed in" msgid "Signed-in devices" msgstr "Signed-in devices" +#. Shown on the browser approval page above the buttons. name is the display name of the account that will be signed in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:137 +msgid "Signing in as {name}" +msgstr "Signing in as {name}" + +#. Text button in the desktop app that shows a code to type into a browser on a different device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:207 +msgid "Signing in on another device?" +msgstr "Signing in on another device?" + +#. Title while the browser approves the sign-in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:228 +msgid "Signing in…" +msgstr "Signing in…" + #. Label for Bluesky OAuth signing key ID input. #: src/features/app/components/setup/SetupWizardSteps.tsx:1161 msgid "Signing key ID" @@ -33505,6 +33563,8 @@ msgstr "Start mic test" msgid "Start minimized" msgstr "Start minimised" +#. Button on the browser page after cancelling that goes back to choosing an account. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:337 #: src/features/moderation/components/report/ReportStepDetails.tsx:326 #: src/features/moderation/components/report/ReportStepEmail.tsx:97 #: src/features/moderation/components/report/ReportStepVerification.tsx:134 @@ -34911,6 +34971,11 @@ msgstr "Thai" msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." +#. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 +msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." +msgstr "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." + #. Body of the passkey page after the passkey prompt failed or was dismissed. Keep plain. #: src/features/auth/passkey_migration/PasskeyBridgePage.tsx:36 msgid "That didn't work. Try again or cancel." @@ -34954,11 +35019,6 @@ msgstr "That message couldn't be deleted" msgid "That message is gone, or you lost access to the conversation." msgstr "That message is gone, or you lost access to the conversation." -#. Error shown when a browser sign-in handoff code expires before it is approved. -#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 -msgid "That sign-in code expired. Try again." -msgstr "That sign-in code has expired. Try again." - #. End-of-list line in the saved messages popout after every bookmark has been shown. #. End-of-list line on the saved messages page after every bookmark has been shown. #: src/features/messaging/components/pages/SavedMessagesPage.tsx:35 @@ -34966,6 +35026,21 @@ msgstr "That sign-in code has expired. Try again." msgid "That's all of them." msgstr "That's all of them." +#. Warning on the browser approval page when the app asked for a different account than the one chosen. requestedIdentifier is the email or username the app asked for, name is the chosen account's display name. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:131 +msgid "The {PRODUCT_NAME} app asked to sign in as {requestedIdentifier}, but you chose {name}." +msgstr "The {PRODUCT_NAME} app asked to sign in as {requestedIdentifier}, but you chose {name}." + +#. Explains where the code comes from, under the title of the browser page where it is typed. Signing in on another device is the label of a button in the app and must match its translation. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:187 +msgid "The {PRODUCT_NAME} app on your other device shows it under Signing in on another device. Only enter a code from a device you control." +msgstr "The {PRODUCT_NAME} app on your other device shows it under Signing in on another device. Only enter a code from a device you control." + +#. Shown after the user cancelled the sign-in request in the browser. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:327 +msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." +msgstr "The {PRODUCT_NAME} app was not signed in. You can close this tab." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -34984,10 +35059,6 @@ msgstr "The app crashed" msgid "The app has crashed. Checking for updates that might fix this issue…" msgstr "The app has crashed. Checking for updates that might fix this issue…" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:237 -msgid "The app should now be signed in to your account." -msgstr "The app should now be signed in to your account." - #. Activity log detail line under a lifted ban, for a temporary ban that had already ended on its own before it was lifted. A ban is the community ban, not the feature that blocks a user. {date} is when the ban ended, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:55 msgid "The ban had already expired on {date}" @@ -35185,6 +35256,16 @@ msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "The screen share source stopped sending video, so your screen share was stopped." +#. Error shown in the desktop app when a browser sign-in request expires before it is approved in the browser. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 +msgid "The sign-in request expired before your browser approved it." +msgstr "The sign-in request expired before your browser approved it." + +#. Error shown in the desktop app when the user pressed Cancel on the browser sign-in page. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:14 +msgid "The sign-in was cancelled in your browser." +msgstr "The sign-in was cancelled in your browser." + #. Activity log detail line under a deleted sticker, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the sticker, shown as a clickable user chip. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts:100 msgid "The sticker was uploaded by {user}" @@ -35409,6 +35490,11 @@ msgstr "Third party" msgid "This account can't be blocked." msgstr "This account can't be blocked." +#. Error in the browser when the chosen account belongs to a different server than the app that asked to sign in. accountHost and requestHost are server addresses. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:38 +msgid "This account is on {accountHost}, but the {productName} app is signing in to {requestHost}. Choose an account on {requestHost}." +msgstr "This account is on {accountHost}, but the {productName} app is signing in to {requestHost}. Choose an account on {requestHost}." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:418 msgid "This action cannot be undone. All associated data, including the bot user, will be permanently deleted." msgstr "This action cannot be undone. All associated data, including the bot user, will be permanently deleted." @@ -35552,11 +35638,6 @@ msgstr "This clears your backend premium state entirely, including premium type, msgid "This code doesn't exist." msgstr "This code doesn't exist." -#. Status shown under the browser sign-in code once its countdown reaches zero. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:68 -msgid "This code expired." -msgstr "This code has expired." - #. Gift redemption error modal body for an invalid or already used code. #: src/features/gift/commands/GiftCommands.tsx:37 msgid "This code is invalid or already used." @@ -36076,6 +36157,11 @@ msgstr "This reset link has expired. Reset links last 1 hour. Please request a n msgid "This shows how links appear: {linkPreviewExampleUrl}" msgstr "This shows how links appear: {linkPreviewExampleUrl}" +#. Error in the browser when the sign-in request from the desktop app no longer exists, because it expired or the app cancelled it. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:20 +msgid "This sign-in request expired or was cancelled in the {productName} app. Start again from the app." +msgstr "This sign-in request expired or was cancelled in the {productName} app. Start again from the app." + #. Label above the community a sticker comes from in the sticker info card. #: src/features/expressions/components/ExpressionInfoCard.tsx:75 msgid "This sticker is from" @@ -38522,6 +38608,12 @@ msgstr "Use {url} where the image URL should be inserted." msgid "Use a dedicated modal to set a message history threshold date for members who don't have the {readMessageHistoryPermissionLabel} permission." msgstr "Use a dedicated modal to set a message history threshold date for members who don't have the {readMessageHistoryPermissionLabel} permission." +# auto-i18n: reviewed unchanged +#. Text button on the browser approval page that goes back to choosing which account signs in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:149 +msgid "Use a different account" +msgstr "Use a different account" + #: src/features/auth/flow/instance_selector/InstancePickerRows.tsx:267 msgid "Use a self-hosted instance URL" msgstr "Use a self-hosted instance URL" @@ -39298,10 +39390,6 @@ msgstr "Verify your email to purchase {premiumProductFullName}." msgid "Verify your email to start DMs." msgstr "Verify your email to start DMs." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:142 -msgid "Verifying code…" -msgstr "Verifying code…" - #: src/features/auth/components/pages/ResetPasswordPage.tsx:145 msgid "Verifying your reset link…" msgstr "Verifying your reset link…" @@ -40075,10 +40163,6 @@ msgstr "Wait a moment before deleting more messages." msgid "Wait between messages. Members with \"{bypassSlowmodePermissionLabel}\" can bypass this." msgstr "Wait between messages. Members with \"{bypassSlowmodePermissionLabel}\" can bypass this." -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:445 -msgid "Waiting for browser approval." -msgstr "Waiting for browser approval." - #. Tooltip explaining that video / screen share controls are gated while the voice connection is not yet ready. #: src/features/voice/components/voice_connection_status/LocalParticipantControls.tsx:45 msgid "Waiting for connection..." @@ -40120,10 +40204,6 @@ msgstr "Wake up" msgid "Warning" msgstr "Warning" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:158 -msgid "Was this you?" -msgstr "Was this you?" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:243 msgctxt "us-state" @@ -40961,10 +41041,6 @@ msgstr "You already have lifetime {premiumProductName}" msgid "You already have this connection." msgstr "You already have this connection." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:87 -msgid "You are about to authorize an app to sign in to your account. Only continue if you initiated this request from a device you control." -msgstr "You are about to authorise an app to sign in to your account. Only continue if you initiated this request from a device you control." - #. External link warning title. productName is the Fluxer product name. #: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:22 msgid "You are about to leave {productName}" @@ -41734,6 +41810,12 @@ msgstr "You're on a legacy rate. The current price for this plan is {currentSubs msgid "You're sending messages too quickly" msgstr "You're sending messages too quickly" +# auto-i18n: reviewed unchanged +#. Title of the browser page after the user approved signing in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:282 +msgid "You're signed in" +msgstr "You're signed in" + #. Status text on the screen-share hover popout shown to the local streamer. Lightly playful tone. #: src/features/voice/components/StreamWatchHoverPopout.tsx:43 msgid "You're streaming!" 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 2407dfe94..e32eaf60e 100644 --- a/fluxer_app/src/features/i18n/locales/en-US/messages.po +++ b/fluxer_app/src/features/i18n/locales/en-US/messages.po @@ -1573,7 +1573,7 @@ msgid "{imageCount, plural, one {# image} other {# images}}, {videoCount, plural msgstr "{imageCount, plural, one {# image} other {# images}}, {videoCount, plural, one {# video} other {# videos}}" #. Explanation shown when the selected instance advertises no web app endpoint. Instance name is interpolated. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:76 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:61 msgid "{instanceName} does not publish a web address, so sign-in cannot be handed to a browser." msgstr "{instanceName} does not publish a web address, so sign-in cannot be handed to a browser." @@ -2777,14 +2777,6 @@ msgstr "a rich embed or link preview (not an uploaded file)" msgid "A separate profile for each community" msgstr "A separate profile for each community" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:164 -msgid "A sign-in request was made for your account. Only approve if you initiated it." -msgstr "A sign-in request was made for your account. Only approve if you initiated it." - -#: src/features/auth/flow/HandoffApprovalFlow.tsx:162 -msgid "A sign-in request was made from the following device. Only approve if you recognize it." -msgstr "A sign-in request was made from the following device. Only approve if you recognize it." - #. Description for has:sticker. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:51 msgid "a sticker" @@ -4811,10 +4803,6 @@ msgstr "Apply to all communities" msgid "Approval required" msgstr "Approval required" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:206 -msgid "Approve" -msgstr "Approve" - #. Hint under the sign-in option on fluxer.com that pairs a newly installed app with the old installed app. productName is the app name. #: src/features/auth/flow/AuthLoginLayout.tsx:101 msgid "Approve this app from the {productName} app you already use. No password needed." @@ -7873,6 +7861,11 @@ msgstr "Checking access..." msgid "Checking screen recording permission..." msgstr "Checking screen recording permission..." +#. Title while the browser looks up the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:224 +msgid "Checking the sign-in request…" +msgstr "Checking the sign-in request…" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -8847,6 +8840,11 @@ msgstr "Code blocks" msgid "Code expired" msgstr "Code expired" +#. Label of the field in the browser where the user types the 12-character code shown in the desktop or mobile app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:28 +msgid "Code from the {productName} app" +msgstr "Code from the {productName} app" + #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 @@ -9348,7 +9346,6 @@ msgstr "Completely hide your {premiumProductName} badge from other users" #: src/features/auth/components/pages/SsoCallbackPage.tsx:256 #: src/features/auth/components/pages/SsoCallbackPage.tsx:322 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:216 msgid "Completing sign-in…" msgstr "Completing sign-in…" @@ -9782,7 +9779,6 @@ msgstr "Context menus can be opened with left-click (on buttons) or right-click #: src/features/auth/components/modals/DeviceRevokeModal.tsx:77 #: src/features/auth/components/modals/PasskeyPinModal.tsx:111 #: src/features/auth/components/pages/oauth_authorize_page/OAuthAccountStep.tsx:36 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/connection/components/modals/AddConnectionModal.tsx:384 #: src/features/i18n/utils/CommonMessageDescriptors.ts:726 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:413 @@ -9790,6 +9786,11 @@ msgstr "Context menus can be opened with left-click (on buttons) or right-click msgid "Continue" msgstr "Continue" +#. Title in the desktop app while it waits for the user to sign in on the browser page it opened. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:177 +msgid "Continue in your browser" +msgstr "Continue in your browser" + #. Button in the gift time confirmation that proceeds to subscription checkout. #: src/features/app/components/dialogs/components/plutonium/hooks/useCheckoutActions.tsx:145 msgid "Continue to checkout" @@ -10437,7 +10438,7 @@ msgid "Couldn't close DM" msgstr "Couldn't close DM" #. Desktop handoff flow error shown when finalizing the sign-in fails after a valid code. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:21 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:34 msgid "Couldn't complete sign-in. Try again." msgstr "Couldn't complete sign-in. Try again." @@ -10831,6 +10832,11 @@ msgstr "Couldn't start {blueskyProviderName} authorization" msgid "Couldn't start checkout" msgstr "Couldn't start checkout" +#. Shown in the desktop app when the browser sign-in request could not be created. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:66 +msgid "Couldn't start signing in with your browser." +msgstr "Couldn't start signing in with your browser." + #. Toast error shown when creating a new account connection fails. #: src/features/connection/commands/ConnectionCommands.ts:27 msgid "Couldn't start the connection" @@ -10942,7 +10948,7 @@ msgid "Couldn't upload banner" msgstr "Couldn't upload banner" #. Desktop handoff flow error shown when verifying the pairing code fails for an unexpected reason. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:17 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:30 msgid "Couldn't verify that code. Try again." msgstr "Couldn't verify that code. Try again." @@ -12503,7 +12509,6 @@ msgstr "Dense layout" #. Short label in the settings dialog permission components. Keep the tone plain and specific. #: src/features/app/components/dialogs/shared/PermissionComponents.tsx:16 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:203 msgid "Deny" msgstr "Deny" @@ -14910,15 +14915,16 @@ msgstr "Enter the {digitCount}-digit code from your authenticator app or one of msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Enter the {digitCount}-digit code from your authenticator app." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:108 -msgid "Enter the code" -msgstr "Enter the code" - #. Inline validation error on the verification step of the DSA report flow when the code field is empty. #: src/features/moderation/components/pages/ReportPage.tsx:74 msgid "Enter the code before continuing." msgstr "Enter the code before continuing." +#. Title of the browser page where the user types the 12-character code the app shows under Signing in on another device. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +msgid "Enter the code from the {PRODUCT_NAME} app" +msgstr "Enter the code from the {PRODUCT_NAME} app" + #. Body text in the authentication sudo verification modal. Keep the tone plain and specific. #: src/features/auth/components/modals/SudoVerificationModal.tsx:56 msgid "Enter the code from your authenticator app." @@ -14933,10 +14939,6 @@ msgstr "Enter the code sent to your current email." msgid "Enter the code sent to your email address." msgstr "Enter the code sent to your email address." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:111 -msgid "Enter the code shown in the app to continue." -msgstr "Enter the code shown in the app to continue." - #: src/features/user/components/modals/BouncedEmailChangeModal.tsx:157 #: src/features/user/components/modals/EmailChangeModal.tsx:244 msgid "Enter the code we emailed to your new address." @@ -14959,6 +14961,11 @@ msgstr "Enter the new email you want to use. We'll send a code there next." msgid "Enter the PIN for your security key to continue." msgstr "Enter the PIN for your security key to continue." +#. Title in the desktop app above the code the user types into a browser on another device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:228 +msgid "Enter this code in your browser" +msgstr "Enter this code in your browser" + #: src/features/auth/flow/HandoffCodeDisplay.tsx:132 msgid "Enter this code in your browser to complete sign-in." msgstr "Enter this code in your browser to complete sign-in." @@ -15362,7 +15369,7 @@ msgstr "Expires between {earliest} and {latest}" msgid "Expires in {remaining}s" msgstr "Expires in {remaining}s" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:374 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:250 msgid "Expires in {remainingSeconds}s" msgstr "Expires in {remainingSeconds}s" @@ -16165,7 +16172,7 @@ msgid "Fluxer" msgstr "Fluxer" #. Status shown when browser sign-in status polling gives up after repeated failures. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:72 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:57 msgid "Fluxer stopped checking whether the browser approved this sign-in. It didn't lose your code." msgstr "Fluxer stopped checking whether the browser approved this sign-in. It didn't lose your code." @@ -16952,8 +16959,6 @@ msgstr "Generate a shareable link or copy your combined custom CSS." msgid "Generate invite link" msgstr "Generate invite link" -#. Button label that replaces an expired browser sign-in code with a fresh one. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:64 #: src/features/auth/flow/HandoffCodeDisplay.tsx:117 msgid "Generate new code" msgstr "Generate new code" @@ -17348,6 +17353,16 @@ msgstr "Go back and enter a valid email." msgid "Go back to {productName} to continue." msgstr "Go back to {productName} to continue." +#. Shown after approving a sign-in for an app on another device, which signs in by itself shortly. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:292 +msgid "Go back to the {PRODUCT_NAME} app. It finishes signing in on its own." +msgstr "Go back to the {PRODUCT_NAME} app. It finishes signing in on its own." + +#. Shown after approving, when the browser has already handed the sign-in back to the desktop app. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:288 +msgid "Go back to the {PRODUCT_NAME} app. You can close this tab." +msgstr "Go back to the {PRODUCT_NAME} app. You can close this tab." + #. Accessible label for the community row of an expression info card, which opens a community the viewer is already a member of. {communityName} is the community name. #: src/features/expressions/components/ExpressionInfoCard.tsx:89 msgid "Go to {communityName}" @@ -19295,11 +19310,6 @@ msgstr "Invalid JSON. Paste the full response from the URL above." msgid "Invalid or expired code" msgstr "Invalid or expired code" -#. Desktop handoff flow error shown when the entered pairing code is invalid or expired. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:13 -msgid "Invalid or expired code. Try again." -msgstr "Invalid or expired code. Try again." - #. Short label in the authentication authorize flow. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/state/useAuthorizeFlow.ts:82 msgid "Invalid redirect_uri" @@ -20876,7 +20886,7 @@ msgstr "Locale time format" msgid "Localization" msgstr "Localization" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:192 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:109 #: src/features/user/components/modals/tabs/DevicesTab.tsx:152 msgid "Location" msgstr "Location" @@ -21034,6 +21044,11 @@ msgstr "Make {userName} the group owner? You'll lose owner privileges." msgid "Make group owner" msgstr "Make group owner" +#. Shown above the code on the browser approval page when the app cannot be signed in automatically. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:253 +msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." +msgstr "Make sure this code matches the one in the {PRODUCT_NAME} app." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" @@ -24668,6 +24683,11 @@ msgstr "On <0>{listPriceEffectiveDate} your subscription moves from {listPri msgid "On click" msgstr "On click" +#. One line explanation in the desktop app above the code. signInAddress is the web address of the sign-in page, such as web.fluxer.app/login?handoff=1. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:236 +msgid "On your other device, sign in at {signInAddress} and enter this code when asked." +msgstr "On your other device, sign in at {signInAddress} and enter this code when asked." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:715 msgid "Once deleted, the application and its credentials are permanently removed." msgstr "Once deleted, the application and its credentials are permanently removed." @@ -24733,6 +24753,11 @@ msgstr "Only @mentions" msgid "Only applies on wide screens." msgstr "Only applies on wide screens." +#. Warning under the title of the browser approval page, so people do not approve a sign-in someone else started. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:245 +msgid "Only continue if you started this sign-in on a device you control." +msgstr "Only continue if you started this sign-in on a device you control." + #. Body copy in the mature content check modal. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:32 msgid "Only credit cards are accepted. Debit and prepaid cards cannot be used for the mature content check." @@ -24921,6 +24946,11 @@ msgstr "Open {landmarkName}" msgid "Open {premiumProductFullName}" msgstr "Open {premiumProductFullName}" +#. Button on the browser page after approving that opens the desktop app again if it did not come to the front. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:304 +msgid "Open {PRODUCT_NAME}" +msgstr "Open {PRODUCT_NAME}" + #. Button label that opens the desktop app. productName is the app name. #. Button that hands SSO sign-in back to the mobile app. productName is the app name. #: src/features/auth/components/pages/SsoCallbackPage.tsx:47 @@ -25011,12 +25041,15 @@ msgstr "Open banner options" msgid "Open bookmarks" msgstr "Open bookmarks" -#. Button label that opens the browser sign-in handoff page. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:56 #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:184 msgid "Open browser" msgstr "Open browser" +#. Button in the desktop app that reopens the browser sign-in page while the app waits for the browser. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:53 +msgid "Open browser again" +msgstr "Open browser again" + #. Primary button in the screen-share picker on web. Hands off to the browser's native getDisplayMedia picker. #: src/features/voice/components/modals/ScreenSharePickerModal.tsx:209 msgid "Open browser picker" @@ -25392,10 +25425,6 @@ msgstr "Open voice & video settings" msgid "Open with {accountName} on {instanceName}" msgstr "Open with {accountName} on {instanceName}" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:414 -msgid "Open your browser to finish signing in." -msgstr "Open your browser to finish signing in." - #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:137 msgid "Open your browser, sign in, then enter the code below to link your account." msgstr "Open your browser, sign in, then enter the code below to link your account." @@ -25421,7 +25450,7 @@ msgstr "Opens the Members page. Press Space or Enter to open." #. Short label in the language tab. Keep it concise. #. Spellcheck engine option in the textarea spellcheck submenu. Uses the host operating system spellchecker. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:79 #: src/features/user/components/modals/tabs/LanguageTab.tsx:110 msgid "Operating system" @@ -26439,7 +26468,7 @@ msgstr "Plan" msgid "Plans, perks, gifts and your subscription all live on one page." msgstr "Plans, perks, gifts and your subscription all live on one page." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:172 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:89 msgid "Platform" msgstr "Platform" @@ -31859,11 +31888,6 @@ msgstr "Show chat" msgid "Show chat with {count, plural, one {# unread message} other {# unread messages}}" msgstr "Show chat with {count, plural, one {# unread message} other {# unread messages}}" -#. Button label that opens the manual browser handoff code fallback. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:60 -msgid "Show code" -msgstr "Show code" - #. Developer voice status menu option for displaying the voice connection identifier. #: src/features/voice/components/voice_connection_status/VoiceConnectionStatusInner.tsx:76 msgid "Show connection ID" @@ -32306,7 +32330,9 @@ msgstr "Shows the banner in its own section below the community header." msgid "Sidebar" msgstr "Sidebar" +#. Button in the browser that approves signing in to the desktop or mobile app that asked for it. #. Generic authentication action label. Use for buttons, links, page titles, and accessible labels. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:33 #: src/features/i18n/utils/CommonMessageDescriptors.ts:79 msgid "Sign in" msgstr "Sign in" @@ -32321,10 +32347,35 @@ msgstr "Sign in again" msgid "Sign in again as {accountLabel}" msgstr "Sign in again as {accountLabel}" +#. Shown in the desktop app while it waits for the browser. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:193 +msgid "Sign in to {instanceName} in your browser and confirm. This app finishes signing in on its own." +msgstr "Sign in to {instanceName} in your browser and confirm. This app finishes signing in on its own." + +#. Shown in the desktop app above the code when the browser cannot return the sign-in automatically. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:189 +msgid "Sign in to {instanceName} in your browser, and check that it shows this code:" +msgstr "Sign in to {instanceName} in your browser, and check that it shows this code:" + #: src/features/auth/flow/GiftHeader.tsx:33 msgid "Sign in to claim your gift" msgstr "Sign in to claim your gift" +#. Title of the browser page where the user approves signing in to an app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:71 +msgid "Sign in to the {PRODUCT_NAME} app" +msgstr "Sign in to the {PRODUCT_NAME} app" + +#. Title of the browser page where the user approves signing in to the desktop app that opened it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:58 +msgid "Sign in to the {PRODUCT_NAME} desktop app" +msgstr "Sign in to the {PRODUCT_NAME} desktop app" + +#. Title of the browser page where the user approves signing in to the mobile app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:65 +msgid "Sign in to the {PRODUCT_NAME} mobile app" +msgstr "Sign in to the {PRODUCT_NAME} mobile app" + #. Action label that starts passkey authentication. #: src/features/auth/AuthMessageDescriptors.ts:13 msgid "Sign in with a passkey" @@ -32403,14 +32454,10 @@ msgstr "Sign out other devices from your account" msgid "Sign out?" msgstr "Sign out?" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:234 -msgid "Sign-in approved" -msgstr "Sign-in approved" - -#. Short label in the authentication handoff approval flow. Keep the tone plain and specific. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:26 -msgid "Sign-in code" -msgstr "Sign-in code" +#. Title of the browser page after the user cancelled the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:322 +msgid "Sign-in cancelled" +msgstr "Sign-in cancelled" #. Section title for email address and password controls in the account security tab. Keep it concise. #: src/features/user/components/modals/tabs/account_security_tab/AccountSecuritySections.tsx:23 @@ -32433,10 +32480,6 @@ msgstr "Sign-in flow" msgid "Sign-in method" msgstr "Sign-in method" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:84 -msgid "Sign-in request" -msgstr "Sign-in request" - #. Aria label on the signal-strength icon shown while the first latency sample is still pending. #: src/features/voice/components/SignalStrengthIcon.tsx:16 msgid "Signal strength loading" @@ -32453,6 +32496,21 @@ msgstr "Signed in" msgid "Signed-in devices" msgstr "Signed-in devices" +#. Shown on the browser approval page above the buttons. name is the display name of the account that will be signed in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:137 +msgid "Signing in as {name}" +msgstr "Signing in as {name}" + +#. Text button in the desktop app that shows a code to type into a browser on a different device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:207 +msgid "Signing in on another device?" +msgstr "Signing in on another device?" + +#. Title while the browser approves the sign-in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:228 +msgid "Signing in…" +msgstr "Signing in…" + #. Label for Bluesky OAuth signing key ID input. #: src/features/app/components/setup/SetupWizardSteps.tsx:1161 msgid "Signing key ID" @@ -33504,6 +33562,8 @@ msgstr "Start mic test" msgid "Start minimized" msgstr "Start minimized" +#. Button on the browser page after cancelling that goes back to choosing an account. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:337 #: src/features/moderation/components/report/ReportStepDetails.tsx:326 #: src/features/moderation/components/report/ReportStepEmail.tsx:97 #: src/features/moderation/components/report/ReportStepVerification.tsx:134 @@ -34910,6 +34970,11 @@ msgstr "Thai" msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." +#. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 +msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." +msgstr "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." + #. Body of the passkey page after the passkey prompt failed or was dismissed. Keep plain. #: src/features/auth/passkey_migration/PasskeyBridgePage.tsx:36 msgid "That didn't work. Try again or cancel." @@ -34953,11 +35018,6 @@ msgstr "That message couldn't be deleted" msgid "That message is gone, or you lost access to the conversation." msgstr "That message is gone, or you lost access to the conversation." -#. Error shown when a browser sign-in handoff code expires before it is approved. -#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 -msgid "That sign-in code expired. Try again." -msgstr "That sign-in code expired. Try again." - #. End-of-list line in the saved messages popout after every bookmark has been shown. #. End-of-list line on the saved messages page after every bookmark has been shown. #: src/features/messaging/components/pages/SavedMessagesPage.tsx:35 @@ -34965,6 +35025,21 @@ msgstr "That sign-in code expired. Try again." msgid "That's all of them." msgstr "That's all of them." +#. Warning on the browser approval page when the app asked for a different account than the one chosen. requestedIdentifier is the email or username the app asked for, name is the chosen account's display name. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:131 +msgid "The {PRODUCT_NAME} app asked to sign in as {requestedIdentifier}, but you chose {name}." +msgstr "The {PRODUCT_NAME} app asked to sign in as {requestedIdentifier}, but you chose {name}." + +#. Explains where the code comes from, under the title of the browser page where it is typed. Signing in on another device is the label of a button in the app and must match its translation. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:187 +msgid "The {PRODUCT_NAME} app on your other device shows it under Signing in on another device. Only enter a code from a device you control." +msgstr "The {PRODUCT_NAME} app on your other device shows it under Signing in on another device. Only enter a code from a device you control." + +#. Shown after the user cancelled the sign-in request in the browser. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:327 +msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." +msgstr "The {PRODUCT_NAME} app was not signed in. You can close this tab." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -34983,10 +35058,6 @@ msgstr "The app crashed" msgid "The app has crashed. Checking for updates that might fix this issue…" msgstr "The app has crashed. Checking for updates that might fix this issue…" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:237 -msgid "The app should now be signed in to your account." -msgstr "The app should now be signed in to your account." - #. Activity log detail line under a lifted ban, for a temporary ban that had already ended on its own before it was lifted. A ban is the community ban, not the feature that blocks a user. {date} is when the ban ended, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:55 msgid "The ban had already expired on {date}" @@ -35184,6 +35255,16 @@ msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "The screen share source stopped sending video, so your screen share was stopped." +#. Error shown in the desktop app when a browser sign-in request expires before it is approved in the browser. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 +msgid "The sign-in request expired before your browser approved it." +msgstr "The sign-in request expired before your browser approved it." + +#. Error shown in the desktop app when the user pressed Cancel on the browser sign-in page. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:14 +msgid "The sign-in was cancelled in your browser." +msgstr "The sign-in was cancelled in your browser." + #. Activity log detail line under a deleted sticker, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the sticker, shown as a clickable user chip. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts:100 msgid "The sticker was uploaded by {user}" @@ -35408,6 +35489,11 @@ msgstr "Third party" msgid "This account can't be blocked." msgstr "This account can't be blocked." +#. Error in the browser when the chosen account belongs to a different server than the app that asked to sign in. accountHost and requestHost are server addresses. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:38 +msgid "This account is on {accountHost}, but the {productName} app is signing in to {requestHost}. Choose an account on {requestHost}." +msgstr "This account is on {accountHost}, but the {productName} app is signing in to {requestHost}. Choose an account on {requestHost}." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:418 msgid "This action cannot be undone. All associated data, including the bot user, will be permanently deleted." msgstr "This action cannot be undone. All associated data, including the bot user, will be permanently deleted." @@ -35551,11 +35637,6 @@ msgstr "This clears your backend premium state entirely, including premium type, msgid "This code doesn't exist." msgstr "This code doesn't exist." -#. Status shown under the browser sign-in code once its countdown reaches zero. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:68 -msgid "This code expired." -msgstr "This code expired." - #. Gift redemption error modal body for an invalid or already used code. #: src/features/gift/commands/GiftCommands.tsx:37 msgid "This code is invalid or already used." @@ -36075,6 +36156,11 @@ msgstr "This reset link has expired. Reset links last 1 hour. Please request a n msgid "This shows how links appear: {linkPreviewExampleUrl}" msgstr "This shows how links appear: {linkPreviewExampleUrl}" +#. Error in the browser when the sign-in request from the desktop app no longer exists, because it expired or the app cancelled it. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:20 +msgid "This sign-in request expired or was cancelled in the {productName} app. Start again from the app." +msgstr "This sign-in request expired or was cancelled in the {productName} app. Start again from the app." + #. Label above the community a sticker comes from in the sticker info card. #: src/features/expressions/components/ExpressionInfoCard.tsx:75 msgid "This sticker is from" @@ -38520,6 +38606,11 @@ msgstr "Use {url} where the image URL should be inserted." msgid "Use a dedicated modal to set a message history threshold date for members who don't have the {readMessageHistoryPermissionLabel} permission." msgstr "Use a dedicated modal to set a message history threshold date for members who don't have the {readMessageHistoryPermissionLabel} permission." +#. Text button on the browser approval page that goes back to choosing which account signs in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:149 +msgid "Use a different account" +msgstr "Use a different account" + #: src/features/auth/flow/instance_selector/InstancePickerRows.tsx:267 msgid "Use a self-hosted instance URL" msgstr "Use a self-hosted instance URL" @@ -39296,10 +39387,6 @@ msgstr "Verify your email to purchase {premiumProductFullName}." msgid "Verify your email to start DMs." msgstr "Verify your email to start DMs." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:142 -msgid "Verifying code…" -msgstr "Verifying code…" - #: src/features/auth/components/pages/ResetPasswordPage.tsx:145 msgid "Verifying your reset link…" msgstr "Verifying your reset link…" @@ -40073,10 +40160,6 @@ msgstr "Wait a moment before deleting more messages." msgid "Wait between messages. Members with \"{bypassSlowmodePermissionLabel}\" can bypass this." msgstr "Wait between messages. Members with \"{bypassSlowmodePermissionLabel}\" can bypass this." -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:445 -msgid "Waiting for browser approval." -msgstr "Waiting for browser approval." - #. Tooltip explaining that video / screen share controls are gated while the voice connection is not yet ready. #: src/features/voice/components/voice_connection_status/LocalParticipantControls.tsx:45 msgid "Waiting for connection..." @@ -40118,10 +40201,6 @@ msgstr "Wake up" msgid "Warning" msgstr "Warning" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:158 -msgid "Was this you?" -msgstr "Was this you?" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:243 msgctxt "us-state" @@ -40959,10 +41038,6 @@ msgstr "You already have lifetime {premiumProductName}" msgid "You already have this connection." msgstr "You already have this connection." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:87 -msgid "You are about to authorize an app to sign in to your account. Only continue if you initiated this request from a device you control." -msgstr "You are about to authorize an app to sign in to your account. Only continue if you initiated this request from a device you control." - #. External link warning title. productName is the Fluxer product name. #: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:22 msgid "You are about to leave {productName}" @@ -41732,6 +41807,11 @@ msgstr "You're on a legacy rate. The current price for this plan is {currentSubs msgid "You're sending messages too quickly" msgstr "You're sending messages too quickly" +#. Title of the browser page after the user approved signing in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:282 +msgid "You're signed in" +msgstr "You're signed in" + #. Status text on the screen-share hover popout shown to the local streamer. Lightly playful tone. #: src/features/voice/components/StreamWatchHoverPopout.tsx:43 msgid "You're streaming!" 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 948374dc3..e9f5ec884 100644 --- a/fluxer_app/src/features/i18n/locales/es-419/messages.po +++ b/fluxer_app/src/features/i18n/locales/es-419/messages.po @@ -1573,7 +1573,7 @@ msgid "{imageCount, plural, one {# image} other {# images}}, {videoCount, plural msgstr "{imageCount, plural, one {# imagen} other {# imágenes}}, {videoCount, plural, one {# video} other {# videos}}" #. Explanation shown when the selected instance advertises no web app endpoint. Instance name is interpolated. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:76 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:61 msgid "{instanceName} does not publish a web address, so sign-in cannot be handed to a browser." msgstr "{instanceName} no publica una dirección web, por lo que el inicio de sesión no se puede delegar a un navegador." @@ -2777,14 +2777,6 @@ msgstr "contenido incrustado o una vista previa de enlace (no un archivo subido) msgid "A separate profile for each community" msgstr "Un perfil independiente para cada comunidad" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:164 -msgid "A sign-in request was made for your account. Only approve if you initiated it." -msgstr "Se hizo una solicitud de inicio de sesión para tu cuenta. Apruébala solo si la iniciaste tú." - -#: src/features/auth/flow/HandoffApprovalFlow.tsx:162 -msgid "A sign-in request was made from the following device. Only approve if you recognize it." -msgstr "Se hizo una solicitud de inicio de sesión desde el siguiente dispositivo. Solo aprueba si lo reconoces." - #. Description for has:sticker. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:51 msgid "a sticker" @@ -4811,10 +4803,6 @@ msgstr "Aplicar a todas las comunidades" msgid "Approval required" msgstr "Se requiere aprobación" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:206 -msgid "Approve" -msgstr "Aprobar" - #. Hint under the sign-in option on fluxer.com that pairs a newly installed app with the old installed app. productName is the app name. #: src/features/auth/flow/AuthLoginLayout.tsx:101 msgid "Approve this app from the {productName} app you already use. No password needed." @@ -7873,6 +7861,11 @@ msgstr "Comprobando acceso..." msgid "Checking screen recording permission..." msgstr "Verificando el permiso para grabar la pantalla..." +#. Title while the browser looks up the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:224 +msgid "Checking the sign-in request…" +msgstr "Verificando la solicitud de inicio de sesión…" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -8847,6 +8840,11 @@ msgstr "Bloques de código" msgid "Code expired" msgstr "El código expiró" +#. Label of the field in the browser where the user types the 12-character code shown in the desktop or mobile app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:28 +msgid "Code from the {productName} app" +msgstr "Código de la app {productName}" + #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 @@ -9348,7 +9346,6 @@ msgstr "Ocultar completamente tu insignia de {premiumProductName} a otros usuari #: src/features/auth/components/pages/SsoCallbackPage.tsx:256 #: src/features/auth/components/pages/SsoCallbackPage.tsx:322 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:216 msgid "Completing sign-in…" msgstr "Completando inicio de sesión…" @@ -9782,7 +9779,6 @@ msgstr "Los menús contextuales se pueden abrir con un clic izquierdo (en botone #: src/features/auth/components/modals/DeviceRevokeModal.tsx:77 #: src/features/auth/components/modals/PasskeyPinModal.tsx:111 #: src/features/auth/components/pages/oauth_authorize_page/OAuthAccountStep.tsx:36 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/connection/components/modals/AddConnectionModal.tsx:384 #: src/features/i18n/utils/CommonMessageDescriptors.ts:726 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:413 @@ -9790,6 +9786,11 @@ msgstr "Los menús contextuales se pueden abrir con un clic izquierdo (en botone msgid "Continue" msgstr "Continuar" +#. Title in the desktop app while it waits for the user to sign in on the browser page it opened. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:177 +msgid "Continue in your browser" +msgstr "Continuar en tu navegador" + #. Button in the gift time confirmation that proceeds to subscription checkout. #: src/features/app/components/dialogs/components/plutonium/hooks/useCheckoutActions.tsx:145 msgid "Continue to checkout" @@ -10437,7 +10438,7 @@ msgid "Couldn't close DM" msgstr "No se pudo cerrar el MD" #. Desktop handoff flow error shown when finalizing the sign-in fails after a valid code. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:21 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:34 msgid "Couldn't complete sign-in. Try again." msgstr "No se pudo completar el inicio de sesión. Intenta de nuevo." @@ -10831,6 +10832,11 @@ msgstr "No se pudo iniciar la autorización de {blueskyProviderName}" msgid "Couldn't start checkout" msgstr "No se pudo iniciar el pago" +#. Shown in the desktop app when the browser sign-in request could not be created. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:66 +msgid "Couldn't start signing in with your browser." +msgstr "No se pudo iniciar sesión con tu navegador." + #. Toast error shown when creating a new account connection fails. #: src/features/connection/commands/ConnectionCommands.ts:27 msgid "Couldn't start the connection" @@ -10942,7 +10948,7 @@ msgid "Couldn't upload banner" msgstr "No se pudo subir el banner" #. Desktop handoff flow error shown when verifying the pairing code fails for an unexpected reason. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:17 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:30 msgid "Couldn't verify that code. Try again." msgstr "No se pudo verificar el código. Intenta de nuevo." @@ -12503,7 +12509,6 @@ msgstr "Diseño denso" #. Short label in the settings dialog permission components. Keep the tone plain and specific. #: src/features/app/components/dialogs/shared/PermissionComponents.tsx:16 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:203 msgid "Deny" msgstr "Denegar" @@ -14910,15 +14915,16 @@ msgstr "Ingresa el código de {digitCount} dígitos de tu app de autenticación msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Ingresa el código de {digitCount} dígitos de tu aplicación de autenticación." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:108 -msgid "Enter the code" -msgstr "Ingresa el código" - #. Inline validation error on the verification step of the DSA report flow when the code field is empty. #: src/features/moderation/components/pages/ReportPage.tsx:74 msgid "Enter the code before continuing." msgstr "Ingresa el código antes de continuar." +#. Title of the browser page where the user types the 12-character code the app shows under Signing in on another device. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +msgid "Enter the code from the {PRODUCT_NAME} app" +msgstr "Ingresa el código de la app {PRODUCT_NAME}" + #. Body text in the authentication sudo verification modal. Keep the tone plain and specific. #: src/features/auth/components/modals/SudoVerificationModal.tsx:56 msgid "Enter the code from your authenticator app." @@ -14933,10 +14939,6 @@ msgstr "Ingresa el código que enviamos a tu correo actual." msgid "Enter the code sent to your email address." msgstr "Ingresa el código que enviamos a tu correo electrónico." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:111 -msgid "Enter the code shown in the app to continue." -msgstr "Ingresa el código que aparece en la app para continuar." - #: src/features/user/components/modals/BouncedEmailChangeModal.tsx:157 #: src/features/user/components/modals/EmailChangeModal.tsx:244 msgid "Enter the code we emailed to your new address." @@ -14959,6 +14961,11 @@ msgstr "Ingresa el nuevo correo electrónico que quieres usar. Te enviaremos un msgid "Enter the PIN for your security key to continue." msgstr "Ingresa el PIN de tu llave de seguridad para continuar." +#. Title in the desktop app above the code the user types into a browser on another device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:228 +msgid "Enter this code in your browser" +msgstr "Ingresa este código en tu navegador" + #: src/features/auth/flow/HandoffCodeDisplay.tsx:132 msgid "Enter this code in your browser to complete sign-in." msgstr "Ingresa este código en tu navegador para completar el inicio de sesión." @@ -15362,7 +15369,7 @@ msgstr "Vence entre {earliest} y {latest}" msgid "Expires in {remaining}s" msgstr "Expira en {remaining} s" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:374 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:250 msgid "Expires in {remainingSeconds}s" msgstr "Expira en {remainingSeconds}s" @@ -16165,7 +16172,7 @@ msgid "Fluxer" msgstr "Fluxer" #. Status shown when browser sign-in status polling gives up after repeated failures. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:72 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:57 msgid "Fluxer stopped checking whether the browser approved this sign-in. It didn't lose your code." msgstr "Fluxer dejó de verificar si el navegador aprobó este inicio de sesión. No perdió tu código." @@ -16952,8 +16959,6 @@ msgstr "Genera un enlace para compartir o copia tu CSS personalizado combinado." msgid "Generate invite link" msgstr "Generar enlace de invitación" -#. Button label that replaces an expired browser sign-in code with a fresh one. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:64 #: src/features/auth/flow/HandoffCodeDisplay.tsx:117 msgid "Generate new code" msgstr "Generar código nuevo" @@ -17348,6 +17353,16 @@ msgstr "Vuelve e ingresa un correo electrónico válido." msgid "Go back to {productName} to continue." msgstr "Regresa a {productName} para continuar." +#. Shown after approving a sign-in for an app on another device, which signs in by itself shortly. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:292 +msgid "Go back to the {PRODUCT_NAME} app. It finishes signing in on its own." +msgstr "Regresar a la app {PRODUCT_NAME}. Termina de iniciar sesión sola." + +#. Shown after approving, when the browser has already handed the sign-in back to the desktop app. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:288 +msgid "Go back to the {PRODUCT_NAME} app. You can close this tab." +msgstr "Regresa a la app {PRODUCT_NAME}. Puedes cerrar esta pestaña." + #. Accessible label for the community row of an expression info card, which opens a community the viewer is already a member of. {communityName} is the community name. #: src/features/expressions/components/ExpressionInfoCard.tsx:89 msgid "Go to {communityName}" @@ -19295,11 +19310,6 @@ msgstr "JSON no válido. Pega la respuesta completa de la URL de arriba." msgid "Invalid or expired code" msgstr "Código no válido o vencido" -#. Desktop handoff flow error shown when the entered pairing code is invalid or expired. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:13 -msgid "Invalid or expired code. Try again." -msgstr "Código no válido o caducado. Intenta de nuevo." - #. Short label in the authentication authorize flow. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/state/useAuthorizeFlow.ts:82 msgid "Invalid redirect_uri" @@ -20876,7 +20886,7 @@ msgstr "Formato de hora del idioma" msgid "Localization" msgstr "Idioma y región" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:192 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:109 #: src/features/user/components/modals/tabs/DevicesTab.tsx:152 msgid "Location" msgstr "Ubicación" @@ -21034,6 +21044,11 @@ msgstr "¿Quieres que {userName} sea el propietario del grupo? Perderás los pri msgid "Make group owner" msgstr "Hacer propietario del grupo" +#. Shown above the code on the browser approval page when the app cannot be signed in automatically. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:253 +msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." +msgstr "Asegúrate de que este código coincida con el de la app {PRODUCT_NAME}." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" @@ -24668,6 +24683,11 @@ msgstr "El <0>{listPriceEffectiveDate} tu suscripción pasará de {listPrice msgid "On click" msgstr "Al hacer clic" +#. One line explanation in the desktop app above the code. signInAddress is the web address of the sign-in page, such as web.fluxer.app/login?handoff=1. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:236 +msgid "On your other device, sign in at {signInAddress} and enter this code when asked." +msgstr "En tu otro dispositivo, inicia sesión en {signInAddress} e introduce este código cuando se te solicite." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:715 msgid "Once deleted, the application and its credentials are permanently removed." msgstr "Una vez eliminada, la aplicación y sus credenciales se borrarán permanentemente." @@ -24733,6 +24753,11 @@ msgstr "Solo menciones de @" msgid "Only applies on wide screens." msgstr "Solo se aplica en pantallas anchas." +#. Warning under the title of the browser approval page, so people do not approve a sign-in someone else started. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:245 +msgid "Only continue if you started this sign-in on a device you control." +msgstr "Solo continúa si iniciaste esta sesión en un dispositivo que controlas." + #. Body copy in the mature content check modal. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:32 msgid "Only credit cards are accepted. Debit and prepaid cards cannot be used for the mature content check." @@ -24921,6 +24946,11 @@ msgstr "Abrir {landmarkName}" msgid "Open {premiumProductFullName}" msgstr "Abrir {premiumProductFullName}" +#. Button on the browser page after approving that opens the desktop app again if it did not come to the front. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:304 +msgid "Open {PRODUCT_NAME}" +msgstr "Abrir {PRODUCT_NAME}" + #. Button label that opens the desktop app. productName is the app name. #. Button that hands SSO sign-in back to the mobile app. productName is the app name. #: src/features/auth/components/pages/SsoCallbackPage.tsx:47 @@ -25011,12 +25041,15 @@ msgstr "Abrir opciones del banner" msgid "Open bookmarks" msgstr "Abrir mensajes guardados" -#. Button label that opens the browser sign-in handoff page. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:56 #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:184 msgid "Open browser" msgstr "Abrir navegador" +#. Button in the desktop app that reopens the browser sign-in page while the app waits for the browser. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:53 +msgid "Open browser again" +msgstr "Abrir el navegador de nuevo" + #. Primary button in the screen-share picker on web. Hands off to the browser's native getDisplayMedia picker. #: src/features/voice/components/modals/ScreenSharePickerModal.tsx:209 msgid "Open browser picker" @@ -25392,10 +25425,6 @@ msgstr "Abrir configuración de audio y video" msgid "Open with {accountName} on {instanceName}" msgstr "Abrir con {accountName} en {instanceName}" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:414 -msgid "Open your browser to finish signing in." -msgstr "Abre tu navegador para terminar de iniciar sesión." - #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:137 msgid "Open your browser, sign in, then enter the code below to link your account." msgstr "Abre tu navegador, inicia sesión y luego ingresa el código a continuación para vincular tu cuenta." @@ -25421,7 +25450,7 @@ msgstr "Abre la página de Miembros. Presiona Espacio o Enter para abrir." #. Short label in the language tab. Keep it concise. #. Spellcheck engine option in the textarea spellcheck submenu. Uses the host operating system spellchecker. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:79 #: src/features/user/components/modals/tabs/LanguageTab.tsx:110 msgid "Operating system" @@ -26439,7 +26468,7 @@ msgstr "Plan" msgid "Plans, perks, gifts and your subscription all live on one page." msgstr "Planes, beneficios, regalos y tu suscripción, todo en una sola página." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:172 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:89 msgid "Platform" msgstr "Plataforma" @@ -31859,11 +31888,6 @@ msgstr "Mostrar chat" msgid "Show chat with {count, plural, one {# unread message} other {# unread messages}}" msgstr "Mostrar chat con {count, plural, one {# mensaje sin leer} other {# mensajes sin leer}}" -#. Button label that opens the manual browser handoff code fallback. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:60 -msgid "Show code" -msgstr "Mostrar código" - #. Developer voice status menu option for displaying the voice connection identifier. #: src/features/voice/components/voice_connection_status/VoiceConnectionStatusInner.tsx:76 msgid "Show connection ID" @@ -32306,7 +32330,9 @@ msgstr "Muestra el banner en su propia sección debajo del encabezado de la comu msgid "Sidebar" msgstr "Barra lateral" +#. Button in the browser that approves signing in to the desktop or mobile app that asked for it. #. Generic authentication action label. Use for buttons, links, page titles, and accessible labels. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:33 #: src/features/i18n/utils/CommonMessageDescriptors.ts:79 msgid "Sign in" msgstr "Iniciar sesión" @@ -32321,10 +32347,35 @@ msgstr "Inicia sesión de nuevo" msgid "Sign in again as {accountLabel}" msgstr "Vuelve a iniciar sesión como {accountLabel}" +#. Shown in the desktop app while it waits for the browser. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:193 +msgid "Sign in to {instanceName} in your browser and confirm. This app finishes signing in on its own." +msgstr "Inicia sesión en {instanceName} en tu navegador y confirma. Esta app terminará de iniciar sesión sola." + +#. Shown in the desktop app above the code when the browser cannot return the sign-in automatically. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:189 +msgid "Sign in to {instanceName} in your browser, and check that it shows this code:" +msgstr "Inicia sesión en {instanceName} en tu navegador y comprueba que muestra este código:" + #: src/features/auth/flow/GiftHeader.tsx:33 msgid "Sign in to claim your gift" msgstr "Inicia sesión para reclamar tu regalo" +#. Title of the browser page where the user approves signing in to an app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:71 +msgid "Sign in to the {PRODUCT_NAME} app" +msgstr "Inicia sesión en la app {PRODUCT_NAME}" + +#. Title of the browser page where the user approves signing in to the desktop app that opened it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:58 +msgid "Sign in to the {PRODUCT_NAME} desktop app" +msgstr "Inicia sesión en la aplicación de escritorio {PRODUCT_NAME}" + +#. Title of the browser page where the user approves signing in to the mobile app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:65 +msgid "Sign in to the {PRODUCT_NAME} mobile app" +msgstr "Inicia sesión en la app móvil de {PRODUCT_NAME}" + #. Action label that starts passkey authentication. #: src/features/auth/AuthMessageDescriptors.ts:13 msgid "Sign in with a passkey" @@ -32403,14 +32454,10 @@ msgstr "Cerrar sesión en otros dispositivos de tu cuenta" msgid "Sign out?" msgstr "¿Cerrar sesión?" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:234 -msgid "Sign-in approved" -msgstr "Inicio de sesión aprobado" - -#. Short label in the authentication handoff approval flow. Keep the tone plain and specific. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:26 -msgid "Sign-in code" -msgstr "Código de inicio de sesión" +#. Title of the browser page after the user cancelled the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:322 +msgid "Sign-in cancelled" +msgstr "Inicio de sesión cancelado" #. Section title for email address and password controls in the account security tab. Keep it concise. #: src/features/user/components/modals/tabs/account_security_tab/AccountSecuritySections.tsx:23 @@ -32433,10 +32480,6 @@ msgstr "Flujo de inicio de sesión" msgid "Sign-in method" msgstr "Método de inicio de sesión" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:84 -msgid "Sign-in request" -msgstr "Solicitud de inicio de sesión" - #. Aria label on the signal-strength icon shown while the first latency sample is still pending. #: src/features/voice/components/SignalStrengthIcon.tsx:16 msgid "Signal strength loading" @@ -32453,6 +32496,21 @@ msgstr "Sesión iniciada" msgid "Signed-in devices" msgstr "Dispositivos con sesión iniciada" +#. Shown on the browser approval page above the buttons. name is the display name of the account that will be signed in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:137 +msgid "Signing in as {name}" +msgstr "Iniciando sesión como {name}" + +#. Text button in the desktop app that shows a code to type into a browser on a different device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:207 +msgid "Signing in on another device?" +msgstr "¿Iniciando sesión en otro dispositivo?" + +#. Title while the browser approves the sign-in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:228 +msgid "Signing in…" +msgstr "Iniciando sesión…" + #. Label for Bluesky OAuth signing key ID input. #: src/features/app/components/setup/SetupWizardSteps.tsx:1161 msgid "Signing key ID" @@ -33504,6 +33562,8 @@ msgstr "Iniciar prueba del micrófono" msgid "Start minimized" msgstr "Empezar minimizado" +#. Button on the browser page after cancelling that goes back to choosing an account. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:337 #: src/features/moderation/components/report/ReportStepDetails.tsx:326 #: src/features/moderation/components/report/ReportStepEmail.tsx:97 #: src/features/moderation/components/report/ReportStepVerification.tsx:134 @@ -34910,6 +34970,11 @@ msgstr "Tailandés" msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Gracias por ayudarnos a mantener {productName} seguro. Revisaremos tu reporte lo antes posible." +#. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 +msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." +msgstr "Ese código no es válido en {instanceHost}. Revisa el código en la app {productName} e inté" + #. Body of the passkey page after the passkey prompt failed or was dismissed. Keep plain. #: src/features/auth/passkey_migration/PasskeyBridgePage.tsx:36 msgid "That didn't work. Try again or cancel." @@ -34953,11 +35018,6 @@ msgstr "No se pudo eliminar el mensaje" msgid "That message is gone, or you lost access to the conversation." msgstr "Ese mensaje ya no existe o perdiste el acceso a la conversación." -#. Error shown when a browser sign-in handoff code expires before it is approved. -#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 -msgid "That sign-in code expired. Try again." -msgstr "Ese código de inicio de sesión expiró. Inténtalo de nuevo." - #. End-of-list line in the saved messages popout after every bookmark has been shown. #. End-of-list line on the saved messages page after every bookmark has been shown. #: src/features/messaging/components/pages/SavedMessagesPage.tsx:35 @@ -34965,6 +35025,21 @@ msgstr "Ese código de inicio de sesión expiró. Inténtalo de nuevo." msgid "That's all of them." msgstr "Eso es todo." +#. Warning on the browser approval page when the app asked for a different account than the one chosen. requestedIdentifier is the email or username the app asked for, name is the chosen account's display name. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:131 +msgid "The {PRODUCT_NAME} app asked to sign in as {requestedIdentifier}, but you chose {name}." +msgstr "La app {PRODUCT_NAME} pidió iniciar sesión como {requestedIdentifier}, pero elegiste {name}." + +#. Explains where the code comes from, under the title of the browser page where it is typed. Signing in on another device is the label of a button in the app and must match its translation. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:187 +msgid "The {PRODUCT_NAME} app on your other device shows it under Signing in on another device. Only enter a code from a device you control." +msgstr "La app {PRODUCT_NAME} en tu otro dispositivo la muestra en \"Iniciar sesión en otro dispositivo\". Solo ingresa un código de un dispositivo que controles." + +#. Shown after the user cancelled the sign-in request in the browser. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:327 +msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." +msgstr "La app {PRODUCT_NAME} no inició sesión. Puedes cerrar esta pestaña." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -34983,10 +35058,6 @@ msgstr "La aplicación falló" msgid "The app has crashed. Checking for updates that might fix this issue…" msgstr "La app se cerró inesperadamente. Buscando actualizaciones que puedan solucionar este problema…" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:237 -msgid "The app should now be signed in to your account." -msgstr "La aplicación ya debería haber iniciado sesión en tu cuenta." - #. Activity log detail line under a lifted ban, for a temporary ban that had already ended on its own before it was lifted. A ban is the community ban, not the feature that blocks a user. {date} is when the ban ended, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:55 msgid "The ban had already expired on {date}" @@ -35184,6 +35255,16 @@ msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "La fuente de uso compartido de pantalla dejó de enviar video, por lo que se detuvo el uso compartido de pantalla." +#. Error shown in the desktop app when a browser sign-in request expires before it is approved in the browser. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 +msgid "The sign-in request expired before your browser approved it." +msgstr "La solicitud de inicio de sesión expiró antes de que tu navegador la aprobara." + +#. Error shown in the desktop app when the user pressed Cancel on the browser sign-in page. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:14 +msgid "The sign-in was cancelled in your browser." +msgstr "El inicio de sesión se canceló en tu navegador." + #. Activity log detail line under a deleted sticker, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the sticker, shown as a clickable user chip. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts:100 msgid "The sticker was uploaded by {user}" @@ -35408,6 +35489,11 @@ msgstr "Terceros" msgid "This account can't be blocked." msgstr "No se puede bloquear esta cuenta." +#. Error in the browser when the chosen account belongs to a different server than the app that asked to sign in. accountHost and requestHost are server addresses. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:38 +msgid "This account is on {accountHost}, but the {productName} app is signing in to {requestHost}. Choose an account on {requestHost}." +msgstr "Esta cuenta está en {accountHost}, pero la app {productName} está iniciando sesión en {requestHost}. Elige una cuenta en {requestHost}." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:418 msgid "This action cannot be undone. All associated data, including the bot user, will be permanently deleted." msgstr "Esta acción no se puede deshacer. Todos los datos asociados, incluyendo el bot, se eliminarán permanentemente." @@ -35551,11 +35637,6 @@ msgstr "Esto borra por completo tu estado premium del backend, incluido el tipo msgid "This code doesn't exist." msgstr "Este código no existe." -#. Status shown under the browser sign-in code once its countdown reaches zero. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:68 -msgid "This code expired." -msgstr "Este código expiró." - #. Gift redemption error modal body for an invalid or already used code. #: src/features/gift/commands/GiftCommands.tsx:37 msgid "This code is invalid or already used." @@ -36075,6 +36156,11 @@ msgstr "Este enlace de restablecimiento ha expirado. Los enlaces de restablecimi msgid "This shows how links appear: {linkPreviewExampleUrl}" msgstr "Así se muestran los enlaces: {linkPreviewExampleUrl}" +#. Error in the browser when the sign-in request from the desktop app no longer exists, because it expired or the app cancelled it. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:20 +msgid "This sign-in request expired or was cancelled in the {productName} app. Start again from the app." +msgstr "Esta solicitud de inicio de sesión expiró o fue cancelada en la aplicación {productName}. Inténtalo de nuevo desde la aplicación." + #. Label above the community a sticker comes from in the sticker info card. #: src/features/expressions/components/ExpressionInfoCard.tsx:75 msgid "This sticker is from" @@ -38520,6 +38606,11 @@ msgstr "Usa {url} donde se deba insertar la URL de la imagen." msgid "Use a dedicated modal to set a message history threshold date for members who don't have the {readMessageHistoryPermissionLabel} permission." msgstr "Usa una ventana específica para establecer una fecha de corte del historial de mensajes para los miembros que no tienen el permiso {readMessageHistoryPermissionLabel}." +#. Text button on the browser approval page that goes back to choosing which account signs in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:149 +msgid "Use a different account" +msgstr "Usar otra cuenta" + #: src/features/auth/flow/instance_selector/InstancePickerRows.tsx:267 msgid "Use a self-hosted instance URL" msgstr "Usa una URL de instancia autohospedada" @@ -39296,10 +39387,6 @@ msgstr "Verifica tu correo electrónico para comprar {premiumProductFullName}." msgid "Verify your email to start DMs." msgstr "Verifica tu correo electrónico para iniciar MD." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:142 -msgid "Verifying code…" -msgstr "Verificando código…" - #: src/features/auth/components/pages/ResetPasswordPage.tsx:145 msgid "Verifying your reset link…" msgstr "Verificando tu enlace de restablecimiento…" @@ -40073,10 +40160,6 @@ msgstr "Espera un momento antes de eliminar más mensajes." msgid "Wait between messages. Members with \"{bypassSlowmodePermissionLabel}\" can bypass this." msgstr "Tiempo de espera entre mensajes. Los miembros con el permiso \"{bypassSlowmodePermissionLabel}\" pueden omitirlo." -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:445 -msgid "Waiting for browser approval." -msgstr "Esperando la aprobación del navegador." - #. Tooltip explaining that video / screen share controls are gated while the voice connection is not yet ready. #: src/features/voice/components/voice_connection_status/LocalParticipantControls.tsx:45 msgid "Waiting for connection..." @@ -40118,10 +40201,6 @@ msgstr "Reactivar" msgid "Warning" msgstr "Advertencia" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:158 -msgid "Was this you?" -msgstr "¿Fuiste tú?" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:243 msgctxt "us-state" @@ -40959,10 +41038,6 @@ msgstr "Ya tienes {premiumProductName} de por vida" msgid "You already have this connection." msgstr "Ya tienes esta conexión." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:87 -msgid "You are about to authorize an app to sign in to your account. Only continue if you initiated this request from a device you control." -msgstr "Estás a punto de autorizar una aplicación para iniciar sesión en tu cuenta. Solo continúa si iniciaste esta solicitud desde un dispositivo que controlas." - #. External link warning title. productName is the Fluxer product name. #: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:22 msgid "You are about to leave {productName}" @@ -41732,6 +41807,11 @@ msgstr "Tienes una tarifa anterior. El precio actual de este plan es {currentSub msgid "You're sending messages too quickly" msgstr "Estás enviando mensajes muy rápido" +#. Title of the browser page after the user approved signing in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:282 +msgid "You're signed in" +msgstr "Has iniciado sesión" + #. Status text on the screen-share hover popout shown to the local streamer. Lightly playful tone. #: src/features/voice/components/StreamWatchHoverPopout.tsx:43 msgid "You're streaming!" 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 3c490fd63..3385e24bb 100644 --- a/fluxer_app/src/features/i18n/locales/es-ES/messages.po +++ b/fluxer_app/src/features/i18n/locales/es-ES/messages.po @@ -1573,7 +1573,7 @@ msgid "{imageCount, plural, one {# image} other {# images}}, {videoCount, plural msgstr "{imageCount, plural, one {# imagen} other {# imágenes}}, {videoCount, plural, one {# vídeo} other {# vídeos}}" #. Explanation shown when the selected instance advertises no web app endpoint. Instance name is interpolated. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:76 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:61 msgid "{instanceName} does not publish a web address, so sign-in cannot be handed to a browser." msgstr "{instanceName} no tiene una dirección web publicada, por lo que el inicio de sesión no se puede delegar a un navegador." @@ -2777,14 +2777,6 @@ msgstr "contenido incrustado o una vista previa de enlace (no un archivo subido) msgid "A separate profile for each community" msgstr "Un perfil independiente para cada comunidad" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:164 -msgid "A sign-in request was made for your account. Only approve if you initiated it." -msgstr "Se ha realizado una solicitud de inicio de sesión para tu cuenta. Apruébala solo si la has iniciado tú." - -#: src/features/auth/flow/HandoffApprovalFlow.tsx:162 -msgid "A sign-in request was made from the following device. Only approve if you recognize it." -msgstr "Se ha realizado una solicitud de inicio de sesión desde el siguiente dispositivo. Apruébala solo si lo reconoces." - #. Description for has:sticker. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:51 msgid "a sticker" @@ -4811,10 +4803,6 @@ msgstr "Aplicar a todas las comunidades" msgid "Approval required" msgstr "Se requiere aprobación" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:206 -msgid "Approve" -msgstr "Aprobar" - #. Hint under the sign-in option on fluxer.com that pairs a newly installed app with the old installed app. productName is the app name. #: src/features/auth/flow/AuthLoginLayout.tsx:101 msgid "Approve this app from the {productName} app you already use. No password needed." @@ -7873,6 +7861,11 @@ msgstr "Comprobando acceso..." msgid "Checking screen recording permission..." msgstr "Comprobando el permiso para grabar la pantalla..." +#. Title while the browser looks up the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:224 +msgid "Checking the sign-in request…" +msgstr "Comprobando la solicitud de inicio de sesión…" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -8847,6 +8840,11 @@ msgstr "Bloques de código" msgid "Code expired" msgstr "El código ha caducado" +#. Label of the field in the browser where the user types the 12-character code shown in the desktop or mobile app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:28 +msgid "Code from the {productName} app" +msgstr "Código de la aplicación {productName}" + #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 @@ -9348,7 +9346,6 @@ msgstr "Ocultar completamente tu insignia de {premiumProductName} a otros usuari #: src/features/auth/components/pages/SsoCallbackPage.tsx:256 #: src/features/auth/components/pages/SsoCallbackPage.tsx:322 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:216 msgid "Completing sign-in…" msgstr "Completando el inicio de sesión…" @@ -9782,7 +9779,6 @@ msgstr "Los menús contextuales se pueden abrir con un clic izquierdo (en botone #: src/features/auth/components/modals/DeviceRevokeModal.tsx:77 #: src/features/auth/components/modals/PasskeyPinModal.tsx:111 #: src/features/auth/components/pages/oauth_authorize_page/OAuthAccountStep.tsx:36 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/connection/components/modals/AddConnectionModal.tsx:384 #: src/features/i18n/utils/CommonMessageDescriptors.ts:726 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:413 @@ -9790,6 +9786,11 @@ msgstr "Los menús contextuales se pueden abrir con un clic izquierdo (en botone msgid "Continue" msgstr "Continuar" +#. Title in the desktop app while it waits for the user to sign in on the browser page it opened. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:177 +msgid "Continue in your browser" +msgstr "Continuar en tu navegador" + #. Button in the gift time confirmation that proceeds to subscription checkout. #: src/features/app/components/dialogs/components/plutonium/hooks/useCheckoutActions.tsx:145 msgid "Continue to checkout" @@ -10437,7 +10438,7 @@ msgid "Couldn't close DM" msgstr "No se pudo cerrar el MD" #. Desktop handoff flow error shown when finalizing the sign-in fails after a valid code. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:21 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:34 msgid "Couldn't complete sign-in. Try again." msgstr "No se pudo completar el inicio de sesión. Inténtalo de nuevo." @@ -10831,6 +10832,11 @@ msgstr "No se pudo iniciar la autorización de {blueskyProviderName}" msgid "Couldn't start checkout" msgstr "No se pudo iniciar el pago" +#. Shown in the desktop app when the browser sign-in request could not be created. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:66 +msgid "Couldn't start signing in with your browser." +msgstr "No se ha podido iniciar sesión con el navegador." + #. Toast error shown when creating a new account connection fails. #: src/features/connection/commands/ConnectionCommands.ts:27 msgid "Couldn't start the connection" @@ -10942,7 +10948,7 @@ msgid "Couldn't upload banner" msgstr "No se pudo subir el banner" #. Desktop handoff flow error shown when verifying the pairing code fails for an unexpected reason. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:17 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:30 msgid "Couldn't verify that code. Try again." msgstr "No se ha podido verificar el código. Inténtalo de nuevo." @@ -12503,7 +12509,6 @@ msgstr "Diseño denso" #. Short label in the settings dialog permission components. Keep the tone plain and specific. #: src/features/app/components/dialogs/shared/PermissionComponents.tsx:16 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:203 msgid "Deny" msgstr "Denegar" @@ -14910,15 +14915,16 @@ msgstr "Introduce el código de {digitCount} dígitos de tu aplicación de auten msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Introduce el código de {digitCount} dígitos de tu aplicación de autenticación." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:108 -msgid "Enter the code" -msgstr "Introduce el código" - #. Inline validation error on the verification step of the DSA report flow when the code field is empty. #: src/features/moderation/components/pages/ReportPage.tsx:74 msgid "Enter the code before continuing." msgstr "Introduce el código antes de continuar." +#. Title of the browser page where the user types the 12-character code the app shows under Signing in on another device. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +msgid "Enter the code from the {PRODUCT_NAME} app" +msgstr "Introduce el código de la aplicación {PRODUCT_NAME}" + #. Body text in the authentication sudo verification modal. Keep the tone plain and specific. #: src/features/auth/components/modals/SudoVerificationModal.tsx:56 msgid "Enter the code from your authenticator app." @@ -14933,10 +14939,6 @@ msgstr "Introduce el código enviado a tu correo electrónico actual." msgid "Enter the code sent to your email address." msgstr "Introduce el código enviado a tu correo electrónico." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:111 -msgid "Enter the code shown in the app to continue." -msgstr "Introduce el código que aparece en la aplicación para continuar." - #: src/features/user/components/modals/BouncedEmailChangeModal.tsx:157 #: src/features/user/components/modals/EmailChangeModal.tsx:244 msgid "Enter the code we emailed to your new address." @@ -14959,6 +14961,11 @@ msgstr "Introduce el nuevo correo electrónico que quieres usar. Te enviaremos u msgid "Enter the PIN for your security key to continue." msgstr "Introduce el PIN de tu llave de seguridad para continuar." +#. Title in the desktop app above the code the user types into a browser on another device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:228 +msgid "Enter this code in your browser" +msgstr "Introduce este código en tu navegador" + #: src/features/auth/flow/HandoffCodeDisplay.tsx:132 msgid "Enter this code in your browser to complete sign-in." msgstr "Introduce este código en tu navegador para completar el inicio de sesión." @@ -15362,7 +15369,7 @@ msgstr "Caduca entre {earliest} y {latest}" msgid "Expires in {remaining}s" msgstr "Caduca en {remaining} s" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:374 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:250 msgid "Expires in {remainingSeconds}s" msgstr "Caduca en {remainingSeconds}s" @@ -16165,7 +16172,7 @@ msgid "Fluxer" msgstr "Fluxer" #. Status shown when browser sign-in status polling gives up after repeated failures. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:72 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:57 msgid "Fluxer stopped checking whether the browser approved this sign-in. It didn't lose your code." msgstr "Fluxer dejó de comprobar si el navegador aprobaba este inicio de sesión. No perdió tu código." @@ -16952,8 +16959,6 @@ msgstr "Genera un enlace para compartir o copia tu CSS personalizado combinado." msgid "Generate invite link" msgstr "Generar enlace de invitación" -#. Button label that replaces an expired browser sign-in code with a fresh one. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:64 #: src/features/auth/flow/HandoffCodeDisplay.tsx:117 msgid "Generate new code" msgstr "Generar nuevo código" @@ -17348,6 +17353,16 @@ msgstr "Vuelve e introduce un correo electrónico válido." msgid "Go back to {productName} to continue." msgstr "Vuelve a {productName} para continuar." +#. Shown after approving a sign-in for an app on another device, which signs in by itself shortly. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:292 +msgid "Go back to the {PRODUCT_NAME} app. It finishes signing in on its own." +msgstr "Vuelve a la aplicación {PRODUCT_NAME}. Termina de iniciar sesión sola." + +#. Shown after approving, when the browser has already handed the sign-in back to the desktop app. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:288 +msgid "Go back to the {PRODUCT_NAME} app. You can close this tab." +msgstr "Vuelve a la aplicación {PRODUCT_NAME}. Puedes cerrar esta pestaña." + #. Accessible label for the community row of an expression info card, which opens a community the viewer is already a member of. {communityName} is the community name. #: src/features/expressions/components/ExpressionInfoCard.tsx:89 msgid "Go to {communityName}" @@ -19295,11 +19310,6 @@ msgstr "JSON no válido. Pega la respuesta completa de la URL de arriba." msgid "Invalid or expired code" msgstr "Código no válido o caducado" -#. Desktop handoff flow error shown when the entered pairing code is invalid or expired. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:13 -msgid "Invalid or expired code. Try again." -msgstr "Código no válido o caducado. Inténtalo de nuevo." - #. Short label in the authentication authorize flow. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/state/useAuthorizeFlow.ts:82 msgid "Invalid redirect_uri" @@ -20876,7 +20886,7 @@ msgstr "Formato de hora del idioma" msgid "Localization" msgstr "Idioma y región" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:192 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:109 #: src/features/user/components/modals/tabs/DevicesTab.tsx:152 msgid "Location" msgstr "Ubicación" @@ -21034,6 +21044,11 @@ msgstr "¿Quieres que {userName} sea el propietario del grupo? Perderás los pri msgid "Make group owner" msgstr "Hacer propietario del grupo" +#. Shown above the code on the browser approval page when the app cannot be signed in automatically. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:253 +msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." +msgstr "Asegúrate de que este código coincida con el de la aplicación {PRODUCT_NAME}." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" @@ -24668,6 +24683,11 @@ msgstr "El <0>{listPriceEffectiveDate} tu suscripción pasará de {listPrice msgid "On click" msgstr "Al hacer clic" +#. One line explanation in the desktop app above the code. signInAddress is the web address of the sign-in page, such as web.fluxer.app/login?handoff=1. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:236 +msgid "On your other device, sign in at {signInAddress} and enter this code when asked." +msgstr "En tu otro dispositivo, inicia sesión en {signInAddress} e introduce este código cuando se te solicite." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:715 msgid "Once deleted, the application and its credentials are permanently removed." msgstr "Una vez eliminada, la aplicación y sus credenciales se borrarán permanentemente." @@ -24733,6 +24753,11 @@ msgstr "Solo menciones a @" msgid "Only applies on wide screens." msgstr "Solo se aplica en pantallas anchas." +#. Warning under the title of the browser approval page, so people do not approve a sign-in someone else started. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:245 +msgid "Only continue if you started this sign-in on a device you control." +msgstr "Solo continúa si iniciaste esta sesión en un dispositivo que controlas." + #. Body copy in the mature content check modal. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:32 msgid "Only credit cards are accepted. Debit and prepaid cards cannot be used for the mature content check." @@ -24921,6 +24946,11 @@ msgstr "Abrir {landmarkName}" msgid "Open {premiumProductFullName}" msgstr "Abrir {premiumProductFullName}" +#. Button on the browser page after approving that opens the desktop app again if it did not come to the front. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:304 +msgid "Open {PRODUCT_NAME}" +msgstr "Abrir {PRODUCT_NAME}" + #. Button label that opens the desktop app. productName is the app name. #. Button that hands SSO sign-in back to the mobile app. productName is the app name. #: src/features/auth/components/pages/SsoCallbackPage.tsx:47 @@ -25011,12 +25041,15 @@ msgstr "Abrir opciones del banner" msgid "Open bookmarks" msgstr "Abrir mensajes guardados" -#. Button label that opens the browser sign-in handoff page. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:56 #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:184 msgid "Open browser" msgstr "Abrir navegador" +#. Button in the desktop app that reopens the browser sign-in page while the app waits for the browser. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:53 +msgid "Open browser again" +msgstr "Abrir el navegador de nuevo" + #. Primary button in the screen-share picker on web. Hands off to the browser's native getDisplayMedia picker. #: src/features/voice/components/modals/ScreenSharePickerModal.tsx:209 msgid "Open browser picker" @@ -25392,10 +25425,6 @@ msgstr "Abrir ajustes de audio y vídeo" msgid "Open with {accountName} on {instanceName}" msgstr "Abrir con {accountName} en {instanceName}" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:414 -msgid "Open your browser to finish signing in." -msgstr "Abre tu navegador para terminar de iniciar sesión." - #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:137 msgid "Open your browser, sign in, then enter the code below to link your account." msgstr "Abre tu navegador, inicia sesión y, a continuación, introduce el código de abajo para vincular tu cuenta." @@ -25421,7 +25450,7 @@ msgstr "Abre la página de Miembros. Pulsa la barra espaciadora o Intro para abr #. Short label in the language tab. Keep it concise. #. Spellcheck engine option in the textarea spellcheck submenu. Uses the host operating system spellchecker. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:79 #: src/features/user/components/modals/tabs/LanguageTab.tsx:110 msgid "Operating system" @@ -26439,7 +26468,7 @@ msgstr "Plan" msgid "Plans, perks, gifts and your subscription all live on one page." msgstr "Planes, ventajas, regalos y tu suscripción, todo en una sola página." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:172 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:89 msgid "Platform" msgstr "Plataforma" @@ -31859,11 +31888,6 @@ msgstr "Mostrar chat" msgid "Show chat with {count, plural, one {# unread message} other {# unread messages}}" msgstr "Mostrar chat con {count, plural, one {# mensaje sin leer} other {# mensajes sin leer}}" -#. Button label that opens the manual browser handoff code fallback. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:60 -msgid "Show code" -msgstr "Mostrar código" - #. Developer voice status menu option for displaying the voice connection identifier. #: src/features/voice/components/voice_connection_status/VoiceConnectionStatusInner.tsx:76 msgid "Show connection ID" @@ -32306,7 +32330,9 @@ msgstr "Muestra el banner en su propia sección debajo del encabezado de la comu msgid "Sidebar" msgstr "Barra lateral" +#. Button in the browser that approves signing in to the desktop or mobile app that asked for it. #. Generic authentication action label. Use for buttons, links, page titles, and accessible labels. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:33 #: src/features/i18n/utils/CommonMessageDescriptors.ts:79 msgid "Sign in" msgstr "Iniciar sesión" @@ -32321,10 +32347,35 @@ msgstr "Inicia sesión de nuevo" msgid "Sign in again as {accountLabel}" msgstr "Vuelve a iniciar sesión como {accountLabel}" +#. Shown in the desktop app while it waits for the browser. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:193 +msgid "Sign in to {instanceName} in your browser and confirm. This app finishes signing in on its own." +msgstr "Inicia sesión en {instanceName} en tu navegador y confirma. Esta aplicación terminará de iniciar sesión sola." + +#. Shown in the desktop app above the code when the browser cannot return the sign-in automatically. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:189 +msgid "Sign in to {instanceName} in your browser, and check that it shows this code:" +msgstr "Inicia sesión en {instanceName} en tu navegador y comprueba que se muestra este código:" + #: src/features/auth/flow/GiftHeader.tsx:33 msgid "Sign in to claim your gift" msgstr "Inicia sesión para reclamar tu regalo" +#. Title of the browser page where the user approves signing in to an app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:71 +msgid "Sign in to the {PRODUCT_NAME} app" +msgstr "Iniciar sesión en la aplicación {PRODUCT_NAME}" + +#. Title of the browser page where the user approves signing in to the desktop app that opened it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:58 +msgid "Sign in to the {PRODUCT_NAME} desktop app" +msgstr "Inicia sesión en la aplicación de escritorio {PRODUCT_NAME}" + +#. Title of the browser page where the user approves signing in to the mobile app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:65 +msgid "Sign in to the {PRODUCT_NAME} mobile app" +msgstr "Inicia sesión en la aplicación móvil de {PRODUCT_NAME}" + #. Action label that starts passkey authentication. #: src/features/auth/AuthMessageDescriptors.ts:13 msgid "Sign in with a passkey" @@ -32403,14 +32454,10 @@ msgstr "Cerrar sesión en otros dispositivos de tu cuenta" msgid "Sign out?" msgstr "¿Cerrar sesión?" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:234 -msgid "Sign-in approved" -msgstr "Inicio de sesión aprobado" - -#. Short label in the authentication handoff approval flow. Keep the tone plain and specific. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:26 -msgid "Sign-in code" -msgstr "Código de inicio de sesión" +#. Title of the browser page after the user cancelled the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:322 +msgid "Sign-in cancelled" +msgstr "Inicio de sesión cancelado" #. Section title for email address and password controls in the account security tab. Keep it concise. #: src/features/user/components/modals/tabs/account_security_tab/AccountSecuritySections.tsx:23 @@ -32433,10 +32480,6 @@ msgstr "Flujo de inicio de sesión" msgid "Sign-in method" msgstr "Método de inicio de sesión" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:84 -msgid "Sign-in request" -msgstr "Solicitud de inicio de sesión" - #. Aria label on the signal-strength icon shown while the first latency sample is still pending. #: src/features/voice/components/SignalStrengthIcon.tsx:16 msgid "Signal strength loading" @@ -32453,6 +32496,21 @@ msgstr "Sesión iniciada" msgid "Signed-in devices" msgstr "Dispositivos con sesión iniciada" +#. Shown on the browser approval page above the buttons. name is the display name of the account that will be signed in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:137 +msgid "Signing in as {name}" +msgstr "Iniciar sesión como {name}" + +#. Text button in the desktop app that shows a code to type into a browser on a different device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:207 +msgid "Signing in on another device?" +msgstr "¿Iniciando sesión en otro dispositivo?" + +#. Title while the browser approves the sign-in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:228 +msgid "Signing in…" +msgstr "Iniciando sesión…" + #. Label for Bluesky OAuth signing key ID input. #: src/features/app/components/setup/SetupWizardSteps.tsx:1161 msgid "Signing key ID" @@ -33504,6 +33562,8 @@ msgstr "Iniciar prueba del micrófono" msgid "Start minimized" msgstr "Iniciar minimizado" +#. Button on the browser page after cancelling that goes back to choosing an account. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:337 #: src/features/moderation/components/report/ReportStepDetails.tsx:326 #: src/features/moderation/components/report/ReportStepEmail.tsx:97 #: src/features/moderation/components/report/ReportStepVerification.tsx:134 @@ -34910,6 +34970,11 @@ msgstr "Tailandés" msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Gracias por ayudarnos a mantener {productName} seguro. Revisaremos tu denuncia lo antes posible." +#. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 +msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." +msgstr "Ese código no es válido en {instanceHost}. Comprueba el código en la aplicación {productName} e inténtalo de nuevo." + #. Body of the passkey page after the passkey prompt failed or was dismissed. Keep plain. #: src/features/auth/passkey_migration/PasskeyBridgePage.tsx:36 msgid "That didn't work. Try again or cancel." @@ -34953,11 +35018,6 @@ msgstr "No se pudo eliminar el mensaje" msgid "That message is gone, or you lost access to the conversation." msgstr "Ese mensaje ya no existe o has perdido el acceso a la conversación." -#. Error shown when a browser sign-in handoff code expires before it is approved. -#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 -msgid "That sign-in code expired. Try again." -msgstr "Ese código de inicio de sesión ha caducado. Inténtalo de nuevo." - #. End-of-list line in the saved messages popout after every bookmark has been shown. #. End-of-list line on the saved messages page after every bookmark has been shown. #: src/features/messaging/components/pages/SavedMessagesPage.tsx:35 @@ -34965,6 +35025,21 @@ msgstr "Ese código de inicio de sesión ha caducado. Inténtalo de nuevo." msgid "That's all of them." msgstr "Eso es todo." +#. Warning on the browser approval page when the app asked for a different account than the one chosen. requestedIdentifier is the email or username the app asked for, name is the chosen account's display name. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:131 +msgid "The {PRODUCT_NAME} app asked to sign in as {requestedIdentifier}, but you chose {name}." +msgstr "La aplicación {PRODUCT_NAME} pidió iniciar sesión como {requestedIdentifier}, pero elegiste {name}." + +#. Explains where the code comes from, under the title of the browser page where it is typed. Signing in on another device is the label of a button in the app and must match its translation. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:187 +msgid "The {PRODUCT_NAME} app on your other device shows it under Signing in on another device. Only enter a code from a device you control." +msgstr "La aplicación {PRODUCT_NAME} en tu otro dispositivo la muestra en \"Iniciar sesión en otro dispositivo\". Solo introduce un código de un dispositivo que controles." + +#. Shown after the user cancelled the sign-in request in the browser. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:327 +msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." +msgstr "La aplicación {PRODUCT_NAME} no ha iniciado sesión. Puedes cerrar esta pestaña." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -34983,10 +35058,6 @@ msgstr "La aplicación se ha bloqueado" msgid "The app has crashed. Checking for updates that might fix this issue…" msgstr "La aplicación se ha bloqueado. Buscando actualizaciones que puedan solucionar este problema…" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:237 -msgid "The app should now be signed in to your account." -msgstr "La aplicación debería haber iniciado sesión en tu cuenta." - #. Activity log detail line under a lifted ban, for a temporary ban that had already ended on its own before it was lifted. A ban is the community ban, not the feature that blocks a user. {date} is when the ban ended, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:55 msgid "The ban had already expired on {date}" @@ -35184,6 +35255,16 @@ msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "La fuente de uso compartido de pantalla dejó de enviar vídeo, por lo que se detuvo el uso compartido de pantalla." +#. Error shown in the desktop app when a browser sign-in request expires before it is approved in the browser. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 +msgid "The sign-in request expired before your browser approved it." +msgstr "La solicitud de inicio de sesión ha caducado antes de que tu navegador la aprobara." + +#. Error shown in the desktop app when the user pressed Cancel on the browser sign-in page. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:14 +msgid "The sign-in was cancelled in your browser." +msgstr "El inicio de sesión se ha cancelado en tu navegador." + #. Activity log detail line under a deleted sticker, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the sticker, shown as a clickable user chip. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts:100 msgid "The sticker was uploaded by {user}" @@ -35408,6 +35489,11 @@ msgstr "Terceros" msgid "This account can't be blocked." msgstr "No se puede bloquear esta cuenta." +#. Error in the browser when the chosen account belongs to a different server than the app that asked to sign in. accountHost and requestHost are server addresses. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:38 +msgid "This account is on {accountHost}, but the {productName} app is signing in to {requestHost}. Choose an account on {requestHost}." +msgstr "Esta cuenta está en {accountHost}, pero la aplicación {productName} está iniciando sesión en {requestHost}. Elige una cuenta de {requestHost}." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:418 msgid "This action cannot be undone. All associated data, including the bot user, will be permanently deleted." msgstr "Esta acción no se puede deshacer. Todos los datos asociados, incluido el usuario bot, se eliminarán permanentemente." @@ -35551,11 +35637,6 @@ msgstr "Esto borra por completo tu estado premium del backend, incluido el tipo msgid "This code doesn't exist." msgstr "Este código no existe." -#. Status shown under the browser sign-in code once its countdown reaches zero. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:68 -msgid "This code expired." -msgstr "Este código ha caducado." - #. Gift redemption error modal body for an invalid or already used code. #: src/features/gift/commands/GiftCommands.tsx:37 msgid "This code is invalid or already used." @@ -36075,6 +36156,11 @@ msgstr "Este enlace de restablecimiento ha caducado. Los enlaces de restablecimi msgid "This shows how links appear: {linkPreviewExampleUrl}" msgstr "Así se muestran los enlaces: {linkPreviewExampleUrl}" +#. Error in the browser when the sign-in request from the desktop app no longer exists, because it expired or the app cancelled it. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:20 +msgid "This sign-in request expired or was cancelled in the {productName} app. Start again from the app." +msgstr "Esta solicitud de inicio de sesión ha caducado o ha sido cancelada en la aplicación {productName}. Vuelve a intentarlo desde la aplicación." + #. Label above the community a sticker comes from in the sticker info card. #: src/features/expressions/components/ExpressionInfoCard.tsx:75 msgid "This sticker is from" @@ -38520,6 +38606,11 @@ msgstr "Usa {url} donde se deba insertar la URL de la imagen." msgid "Use a dedicated modal to set a message history threshold date for members who don't have the {readMessageHistoryPermissionLabel} permission." msgstr "Usa una ventana específica para establecer una fecha de corte del historial de mensajes para los miembros que no tienen el permiso {readMessageHistoryPermissionLabel}." +#. Text button on the browser approval page that goes back to choosing which account signs in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:149 +msgid "Use a different account" +msgstr "Usar otra cuenta" + #: src/features/auth/flow/instance_selector/InstancePickerRows.tsx:267 msgid "Use a self-hosted instance URL" msgstr "Usa una URL de instancia autoalojada" @@ -39296,10 +39387,6 @@ msgstr "Verifica tu correo electrónico para comprar {premiumProductFullName}." msgid "Verify your email to start DMs." msgstr "Verifica tu correo electrónico para iniciar MD." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:142 -msgid "Verifying code…" -msgstr "Verificando código…" - #: src/features/auth/components/pages/ResetPasswordPage.tsx:145 msgid "Verifying your reset link…" msgstr "Verificando tu enlace de restablecimiento…" @@ -40073,10 +40160,6 @@ msgstr "Espera un momento antes de eliminar más mensajes." msgid "Wait between messages. Members with \"{bypassSlowmodePermissionLabel}\" can bypass this." msgstr "Tiempo de espera entre mensajes. Los miembros con el permiso \"{bypassSlowmodePermissionLabel}\" pueden omitirlo." -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:445 -msgid "Waiting for browser approval." -msgstr "Esperando aprobación del navegador." - #. Tooltip explaining that video / screen share controls are gated while the voice connection is not yet ready. #: src/features/voice/components/voice_connection_status/LocalParticipantControls.tsx:45 msgid "Waiting for connection..." @@ -40118,10 +40201,6 @@ msgstr "Reactivar" msgid "Warning" msgstr "Advertencia" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:158 -msgid "Was this you?" -msgstr "¿Fuiste tú?" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:243 msgctxt "us-state" @@ -40959,10 +41038,6 @@ msgstr "Ya tienes {premiumProductName} de por vida" msgid "You already have this connection." msgstr "Ya tienes esta conexión." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:87 -msgid "You are about to authorize an app to sign in to your account. Only continue if you initiated this request from a device you control." -msgstr "Estás a punto de autorizar una aplicación para iniciar sesión en tu cuenta. Solo continúa si has iniciado esta solicitud desde un dispositivo que controlas." - #. External link warning title. productName is the Fluxer product name. #: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:22 msgid "You are about to leave {productName}" @@ -41732,6 +41807,11 @@ msgstr "Tienes una tarifa antigua. El precio actual de este plan es {currentSubs msgid "You're sending messages too quickly" msgstr "Estás enviando mensajes demasiado rápido" +#. Title of the browser page after the user approved signing in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:282 +msgid "You're signed in" +msgstr "Has iniciado sesión" + #. Status text on the screen-share hover popout shown to the local streamer. Lightly playful tone. #: src/features/voice/components/StreamWatchHoverPopout.tsx:43 msgid "You're streaming!" diff --git a/fluxer_app/src/features/i18n/locales/fi/messages.po b/fluxer_app/src/features/i18n/locales/fi/messages.po index a9c0a53b5..9ff6f18c0 100644 --- a/fluxer_app/src/features/i18n/locales/fi/messages.po +++ b/fluxer_app/src/features/i18n/locales/fi/messages.po @@ -1573,7 +1573,7 @@ msgid "{imageCount, plural, one {# image} other {# images}}, {videoCount, plural msgstr "{imageCount, plural, one {# kuva} other {# kuvaa}}, {videoCount, plural, one {# video} other {# videota}}" #. Explanation shown when the selected instance advertises no web app endpoint. Instance name is interpolated. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:76 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:61 msgid "{instanceName} does not publish a web address, so sign-in cannot be handed to a browser." msgstr "{instanceName} ei julkaise verkko-osoitetta, joten kirjautumista ei voida siirtää selaimeen." @@ -2777,14 +2777,6 @@ msgstr "rikastettu upotus tai linkin esikatselu (ei ladattua tiedostoa)" msgid "A separate profile for each community" msgstr "Erillinen profiili jokaiselle yhteisölle" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:164 -msgid "A sign-in request was made for your account. Only approve if you initiated it." -msgstr "Tilillesi tehtiin kirjautumispyyntö. Hyväksy vain, jos aloitit sen itse." - -#: src/features/auth/flow/HandoffApprovalFlow.tsx:162 -msgid "A sign-in request was made from the following device. Only approve if you recognize it." -msgstr "Kirjautumispyyntö tehtiin seuraavalta laitteelta. Hyväksy vain, jos tunnistat laitteen." - #. Description for has:sticker. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:51 msgid "a sticker" @@ -4811,10 +4803,6 @@ msgstr "Käytä kaikissa yhteisöissä" msgid "Approval required" msgstr "Hyväksyntä vaaditaan" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:206 -msgid "Approve" -msgstr "Hyväksy" - #. Hint under the sign-in option on fluxer.com that pairs a newly installed app with the old installed app. productName is the app name. #: src/features/auth/flow/AuthLoginLayout.tsx:101 msgid "Approve this app from the {productName} app you already use. No password needed." @@ -7873,6 +7861,11 @@ msgstr "Tarkistetaan käyttöoikeutta..." msgid "Checking screen recording permission..." msgstr "Tarkistetaan näytön tallennuslupaa…" +#. Title while the browser looks up the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:224 +msgid "Checking the sign-in request…" +msgstr "Tarkistetaan kirjautumispyyntöä…" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -8847,6 +8840,11 @@ msgstr "Koodilohkot" msgid "Code expired" msgstr "Koodi vanhentunut" +#. Label of the field in the browser where the user types the 12-character code shown in the desktop or mobile app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:28 +msgid "Code from the {productName} app" +msgstr "Koodi sovelluksesta {productName}" + #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 @@ -9348,7 +9346,6 @@ msgstr "Piilota {premiumProductName}-merkki kokonaan muilta käyttäjiltä" #: src/features/auth/components/pages/SsoCallbackPage.tsx:256 #: src/features/auth/components/pages/SsoCallbackPage.tsx:322 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:216 msgid "Completing sign-in…" msgstr "Kirjautuminen viimeistellään…" @@ -9782,7 +9779,6 @@ msgstr "Pikavalikot voi avata vasemmalla napsautuksella (painikkeissa) tai oikea #: src/features/auth/components/modals/DeviceRevokeModal.tsx:77 #: src/features/auth/components/modals/PasskeyPinModal.tsx:111 #: src/features/auth/components/pages/oauth_authorize_page/OAuthAccountStep.tsx:36 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/connection/components/modals/AddConnectionModal.tsx:384 #: src/features/i18n/utils/CommonMessageDescriptors.ts:726 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:413 @@ -9790,6 +9786,11 @@ msgstr "Pikavalikot voi avata vasemmalla napsautuksella (painikkeissa) tai oikea msgid "Continue" msgstr "Jatka" +#. Title in the desktop app while it waits for the user to sign in on the browser page it opened. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:177 +msgid "Continue in your browser" +msgstr "Jatka selaimessa" + #. Button in the gift time confirmation that proceeds to subscription checkout. #: src/features/app/components/dialogs/components/plutonium/hooks/useCheckoutActions.tsx:145 msgid "Continue to checkout" @@ -10437,7 +10438,7 @@ msgid "Couldn't close DM" msgstr "Yksityisviestiä ei voitu sulkea" #. Desktop handoff flow error shown when finalizing the sign-in fails after a valid code. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:21 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:34 msgid "Couldn't complete sign-in. Try again." msgstr "Kirjautuminen epäonnistui. Yritä uudelleen." @@ -10831,6 +10832,11 @@ msgstr "Kohteen {blueskyProviderName} valtuutusta ei voitu aloittaa" msgid "Couldn't start checkout" msgstr "Kassan avaaminen epäonnistui" +#. Shown in the desktop app when the browser sign-in request could not be created. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:66 +msgid "Couldn't start signing in with your browser." +msgstr "Kirjautumista selaimeen ei voitu aloittaa." + #. Toast error shown when creating a new account connection fails. #: src/features/connection/commands/ConnectionCommands.ts:27 msgid "Couldn't start the connection" @@ -10942,7 +10948,7 @@ msgid "Couldn't upload banner" msgstr "Bannerin lataaminen epäonnistui" #. Desktop handoff flow error shown when verifying the pairing code fails for an unexpected reason. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:17 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:30 msgid "Couldn't verify that code. Try again." msgstr "Koodin vahvistaminen epäonnistui. Yritä uudelleen." @@ -12503,7 +12509,6 @@ msgstr "Tiivis asettelu" #. Short label in the settings dialog permission components. Keep the tone plain and specific. #: src/features/app/components/dialogs/shared/PermissionComponents.tsx:16 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:203 msgid "Deny" msgstr "Estä" @@ -14910,15 +14915,16 @@ msgstr "Anna {digitCount}-numeroinen koodi todennussovelluksestasi tai jokin var msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Syötä todennussovelluksesi {digitCount}-numeroinen koodi." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:108 -msgid "Enter the code" -msgstr "Anna koodi" - #. Inline validation error on the verification step of the DSA report flow when the code field is empty. #: src/features/moderation/components/pages/ReportPage.tsx:74 msgid "Enter the code before continuing." msgstr "Syötä koodi ennen jatkamista." +#. Title of the browser page where the user types the 12-character code the app shows under Signing in on another device. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +msgid "Enter the code from the {PRODUCT_NAME} app" +msgstr "Syötä koodi {PRODUCT_NAME}-sovelluksesta" + #. Body text in the authentication sudo verification modal. Keep the tone plain and specific. #: src/features/auth/components/modals/SudoVerificationModal.tsx:56 msgid "Enter the code from your authenticator app." @@ -14933,10 +14939,6 @@ msgstr "Anna nykyiseen sähköpostiisi lähetetty koodi." msgid "Enter the code sent to your email address." msgstr "Anna sähköpostiisi lähetetty koodi." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:111 -msgid "Enter the code shown in the app to continue." -msgstr "Jatka syöttämällä sovelluksessa näkyvä koodi." - #: src/features/user/components/modals/BouncedEmailChangeModal.tsx:157 #: src/features/user/components/modals/EmailChangeModal.tsx:244 msgid "Enter the code we emailed to your new address." @@ -14959,6 +14961,11 @@ msgstr "Anna uusi sähköpostiosoite. Lähetämme sinne koodin seuraavaksi." msgid "Enter the PIN for your security key to continue." msgstr "Syötä turva-avaimesi PIN-koodi jatkaaksesi." +#. Title in the desktop app above the code the user types into a browser on another device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:228 +msgid "Enter this code in your browser" +msgstr "Syötä tämä koodi selaimeesi" + #: src/features/auth/flow/HandoffCodeDisplay.tsx:132 msgid "Enter this code in your browser to complete sign-in." msgstr "Kirjoita tämä koodi selaimeesi kirjautumisen viimeistelemiseksi." @@ -15362,7 +15369,7 @@ msgstr "Vanhenee välillä {earliest} ja {latest}" msgid "Expires in {remaining}s" msgstr "Vanhenee {remaining} s kuluttua" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:374 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:250 msgid "Expires in {remainingSeconds}s" msgstr "Vanhenee {remainingSeconds}s kuluttua" @@ -16165,7 +16172,7 @@ msgid "Fluxer" msgstr "Fluxer" #. Status shown when browser sign-in status polling gives up after repeated failures. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:72 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:57 msgid "Fluxer stopped checking whether the browser approved this sign-in. It didn't lose your code." msgstr "Fluxer lopetti selaimen hyväksynnän tarkistamisen tälle kirjautumiselle. Se ei kadottanut koodiasi." @@ -16952,8 +16959,6 @@ msgstr "Luo jaettava linkki tai kopioi yhdistetty mukautettu CSS-koodisi." msgid "Generate invite link" msgstr "Luo kutsulinkki" -#. Button label that replaces an expired browser sign-in code with a fresh one. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:64 #: src/features/auth/flow/HandoffCodeDisplay.tsx:117 msgid "Generate new code" msgstr "Luo uusi koodi" @@ -17348,6 +17353,16 @@ msgstr "Palaa ja anna kelvollinen sähköpostiosoite." msgid "Go back to {productName} to continue." msgstr "Palaa palveluun {productName}, niin voit jatkaa." +#. Shown after approving a sign-in for an app on another device, which signs in by itself shortly. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:292 +msgid "Go back to the {PRODUCT_NAME} app. It finishes signing in on its own." +msgstr "Palaa {PRODUCT_NAME}-sovellukseen. Se viimeistelee kirjautumisen itsestään." + +#. Shown after approving, when the browser has already handed the sign-in back to the desktop app. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:288 +msgid "Go back to the {PRODUCT_NAME} app. You can close this tab." +msgstr "Palaa {PRODUCT_NAME}-sovellukseen. Voit sulkea tämän välilehden." + #. Accessible label for the community row of an expression info card, which opens a community the viewer is already a member of. {communityName} is the community name. #: src/features/expressions/components/ExpressionInfoCard.tsx:89 msgid "Go to {communityName}" @@ -19295,11 +19310,6 @@ msgstr "Virheellinen JSON. Liitä koko vastaus yllä olevasta URL-osoitteesta." msgid "Invalid or expired code" msgstr "Virheellinen tai vanhentunut koodi" -#. Desktop handoff flow error shown when the entered pairing code is invalid or expired. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:13 -msgid "Invalid or expired code. Try again." -msgstr "Virheellinen tai vanhentunut koodi. Yritä uudelleen." - #. Short label in the authentication authorize flow. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/state/useAuthorizeFlow.ts:82 msgid "Invalid redirect_uri" @@ -20876,7 +20886,7 @@ msgstr "Ajan esitysmuoto" msgid "Localization" msgstr "Lokalisointi" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:192 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:109 #: src/features/user/components/modals/tabs/DevicesTab.tsx:152 msgid "Location" msgstr "Sijainti" @@ -21034,6 +21044,11 @@ msgstr "Tehdäänkö käyttäjästä {userName} ryhmän omistaja? Menetät omist msgid "Make group owner" msgstr "Aseta ryhmän omistajaksi" +#. Shown above the code on the browser approval page when the app cannot be signed in automatically. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:253 +msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." +msgstr "Varmista, että tämä koodi vastaa sitä {PRODUCT_NAME} -sovelluksessa." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" @@ -24668,6 +24683,11 @@ msgstr "<0>{listPriceEffectiveDate} tilauksesi siirtyy hinnasta {listPriceCu msgid "On click" msgstr "Napsautettaessa" +#. One line explanation in the desktop app above the code. signInAddress is the web address of the sign-in page, such as web.fluxer.app/login?handoff=1. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:236 +msgid "On your other device, sign in at {signInAddress} and enter this code when asked." +msgstr "Kirjaudu toisella laitteellasi osoitteessa {signInAddress} ja anna tämä koodi pyydettäessä." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:715 msgid "Once deleted, the application and its credentials are permanently removed." msgstr "Kun sovellus ja sen tunnistetiedot on poistettu, niitä ei voi enää palauttaa." @@ -24733,6 +24753,11 @@ msgstr "Vain maininnat" msgid "Only applies on wide screens." msgstr "Näkyy vain leveillä näytöillä." +#. Warning under the title of the browser approval page, so people do not approve a sign-in someone else started. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:245 +msgid "Only continue if you started this sign-in on a device you control." +msgstr "Jatka vain, jos aloitit tämän kirjautumisen laitteella, jota hallitset." + #. Body copy in the mature content check modal. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:32 msgid "Only credit cards are accepted. Debit and prepaid cards cannot be used for the mature content check." @@ -24921,6 +24946,11 @@ msgstr "Avaa {landmarkName}" msgid "Open {premiumProductFullName}" msgstr "Avaa {premiumProductFullName}" +#. Button on the browser page after approving that opens the desktop app again if it did not come to the front. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:304 +msgid "Open {PRODUCT_NAME}" +msgstr "Avaa {PRODUCT_NAME}" + #. Button label that opens the desktop app. productName is the app name. #. Button that hands SSO sign-in back to the mobile app. productName is the app name. #: src/features/auth/components/pages/SsoCallbackPage.tsx:47 @@ -25011,12 +25041,15 @@ msgstr "Avaa banneriasetukset" msgid "Open bookmarks" msgstr "Avaa kirjanmerkit" -#. Button label that opens the browser sign-in handoff page. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:56 #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:184 msgid "Open browser" msgstr "Avaa selain" +#. Button in the desktop app that reopens the browser sign-in page while the app waits for the browser. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:53 +msgid "Open browser again" +msgstr "Avaa selaimesi uudelleen" + #. Primary button in the screen-share picker on web. Hands off to the browser's native getDisplayMedia picker. #: src/features/voice/components/modals/ScreenSharePickerModal.tsx:209 msgid "Open browser picker" @@ -25392,10 +25425,6 @@ msgstr "Avaa ääni- ja videoasetukset" msgid "Open with {accountName} on {instanceName}" msgstr "Avaa tilillä {accountName} osoitteessa {instanceName}" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:414 -msgid "Open your browser to finish signing in." -msgstr "Avaa selaimesi kirjautumisen viimeistelemiseksi." - #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:137 msgid "Open your browser, sign in, then enter the code below to link your account." msgstr "Avaa selaimesi, kirjaudu sisään ja syötä sitten alla oleva koodi tilisi yhdistämiseksi." @@ -25421,7 +25450,7 @@ msgstr "Avaa Jäsenet-sivun. Paina välilyöntiä tai Enteriä avataksesi." #. Short label in the language tab. Keep it concise. #. Spellcheck engine option in the textarea spellcheck submenu. Uses the host operating system spellchecker. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:79 #: src/features/user/components/modals/tabs/LanguageTab.tsx:110 msgid "Operating system" @@ -26439,7 +26468,7 @@ msgstr "Tilaus" msgid "Plans, perks, gifts and your subscription all live on one page." msgstr "Suunnitelmat, edut, lahjat ja tilauksesi löytyvät kaikki yhdeltä sivulta." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:172 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:89 msgid "Platform" msgstr "Alusta" @@ -31859,11 +31888,6 @@ msgstr "Näytä chat" msgid "Show chat with {count, plural, one {# unread message} other {# unread messages}}" msgstr "Näytä chat ({count, plural, one {# lukematon viesti} other {# lukematonta viestiä}})" -#. Button label that opens the manual browser handoff code fallback. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:60 -msgid "Show code" -msgstr "Näytä koodi" - #. Developer voice status menu option for displaying the voice connection identifier. #: src/features/voice/components/voice_connection_status/VoiceConnectionStatusInner.tsx:76 msgid "Show connection ID" @@ -32306,7 +32330,9 @@ msgstr "Näyttää bannerin omassa osiossaan yhteisön otsikon alapuolella." msgid "Sidebar" msgstr "Sivupalkki" +#. Button in the browser that approves signing in to the desktop or mobile app that asked for it. #. Generic authentication action label. Use for buttons, links, page titles, and accessible labels. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:33 #: src/features/i18n/utils/CommonMessageDescriptors.ts:79 msgid "Sign in" msgstr "Kirjaudu sisään" @@ -32321,10 +32347,35 @@ msgstr "Kirjaudu sisään uudelleen" msgid "Sign in again as {accountLabel}" msgstr "Kirjaudu uudelleen sisään käyttäjänä {accountLabel}" +#. Shown in the desktop app while it waits for the browser. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:193 +msgid "Sign in to {instanceName} in your browser and confirm. This app finishes signing in on its own." +msgstr "Kirjaudu sisään selaimeesi osoitteessa {instanceName} ja vahvista. Tämä sovellus viimeistelee kirjautumisen itsestään." + +#. Shown in the desktop app above the code when the browser cannot return the sign-in automatically. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:189 +msgid "Sign in to {instanceName} in your browser, and check that it shows this code:" +msgstr "Kirjaudu sisään selaimeesi osoitteessa {instanceName} ja varmista, että siellä näkyy tämä koodi:" + #: src/features/auth/flow/GiftHeader.tsx:33 msgid "Sign in to claim your gift" msgstr "Kirjaudu sisään lunastaaksesi lahjasi" +#. Title of the browser page where the user approves signing in to an app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:71 +msgid "Sign in to the {PRODUCT_NAME} app" +msgstr "Kirjaudu sisään {PRODUCT_NAME} -sovellukseen" + +#. Title of the browser page where the user approves signing in to the desktop app that opened it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:58 +msgid "Sign in to the {PRODUCT_NAME} desktop app" +msgstr "Kirjaudu sisään {PRODUCT_NAME} työpöytäsovellukseen" + +#. Title of the browser page where the user approves signing in to the mobile app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:65 +msgid "Sign in to the {PRODUCT_NAME} mobile app" +msgstr "Kirjaudu sisään {PRODUCT_NAME}-mobiilisovellukseen" + #. Action label that starts passkey authentication. #: src/features/auth/AuthMessageDescriptors.ts:13 msgid "Sign in with a passkey" @@ -32403,14 +32454,10 @@ msgstr "Kirjaa muut laitteet ulos tililtäsi" msgid "Sign out?" msgstr "Kirjaudutaanko ulos?" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:234 -msgid "Sign-in approved" -msgstr "Kirjautuminen hyväksytty" - -#. Short label in the authentication handoff approval flow. Keep the tone plain and specific. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:26 -msgid "Sign-in code" -msgstr "Kirjautumiskoodi" +#. Title of the browser page after the user cancelled the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:322 +msgid "Sign-in cancelled" +msgstr "Kirjautuminen peruutettu" #. Section title for email address and password controls in the account security tab. Keep it concise. #: src/features/user/components/modals/tabs/account_security_tab/AccountSecuritySections.tsx:23 @@ -32433,10 +32480,6 @@ msgstr "Kirjautumisprosessi" msgid "Sign-in method" msgstr "Kirjautumistapa" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:84 -msgid "Sign-in request" -msgstr "Kirjautumispyyntö" - #. Aria label on the signal-strength icon shown while the first latency sample is still pending. #: src/features/voice/components/SignalStrengthIcon.tsx:16 msgid "Signal strength loading" @@ -32453,6 +32496,21 @@ msgstr "Kirjautunut sisään" msgid "Signed-in devices" msgstr "Kirjautuneet laitteet" +#. Shown on the browser approval page above the buttons. name is the display name of the account that will be signed in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:137 +msgid "Signing in as {name}" +msgstr "Kirjaudutaan sisään nimellä {name}" + +#. Text button in the desktop app that shows a code to type into a browser on a different device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:207 +msgid "Signing in on another device?" +msgstr "Kirjautuminen toisella laitteella?" + +#. Title while the browser approves the sign-in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:228 +msgid "Signing in…" +msgstr "Kirjautuminen sisään…" + #. Label for Bluesky OAuth signing key ID input. #: src/features/app/components/setup/SetupWizardSteps.tsx:1161 msgid "Signing key ID" @@ -33504,6 +33562,8 @@ msgstr "Aloita mikrofonitesti" msgid "Start minimized" msgstr "Aloita minimoituna" +#. Button on the browser page after cancelling that goes back to choosing an account. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:337 #: src/features/moderation/components/report/ReportStepDetails.tsx:326 #: src/features/moderation/components/report/ReportStepEmail.tsx:97 #: src/features/moderation/components/report/ReportStepVerification.tsx:134 @@ -34910,6 +34970,11 @@ msgstr "thai" msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Kiitos, että autat pitämään palvelun {productName} turvallisena. Tarkistamme ilmoituksesi mahdollisimman pian." +#. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 +msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." +msgstr "Tuo koodi ei ole kelvollinen osoitteessa {instanceHost}. Tarkista koodi {productName}-sovelluksesta ja yritä uudelleen." + #. Body of the passkey page after the passkey prompt failed or was dismissed. Keep plain. #: src/features/auth/passkey_migration/PasskeyBridgePage.tsx:36 msgid "That didn't work. Try again or cancel." @@ -34953,11 +35018,6 @@ msgstr "Viestin poistaminen epäonnistui" msgid "That message is gone, or you lost access to the conversation." msgstr "Viestiä ei löydy tai sinulla ei ole enää pääsyä keskusteluun." -#. Error shown when a browser sign-in handoff code expires before it is approved. -#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 -msgid "That sign-in code expired. Try again." -msgstr "Tuo kirjautumiskoodi vanheni. Yritä uudelleen." - #. End-of-list line in the saved messages popout after every bookmark has been shown. #. End-of-list line on the saved messages page after every bookmark has been shown. #: src/features/messaging/components/pages/SavedMessagesPage.tsx:35 @@ -34965,6 +35025,21 @@ msgstr "Tuo kirjautumiskoodi vanheni. Yritä uudelleen." msgid "That's all of them." msgstr "Siinä kaikki." +#. Warning on the browser approval page when the app asked for a different account than the one chosen. requestedIdentifier is the email or username the app asked for, name is the chosen account's display name. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:131 +msgid "The {PRODUCT_NAME} app asked to sign in as {requestedIdentifier}, but you chose {name}." +msgstr "Sovellus {PRODUCT_NAME} pyysi kirjautumista nimellä {requestedIdentifier}, mutta valitsit tilin {name}." + +#. Explains where the code comes from, under the title of the browser page where it is typed. Signing in on another device is the label of a button in the app and must match its translation. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:187 +msgid "The {PRODUCT_NAME} app on your other device shows it under Signing in on another device. Only enter a code from a device you control." +msgstr "{PRODUCT_NAME}-sovellus toisella laitteellasi näyttää sen kohdassa Kirjautuminen toisella laitteella. Syötä koodi vain laitteesta, jota hallitset." + +#. Shown after the user cancelled the sign-in request in the browser. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:327 +msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." +msgstr "Sovellusta {PRODUCT_NAME} ei ole kirjattu sisään. Voit sulkea tämän välilehden." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -34983,10 +35058,6 @@ msgstr "Sovellus kaatui" msgid "The app has crashed. Checking for updates that might fix this issue…" msgstr "Sovellus kaatui. Tarkistetaan päivityksiä, jotka voisivat korjata ongelman…" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:237 -msgid "The app should now be signed in to your account." -msgstr "Sovelluksen pitäisi nyt olla kirjautuneena tilillesi." - #. Activity log detail line under a lifted ban, for a temporary ban that had already ended on its own before it was lifted. A ban is the community ban, not the feature that blocks a user. {date} is when the ban ended, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:55 msgid "The ban had already expired on {date}" @@ -35184,6 +35255,16 @@ msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "Näytönjakolähde lopetti videon lähettämisen, joten näytönjako on lopetettu." +#. Error shown in the desktop app when a browser sign-in request expires before it is approved in the browser. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 +msgid "The sign-in request expired before your browser approved it." +msgstr "Kirjautumispyyntö vanheni ennen kuin selaimesi hyväksyi sen." + +#. Error shown in the desktop app when the user pressed Cancel on the browser sign-in page. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:14 +msgid "The sign-in was cancelled in your browser." +msgstr "Kirjautuminen peruutettiin selaimessasi." + #. Activity log detail line under a deleted sticker, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the sticker, shown as a clickable user chip. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts:100 msgid "The sticker was uploaded by {user}" @@ -35408,6 +35489,11 @@ msgstr "Kolmas osapuoli" msgid "This account can't be blocked." msgstr "Tätä tiliä ei voi estää." +#. Error in the browser when the chosen account belongs to a different server than the app that asked to sign in. accountHost and requestHost are server addresses. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:38 +msgid "This account is on {accountHost}, but the {productName} app is signing in to {requestHost}. Choose an account on {requestHost}." +msgstr "Tämä tili on palvelimella {accountHost}, mutta {productName}-sovellus kirjautuu palvelimelle {requestHost}. Valitse tili palvelimelta {requestHost}." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:418 msgid "This action cannot be undone. All associated data, including the bot user, will be permanently deleted." msgstr "Tätä toimintoa ei voi kumota. Kaikki siihen liittyvät tiedot, mukaan lukien bottikäyttäjä, poistetaan pysyvästi." @@ -35551,11 +35637,6 @@ msgstr "Tämä tyhjentää koko premium-tilasi taustajärjestelmästä, mukaan l msgid "This code doesn't exist." msgstr "Koodia ei ole olemassa." -#. Status shown under the browser sign-in code once its countdown reaches zero. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:68 -msgid "This code expired." -msgstr "Tämä koodi vanheni." - #. Gift redemption error modal body for an invalid or already used code. #: src/features/gift/commands/GiftCommands.tsx:37 msgid "This code is invalid or already used." @@ -36075,6 +36156,11 @@ msgstr "Tämä palautuslinkki on vanhentunut. Palautuslinkit ovat voimassa 1 tun msgid "This shows how links appear: {linkPreviewExampleUrl}" msgstr "Näin linkit näkyvät: {linkPreviewExampleUrl}" +#. Error in the browser when the sign-in request from the desktop app no longer exists, because it expired or the app cancelled it. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:20 +msgid "This sign-in request expired or was cancelled in the {productName} app. Start again from the app." +msgstr "Tämä kirjautumispyyntö on vanhentunut tai peruutettu sovelluksessa {productName}. Aloita uudelleen sovelluksesta." + #. Label above the community a sticker comes from in the sticker info card. #: src/features/expressions/components/ExpressionInfoCard.tsx:75 msgid "This sticker is from" @@ -38520,6 +38606,11 @@ msgstr "Käytä {url}-merkintää siihen kohtaan, johon kuvan URL-osoite lisät msgid "Use a dedicated modal to set a message history threshold date for members who don't have the {readMessageHistoryPermissionLabel} permission." msgstr "Määritä erillisessä ikkunassa viestihistorian raja-aika jäsenille, joilla ei ole {readMessageHistoryPermissionLabel} -käyttöoikeutta." +#. Text button on the browser approval page that goes back to choosing which account signs in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:149 +msgid "Use a different account" +msgstr "Käytä toista tiliä" + #: src/features/auth/flow/instance_selector/InstancePickerRows.tsx:267 msgid "Use a self-hosted instance URL" msgstr "Käytä itse isännöidyn palvelun URL-osoitetta" @@ -39296,10 +39387,6 @@ msgstr "Vahvista sähköpostiosoitteesi ostaaksesi {premiumProductFullName}." msgid "Verify your email to start DMs." msgstr "Vahvista sähköpostiosoitteesi aloittaaksesi yksityisviestit." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:142 -msgid "Verifying code…" -msgstr "Vahvistetaan koodia…" - #: src/features/auth/components/pages/ResetPasswordPage.tsx:145 msgid "Verifying your reset link…" msgstr "Vahvistetaan palautuslinkkiä…" @@ -40073,10 +40160,6 @@ msgstr "Odota hetki ennen kuin poistat lisää viestejä." msgid "Wait between messages. Members with \"{bypassSlowmodePermissionLabel}\" can bypass this." msgstr "Viive viestien välillä. Jäsenet, joilla on oikeus \"{bypassSlowmodePermissionLabel}\", voivat ohittaa sen." -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:445 -msgid "Waiting for browser approval." -msgstr "Odotetaan hyväksyntää selaimessa." - #. Tooltip explaining that video / screen share controls are gated while the voice connection is not yet ready. #: src/features/voice/components/voice_connection_status/LocalParticipantControls.tsx:45 msgid "Waiting for connection..." @@ -40118,10 +40201,6 @@ msgstr "Herätä" msgid "Warning" msgstr "Varoitus" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:158 -msgid "Was this you?" -msgstr "Olitko sinä?" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:243 msgctxt "us-state" @@ -40959,10 +41038,6 @@ msgstr "Sinulla on jo elinikäinen {premiumProductName}" msgid "You already have this connection." msgstr "Tämä yhteys on jo olemassa." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:87 -msgid "You are about to authorize an app to sign in to your account. Only continue if you initiated this request from a device you control." -msgstr "Olet aikeissa valtuuttaa sovelluksen kirjautumaan tilillesi. Jatka vain, jos aloitit tämän pyynnön hallitsemaltasi laitteelta." - #. External link warning title. productName is the Fluxer product name. #: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:22 msgid "You are about to leave {productName}" @@ -41732,6 +41807,11 @@ msgstr "Käytössäsi on vanha hinta. Tämän tilauksen nykyinen hinta on {curre msgid "You're sending messages too quickly" msgstr "Lähetät viestejä liian nopeasti" +#. Title of the browser page after the user approved signing in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:282 +msgid "You're signed in" +msgstr "Olet kirjautunut sisään" + #. Status text on the screen-share hover popout shown to the local streamer. Lightly playful tone. #: src/features/voice/components/StreamWatchHoverPopout.tsx:43 msgid "You're streaming!" diff --git a/fluxer_app/src/features/i18n/locales/fr/messages.po b/fluxer_app/src/features/i18n/locales/fr/messages.po index 7484b6e9d..d6590d4ea 100644 --- a/fluxer_app/src/features/i18n/locales/fr/messages.po +++ b/fluxer_app/src/features/i18n/locales/fr/messages.po @@ -1573,7 +1573,7 @@ msgid "{imageCount, plural, one {# image} other {# images}}, {videoCount, plural msgstr "{imageCount, plural, one {# image} other {# images}}, {videoCount, plural, one {# vidéo} other {# vidéos}}" #. Explanation shown when the selected instance advertises no web app endpoint. Instance name is interpolated. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:76 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:61 msgid "{instanceName} does not publish a web address, so sign-in cannot be handed to a browser." msgstr "{instanceName} ne publie pas d'adresse web, l'authentification ne peut donc pas être transmise à un navigateur." @@ -2777,14 +2777,6 @@ msgstr "un contenu intégré enrichi ou un aperçu de lien (pas un fichier envoy msgid "A separate profile for each community" msgstr "Un profil distinct pour chaque communauté" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:164 -msgid "A sign-in request was made for your account. Only approve if you initiated it." -msgstr "Une demande de connexion a été faite pour votre compte. N'approuvez que si vous en êtes à l'origine." - -#: src/features/auth/flow/HandoffApprovalFlow.tsx:162 -msgid "A sign-in request was made from the following device. Only approve if you recognize it." -msgstr "Une demande de connexion a été effectuée depuis l'appareil suivant. Ne l'approuvez que si vous le reconnaissez." - #. Description for has:sticker. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:51 msgid "a sticker" @@ -4811,10 +4803,6 @@ msgstr "Appliquer à toutes les communautés" msgid "Approval required" msgstr "Approbation requise" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:206 -msgid "Approve" -msgstr "Approuver" - #. Hint under the sign-in option on fluxer.com that pairs a newly installed app with the old installed app. productName is the app name. #: src/features/auth/flow/AuthLoginLayout.tsx:101 msgid "Approve this app from the {productName} app you already use. No password needed." @@ -7873,6 +7861,11 @@ msgstr "Vérification de l'accès..." msgid "Checking screen recording permission..." msgstr "Vérification de l’autorisation d’enregistrement d’écran…" +#. Title while the browser looks up the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:224 +msgid "Checking the sign-in request…" +msgstr "Vérification de la demande de connexion…" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -8847,6 +8840,11 @@ msgstr "Blocs de code" msgid "Code expired" msgstr "Code expiré" +#. Label of the field in the browser where the user types the 12-character code shown in the desktop or mobile app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:28 +msgid "Code from the {productName} app" +msgstr "Code de l'application {productName}" + #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 @@ -9348,7 +9346,6 @@ msgstr "Masquer complètement votre badge {premiumProductName} aux autres utilis #: src/features/auth/components/pages/SsoCallbackPage.tsx:256 #: src/features/auth/components/pages/SsoCallbackPage.tsx:322 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:216 msgid "Completing sign-in…" msgstr "Connexion en cours…" @@ -9782,7 +9779,6 @@ msgstr "Les menus contextuels peuvent être ouverts par un clic gauche (sur les #: src/features/auth/components/modals/DeviceRevokeModal.tsx:77 #: src/features/auth/components/modals/PasskeyPinModal.tsx:111 #: src/features/auth/components/pages/oauth_authorize_page/OAuthAccountStep.tsx:36 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/connection/components/modals/AddConnectionModal.tsx:384 #: src/features/i18n/utils/CommonMessageDescriptors.ts:726 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:413 @@ -9790,6 +9786,11 @@ msgstr "Les menus contextuels peuvent être ouverts par un clic gauche (sur les msgid "Continue" msgstr "Continuer" +#. Title in the desktop app while it waits for the user to sign in on the browser page it opened. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:177 +msgid "Continue in your browser" +msgstr "Continuer dans votre navigateur" + #. Button in the gift time confirmation that proceeds to subscription checkout. #: src/features/app/components/dialogs/components/plutonium/hooks/useCheckoutActions.tsx:145 msgid "Continue to checkout" @@ -10437,7 +10438,7 @@ msgid "Couldn't close DM" msgstr "Impossible de fermer la conversation privée" #. Desktop handoff flow error shown when finalizing the sign-in fails after a valid code. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:21 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:34 msgid "Couldn't complete sign-in. Try again." msgstr "Impossible de terminer la connexion. Veuillez réessayer." @@ -10831,6 +10832,11 @@ msgstr "Impossible de démarrer l'autorisation {blueskyProviderName}" msgid "Couldn't start checkout" msgstr "Impossible de démarrer le paiement" +#. Shown in the desktop app when the browser sign-in request could not be created. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:66 +msgid "Couldn't start signing in with your browser." +msgstr "Impossible de lancer la connexion via votre navigateur." + #. Toast error shown when creating a new account connection fails. #: src/features/connection/commands/ConnectionCommands.ts:27 msgid "Couldn't start the connection" @@ -10942,7 +10948,7 @@ msgid "Couldn't upload banner" msgstr "Impossible d’envoyer la bannière" #. Desktop handoff flow error shown when verifying the pairing code fails for an unexpected reason. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:17 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:30 msgid "Couldn't verify that code. Try again." msgstr "Impossible de vérifier ce code. Veuillez réessayer." @@ -12503,7 +12509,6 @@ msgstr "Disposition dense" #. Short label in the settings dialog permission components. Keep the tone plain and specific. #: src/features/app/components/dialogs/shared/PermissionComponents.tsx:16 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:203 msgid "Deny" msgstr "Refuser" @@ -14910,15 +14915,16 @@ msgstr "Saisissez le code à {digitCount} chiffres de votre application d’auth msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Saisissez le code à {digitCount} chiffres de votre application d'authentification." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:108 -msgid "Enter the code" -msgstr "Saisir le code" - #. Inline validation error on the verification step of the DSA report flow when the code field is empty. #: src/features/moderation/components/pages/ReportPage.tsx:74 msgid "Enter the code before continuing." msgstr "Saisissez le code avant de continuer." +#. Title of the browser page where the user types the 12-character code the app shows under Signing in on another device. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +msgid "Enter the code from the {PRODUCT_NAME} app" +msgstr "Entrez le code de l'application {PRODUCT_NAME}" + #. Body text in the authentication sudo verification modal. Keep the tone plain and specific. #: src/features/auth/components/modals/SudoVerificationModal.tsx:56 msgid "Enter the code from your authenticator app." @@ -14933,10 +14939,6 @@ msgstr "Saisissez le code envoyé à votre adresse e-mail actuelle." msgid "Enter the code sent to your email address." msgstr "Saisissez le code envoyé à votre adresse e-mail." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:111 -msgid "Enter the code shown in the app to continue." -msgstr "Saisissez le code affiché dans l'application pour continuer." - #: src/features/user/components/modals/BouncedEmailChangeModal.tsx:157 #: src/features/user/components/modals/EmailChangeModal.tsx:244 msgid "Enter the code we emailed to your new address." @@ -14959,6 +14961,11 @@ msgstr "Saisissez la nouvelle adresse e-mail que vous souhaitez utiliser. Nous v msgid "Enter the PIN for your security key to continue." msgstr "Entrez le code PIN de votre clé de sécurité pour continuer." +#. Title in the desktop app above the code the user types into a browser on another device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:228 +msgid "Enter this code in your browser" +msgstr "Entrez ce code dans votre navigateur" + #: src/features/auth/flow/HandoffCodeDisplay.tsx:132 msgid "Enter this code in your browser to complete sign-in." msgstr "Saisissez ce code dans votre navigateur pour terminer la connexion." @@ -15362,7 +15369,7 @@ msgstr "Expire entre {earliest} et {latest}" msgid "Expires in {remaining}s" msgstr "Expire dans {remaining} s" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:374 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:250 msgid "Expires in {remainingSeconds}s" msgstr "Expire dans {remainingSeconds}s" @@ -16165,7 +16172,7 @@ msgid "Fluxer" msgstr "Fluxer" #. Status shown when browser sign-in status polling gives up after repeated failures. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:72 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:57 msgid "Fluxer stopped checking whether the browser approved this sign-in. It didn't lose your code." msgstr "Fluxer a arrêté de vérifier si le navigateur a approuvé cette connexion. Il n'a pas perdu votre code." @@ -16952,8 +16959,6 @@ msgstr "Générez un lien partageable ou copiez votre CSS personnalisé combiné msgid "Generate invite link" msgstr "Générer un lien d'invitation" -#. Button label that replaces an expired browser sign-in code with a fresh one. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:64 #: src/features/auth/flow/HandoffCodeDisplay.tsx:117 msgid "Generate new code" msgstr "Générer un nouveau code" @@ -17348,6 +17353,16 @@ msgstr "Retournez en arrière et saisissez une adresse e-mail valide." msgid "Go back to {productName} to continue." msgstr "Retournez à {productName} pour continuer." +#. Shown after approving a sign-in for an app on another device, which signs in by itself shortly. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:292 +msgid "Go back to the {PRODUCT_NAME} app. It finishes signing in on its own." +msgstr "Retournez à l'application {PRODUCT_NAME}. Elle termine la connexion toute seule." + +#. Shown after approving, when the browser has already handed the sign-in back to the desktop app. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:288 +msgid "Go back to the {PRODUCT_NAME} app. You can close this tab." +msgstr "Retournez à l'application {PRODUCT_NAME}. Vous pouvez fermer cet onglet." + #. Accessible label for the community row of an expression info card, which opens a community the viewer is already a member of. {communityName} is the community name. #: src/features/expressions/components/ExpressionInfoCard.tsx:89 msgid "Go to {communityName}" @@ -19295,11 +19310,6 @@ msgstr "JSON non valide. Collez la réponse complète de l'URL ci-dessus." msgid "Invalid or expired code" msgstr "Code invalide ou expiré" -#. Desktop handoff flow error shown when the entered pairing code is invalid or expired. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:13 -msgid "Invalid or expired code. Try again." -msgstr "Code invalide ou expiré. Veuillez réessayer." - #. Short label in the authentication authorize flow. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/state/useAuthorizeFlow.ts:82 msgid "Invalid redirect_uri" @@ -20876,7 +20886,7 @@ msgstr "Format de l’heure selon la langue" msgid "Localization" msgstr "Localisation" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:192 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:109 #: src/features/user/components/modals/tabs/DevicesTab.tsx:152 msgid "Location" msgstr "Localisation" @@ -21034,6 +21044,11 @@ msgstr "Faire de {userName} le propriétaire du groupe ? Vous perdrez vos privi msgid "Make group owner" msgstr "Nommer propriétaire du groupe" +#. Shown above the code on the browser approval page when the app cannot be signed in automatically. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:253 +msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." +msgstr "Assurez-vous que ce code correspond à celui de l'application {PRODUCT_NAME}." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" @@ -24668,6 +24683,11 @@ msgstr "Le <0>{listPriceEffectiveDate}, votre abonnement passera de {listPri msgid "On click" msgstr "Au clic" +#. One line explanation in the desktop app above the code. signInAddress is the web address of the sign-in page, such as web.fluxer.app/login?handoff=1. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:236 +msgid "On your other device, sign in at {signInAddress} and enter this code when asked." +msgstr "Sur votre autre appareil, connectez-vous sur {signInAddress} et entrez ce code lorsqu'on vous le demande." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:715 msgid "Once deleted, the application and its credentials are permanently removed." msgstr "Une fois supprimée, l'application et ses identifiants sont définitivement retirés." @@ -24733,6 +24753,11 @@ msgstr "Uniquement les @mentions" msgid "Only applies on wide screens." msgstr "S'applique uniquement aux écrans larges." +#. Warning under the title of the browser approval page, so people do not approve a sign-in someone else started. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:245 +msgid "Only continue if you started this sign-in on a device you control." +msgstr "Continuez uniquement si vous avez commencé cette connexion sur un appareil que vous contrôlez." + #. Body copy in the mature content check modal. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:32 msgid "Only credit cards are accepted. Debit and prepaid cards cannot be used for the mature content check." @@ -24921,6 +24946,11 @@ msgstr "Ouvrir {landmarkName}" msgid "Open {premiumProductFullName}" msgstr "Ouvrir {premiumProductFullName}" +#. Button on the browser page after approving that opens the desktop app again if it did not come to the front. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:304 +msgid "Open {PRODUCT_NAME}" +msgstr "Ouvrir {PRODUCT_NAME}" + #. Button label that opens the desktop app. productName is the app name. #. Button that hands SSO sign-in back to the mobile app. productName is the app name. #: src/features/auth/components/pages/SsoCallbackPage.tsx:47 @@ -25011,12 +25041,15 @@ msgstr "Ouvrir les options de la bannière" msgid "Open bookmarks" msgstr "Ouvrir les messages enregistrés" -#. Button label that opens the browser sign-in handoff page. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:56 #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:184 msgid "Open browser" msgstr "Ouvrir le navigateur" +#. Button in the desktop app that reopens the browser sign-in page while the app waits for the browser. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:53 +msgid "Open browser again" +msgstr "Rouvrir le navigateur" + #. Primary button in the screen-share picker on web. Hands off to the browser's native getDisplayMedia picker. #: src/features/voice/components/modals/ScreenSharePickerModal.tsx:209 msgid "Open browser picker" @@ -25392,10 +25425,6 @@ msgstr "Ouvrir les paramètres audio et vidéo" msgid "Open with {accountName} on {instanceName}" msgstr "Ouvrir avec {accountName} sur {instanceName}" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:414 -msgid "Open your browser to finish signing in." -msgstr "Ouvrez votre navigateur pour terminer la connexion." - #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:137 msgid "Open your browser, sign in, then enter the code below to link your account." msgstr "Ouvrez votre navigateur, connectez-vous, puis saisissez le code ci-dessous pour associer votre compte." @@ -25421,7 +25450,7 @@ msgstr "Ouvre la page Membres. Appuyez sur Espace ou Entrée pour ouvrir." #. Short label in the language tab. Keep it concise. #. Spellcheck engine option in the textarea spellcheck submenu. Uses the host operating system spellchecker. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:79 #: src/features/user/components/modals/tabs/LanguageTab.tsx:110 msgid "Operating system" @@ -26439,7 +26468,7 @@ msgstr "Forfait" msgid "Plans, perks, gifts and your subscription all live on one page." msgstr "Abonnements, avantages, cadeaux et votre souscription sont regroupés sur une seule page." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:172 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:89 msgid "Platform" msgstr "Plateforme" @@ -31859,11 +31888,6 @@ msgstr "Afficher le chat" msgid "Show chat with {count, plural, one {# unread message} other {# unread messages}}" msgstr "Afficher le chat avec {count, plural, one {# message non lu} other {# messages non lus}}" -#. Button label that opens the manual browser handoff code fallback. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:60 -msgid "Show code" -msgstr "Afficher le code" - #. Developer voice status menu option for displaying the voice connection identifier. #: src/features/voice/components/voice_connection_status/VoiceConnectionStatusInner.tsx:76 msgid "Show connection ID" @@ -32306,7 +32330,9 @@ msgstr "Affiche la bannière dans sa propre section sous l'en-tête de la commun msgid "Sidebar" msgstr "Barre latérale" +#. Button in the browser that approves signing in to the desktop or mobile app that asked for it. #. Generic authentication action label. Use for buttons, links, page titles, and accessible labels. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:33 #: src/features/i18n/utils/CommonMessageDescriptors.ts:79 msgid "Sign in" msgstr "Se connecter" @@ -32321,10 +32347,35 @@ msgstr "Se reconnecter" msgid "Sign in again as {accountLabel}" msgstr "Reconnectez-vous en tant que {accountLabel}" +#. Shown in the desktop app while it waits for the browser. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:193 +msgid "Sign in to {instanceName} in your browser and confirm. This app finishes signing in on its own." +msgstr "Connectez-vous à {instanceName} dans votre navigateur et confirmez. Cette application terminera la connexion automatiquement." + +#. Shown in the desktop app above the code when the browser cannot return the sign-in automatically. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:189 +msgid "Sign in to {instanceName} in your browser, and check that it shows this code:" +msgstr "Connectez-vous à {instanceName} dans votre navigateur et vérifiez que ce code s'affiche :" + #: src/features/auth/flow/GiftHeader.tsx:33 msgid "Sign in to claim your gift" msgstr "Connectez-vous pour récupérer votre cadeau" +#. Title of the browser page where the user approves signing in to an app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:71 +msgid "Sign in to the {PRODUCT_NAME} app" +msgstr "Se connecter à l'application {PRODUCT_NAME}" + +#. Title of the browser page where the user approves signing in to the desktop app that opened it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:58 +msgid "Sign in to the {PRODUCT_NAME} desktop app" +msgstr "Se connecter à l'application de bureau {PRODUCT_NAME}" + +#. Title of the browser page where the user approves signing in to the mobile app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:65 +msgid "Sign in to the {PRODUCT_NAME} mobile app" +msgstr "Se connecter à l'application mobile {PRODUCT_NAME}" + #. Action label that starts passkey authentication. #: src/features/auth/AuthMessageDescriptors.ts:13 msgid "Sign in with a passkey" @@ -32403,14 +32454,10 @@ msgstr "Déconnecter les autres appareils de votre compte" msgid "Sign out?" msgstr "Se déconnecter ?" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:234 -msgid "Sign-in approved" -msgstr "Connexion approuvée" - -#. Short label in the authentication handoff approval flow. Keep the tone plain and specific. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:26 -msgid "Sign-in code" -msgstr "Code de connexion" +#. Title of the browser page after the user cancelled the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:322 +msgid "Sign-in cancelled" +msgstr "Connexion annulée" #. Section title for email address and password controls in the account security tab. Keep it concise. #: src/features/user/components/modals/tabs/account_security_tab/AccountSecuritySections.tsx:23 @@ -32433,10 +32480,6 @@ msgstr "Parcours de connexion" msgid "Sign-in method" msgstr "Méthode de connexion" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:84 -msgid "Sign-in request" -msgstr "Demande de connexion" - #. Aria label on the signal-strength icon shown while the first latency sample is still pending. #: src/features/voice/components/SignalStrengthIcon.tsx:16 msgid "Signal strength loading" @@ -32453,6 +32496,21 @@ msgstr "Connecté" msgid "Signed-in devices" msgstr "Appareils connectés" +#. Shown on the browser approval page above the buttons. name is the display name of the account that will be signed in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:137 +msgid "Signing in as {name}" +msgstr "Connexion en tant que {name}" + +#. Text button in the desktop app that shows a code to type into a browser on a different device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:207 +msgid "Signing in on another device?" +msgstr "Connexion sur un autre appareil ?" + +#. Title while the browser approves the sign-in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:228 +msgid "Signing in…" +msgstr "Connexion en cours…" + #. Label for Bluesky OAuth signing key ID input. #: src/features/app/components/setup/SetupWizardSteps.tsx:1161 msgid "Signing key ID" @@ -33504,6 +33562,8 @@ msgstr "Démarrer le test du micro" msgid "Start minimized" msgstr "Démarrer minimisé" +#. Button on the browser page after cancelling that goes back to choosing an account. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:337 #: src/features/moderation/components/report/ReportStepDetails.tsx:326 #: src/features/moderation/components/report/ReportStepEmail.tsx:97 #: src/features/moderation/components/report/ReportStepVerification.tsx:134 @@ -34910,6 +34970,11 @@ msgstr "Thaï" msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Merci de nous aider à assurer la sécurité de {productName}. Nous examinerons votre signalement dès que possible." +#. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 +msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." +msgstr "Ce code n'est pas valide sur {instanceHost}. Vérifiez le code dans l'application {productName} et réessayez." + #. Body of the passkey page after the passkey prompt failed or was dismissed. Keep plain. #: src/features/auth/passkey_migration/PasskeyBridgePage.tsx:36 msgid "That didn't work. Try again or cancel." @@ -34953,11 +35018,6 @@ msgstr "Ce message n'a pas été supprimé" msgid "That message is gone, or you lost access to the conversation." msgstr "Ce message a disparu ou vous n'avez plus accès à la conversation." -#. Error shown when a browser sign-in handoff code expires before it is approved. -#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 -msgid "That sign-in code expired. Try again." -msgstr "Ce code de connexion a expiré. Réessayez." - #. End-of-list line in the saved messages popout after every bookmark has been shown. #. End-of-list line on the saved messages page after every bookmark has been shown. #: src/features/messaging/components/pages/SavedMessagesPage.tsx:35 @@ -34965,6 +35025,21 @@ msgstr "Ce code de connexion a expiré. Réessayez." msgid "That's all of them." msgstr "C'est tout." +#. Warning on the browser approval page when the app asked for a different account than the one chosen. requestedIdentifier is the email or username the app asked for, name is the chosen account's display name. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:131 +msgid "The {PRODUCT_NAME} app asked to sign in as {requestedIdentifier}, but you chose {name}." +msgstr "L'application {PRODUCT_NAME} a demandé de se connecter en tant que {requestedIdentifier}, mais vous avez choisi {name}." + +#. Explains where the code comes from, under the title of the browser page where it is typed. Signing in on another device is the label of a button in the app and must match its translation. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:187 +msgid "The {PRODUCT_NAME} app on your other device shows it under Signing in on another device. Only enter a code from a device you control." +msgstr "L'application {PRODUCT_NAME} sur votre autre appareil l'affiche sous « Connexion sur un autre appareil ». N'entrez un code que s'il provient d'un appareil que vous contrôlez." + +#. Shown after the user cancelled the sign-in request in the browser. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:327 +msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." +msgstr "L'application {PRODUCT_NAME} n'a pas été connectée. Vous pouvez fermer cet onglet." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -34983,10 +35058,6 @@ msgstr "L'application a planté" msgid "The app has crashed. Checking for updates that might fix this issue…" msgstr "L'application a planté. Nous recherchons des mises à jour qui pourraient résoudre ce problème…" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:237 -msgid "The app should now be signed in to your account." -msgstr "L'application devrait maintenant être connectée à votre compte." - #. Activity log detail line under a lifted ban, for a temporary ban that had already ended on its own before it was lifted. A ban is the community ban, not the feature that blocks a user. {date} is when the ban ended, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:55 msgid "The ban had already expired on {date}" @@ -35184,6 +35255,16 @@ msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "La source de partage d’écran a cessé d’envoyer des vidéos, votre partage d’écran a donc été arrêté." +#. Error shown in the desktop app when a browser sign-in request expires before it is approved in the browser. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 +msgid "The sign-in request expired before your browser approved it." +msgstr "La demande de connexion a expiré avant que votre navigateur ne l'approuve." + +#. Error shown in the desktop app when the user pressed Cancel on the browser sign-in page. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:14 +msgid "The sign-in was cancelled in your browser." +msgstr "La connexion a été annulée dans votre navigateur." + #. Activity log detail line under a deleted sticker, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the sticker, shown as a clickable user chip. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts:100 msgid "The sticker was uploaded by {user}" @@ -35408,6 +35489,11 @@ msgstr "Tiers" msgid "This account can't be blocked." msgstr "Ce compte ne peut pas être bloqué." +#. Error in the browser when the chosen account belongs to a different server than the app that asked to sign in. accountHost and requestHost are server addresses. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:38 +msgid "This account is on {accountHost}, but the {productName} app is signing in to {requestHost}. Choose an account on {requestHost}." +msgstr "Ce compte est sur {accountHost}, mais l'application {productName} se connecte à {requestHost}. Choisissez un compte sur {requestHost}." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:418 msgid "This action cannot be undone. All associated data, including the bot user, will be permanently deleted." msgstr "Cette action est irréversible. Toutes les données associées, y compris l'utilisateur du bot, seront définitivement supprimées." @@ -35551,11 +35637,6 @@ msgstr "Cela efface entièrement votre statut premium côté serveur, y compris msgid "This code doesn't exist." msgstr "Ce code n'existe pas." -#. Status shown under the browser sign-in code once its countdown reaches zero. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:68 -msgid "This code expired." -msgstr "Ce code a expiré." - #. Gift redemption error modal body for an invalid or already used code. #: src/features/gift/commands/GiftCommands.tsx:37 msgid "This code is invalid or already used." @@ -36075,6 +36156,11 @@ msgstr "Ce lien de réinitialisation a expiré. Les liens de réinitialisation s msgid "This shows how links appear: {linkPreviewExampleUrl}" msgstr "Voici comment les liens s'affichent : {linkPreviewExampleUrl}" +#. Error in the browser when the sign-in request from the desktop app no longer exists, because it expired or the app cancelled it. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:20 +msgid "This sign-in request expired or was cancelled in the {productName} app. Start again from the app." +msgstr "Cette demande de connexion a expiré ou a été annulée dans l'application {productName}. Veuillez réessayer depuis l'application." + #. Label above the community a sticker comes from in the sticker info card. #: src/features/expressions/components/ExpressionInfoCard.tsx:75 msgid "This sticker is from" @@ -38520,6 +38606,11 @@ msgstr "Utilisez {url} là où l'URL de l'image doit être insérée." msgid "Use a dedicated modal to set a message history threshold date for members who don't have the {readMessageHistoryPermissionLabel} permission." msgstr "Utilisez une fenêtre dédiée pour définir une date limite d'historique des messages pour les membres qui n'ont pas la permission {readMessageHistoryPermissionLabel}." +#. Text button on the browser approval page that goes back to choosing which account signs in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:149 +msgid "Use a different account" +msgstr "Utiliser un autre compte" + #: src/features/auth/flow/instance_selector/InstancePickerRows.tsx:267 msgid "Use a self-hosted instance URL" msgstr "Utiliser une URL d'instance auto-hébergée" @@ -39296,10 +39387,6 @@ msgstr "Vérifiez votre adresse e-mail pour acheter {premiumProductFullName}." msgid "Verify your email to start DMs." msgstr "Vérifiez votre adresse e-mail pour démarrer des conversations privées." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:142 -msgid "Verifying code…" -msgstr "Vérification du code…" - #: src/features/auth/components/pages/ResetPasswordPage.tsx:145 msgid "Verifying your reset link…" msgstr "Vérification de votre lien de réinitialisation…" @@ -40073,10 +40160,6 @@ msgstr "Attendez un instant avant de supprimer d'autres messages." msgid "Wait between messages. Members with \"{bypassSlowmodePermissionLabel}\" can bypass this." msgstr "Attendre entre les messages. Les membres disposant de la permission « {bypassSlowmodePermissionLabel} » peuvent ignorer ce délai." -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:445 -msgid "Waiting for browser approval." -msgstr "En attente d'approbation du navigateur." - #. Tooltip explaining that video / screen share controls are gated while the voice connection is not yet ready. #: src/features/voice/components/voice_connection_status/LocalParticipantControls.tsx:45 msgid "Waiting for connection..." @@ -40118,10 +40201,6 @@ msgstr "Sortie de veille" msgid "Warning" msgstr "Attention" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:158 -msgid "Was this you?" -msgstr "Est-ce bien vous ?" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:243 msgctxt "us-state" @@ -40959,10 +41038,6 @@ msgstr "Vous avez déjà l'abonnement à vie {premiumProductName}" msgid "You already have this connection." msgstr "Vous avez déjà cette connexion." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:87 -msgid "You are about to authorize an app to sign in to your account. Only continue if you initiated this request from a device you control." -msgstr "Vous êtes sur le point d'autoriser une application à se connecter à votre compte. Ne continuez que si vous avez initié cette demande depuis un appareil que vous contrôlez." - #. External link warning title. productName is the Fluxer product name. #: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:22 msgid "You are about to leave {productName}" @@ -41732,6 +41807,11 @@ msgstr "Vous bénéficiez d’un ancien tarif. Le prix actuel de ce forfait est msgid "You're sending messages too quickly" msgstr "Vous envoyez des messages trop rapidement" +#. Title of the browser page after the user approved signing in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:282 +msgid "You're signed in" +msgstr "Vous êtes connecté" + #. Status text on the screen-share hover popout shown to the local streamer. Lightly playful tone. #: src/features/voice/components/StreamWatchHoverPopout.tsx:43 msgid "You're streaming!" diff --git a/fluxer_app/src/features/i18n/locales/he/messages.po b/fluxer_app/src/features/i18n/locales/he/messages.po index a289a308c..bc9f098cc 100644 --- a/fluxer_app/src/features/i18n/locales/he/messages.po +++ b/fluxer_app/src/features/i18n/locales/he/messages.po @@ -1573,7 +1573,7 @@ msgid "{imageCount, plural, one {# image} other {# images}}, {videoCount, plural msgstr "{imageCount, plural, one {# תמונה} other {# תמונות}}, {videoCount, plural, one {# סרטון} other {# סרטונים}}" #. Explanation shown when the selected instance advertises no web app endpoint. Instance name is interpolated. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:76 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:61 msgid "{instanceName} does not publish a web address, so sign-in cannot be handed to a browser." msgstr "{instanceName} לא מפרסם כתובת אינטרנט, ולכן לא ניתן להעביר את הכניסה לדפדפן." @@ -2777,14 +2777,6 @@ msgstr "תצוגה מקדימה של קישור או הטמעה עשירה (לא msgid "A separate profile for each community" msgstr "פרופיל נפרד לכל קהילה" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:164 -msgid "A sign-in request was made for your account. Only approve if you initiated it." -msgstr "התקבלה בקשת התחברות לחשבונך. אשר רק אם יזמת אותה בעצמך." - -#: src/features/auth/flow/HandoffApprovalFlow.tsx:162 -msgid "A sign-in request was made from the following device. Only approve if you recognize it." -msgstr "התקבלה בקשת התחברות מהמכשיר הבא. אשר רק אם אתה מזהה אותו." - #. Description for has:sticker. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:51 msgid "a sticker" @@ -4811,10 +4803,6 @@ msgstr "החל על כל הקהילות" msgid "Approval required" msgstr "אישור נדרש" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:206 -msgid "Approve" -msgstr "אשר" - #. Hint under the sign-in option on fluxer.com that pairs a newly installed app with the old installed app. productName is the app name. #: src/features/auth/flow/AuthLoginLayout.tsx:101 msgid "Approve this app from the {productName} app you already use. No password needed." @@ -7873,6 +7861,11 @@ msgstr "בודק גישה..." msgid "Checking screen recording permission..." msgstr "בודק הרשאת הקלטת מסך..." +#. Title while the browser looks up the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:224 +msgid "Checking the sign-in request…" +msgstr "בודק את בקשת הכניסה..." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -8847,6 +8840,11 @@ msgstr "בלוקי קוד" msgid "Code expired" msgstr "פג תוקף הקוד" +#. Label of the field in the browser where the user types the 12-character code shown in the desktop or mobile app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:28 +msgid "Code from the {productName} app" +msgstr "קוד מתוך אפליקציית {productName}" + #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 @@ -9348,7 +9346,6 @@ msgstr "להסתיר לחלוטין את התג של {premiumProductName} ממש #: src/features/auth/components/pages/SsoCallbackPage.tsx:256 #: src/features/auth/components/pages/SsoCallbackPage.tsx:322 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:216 msgid "Completing sign-in…" msgstr "משלימים את ההתחברות…" @@ -9782,7 +9779,6 @@ msgstr "ניתן לפתוח תפריטי הקשר בלחיצה שמאלית (ע #: src/features/auth/components/modals/DeviceRevokeModal.tsx:77 #: src/features/auth/components/modals/PasskeyPinModal.tsx:111 #: src/features/auth/components/pages/oauth_authorize_page/OAuthAccountStep.tsx:36 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/connection/components/modals/AddConnectionModal.tsx:384 #: src/features/i18n/utils/CommonMessageDescriptors.ts:726 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:413 @@ -9790,6 +9786,11 @@ msgstr "ניתן לפתוח תפריטי הקשר בלחיצה שמאלית (ע msgid "Continue" msgstr "המשך" +#. Title in the desktop app while it waits for the user to sign in on the browser page it opened. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:177 +msgid "Continue in your browser" +msgstr "המשך בדפדפן שלך" + #. Button in the gift time confirmation that proceeds to subscription checkout. #: src/features/app/components/dialogs/components/plutonium/hooks/useCheckoutActions.tsx:145 msgid "Continue to checkout" @@ -10437,7 +10438,7 @@ msgid "Couldn't close DM" msgstr "לא ניתן היה לסגור את הצ'אט" #. Desktop handoff flow error shown when finalizing the sign-in fails after a valid code. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:21 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:34 msgid "Couldn't complete sign-in. Try again." msgstr "ההתחברות לא הושלמה. יש לנסות שוב." @@ -10831,6 +10832,11 @@ msgstr "לא ניתן היה להתחיל את ההרשאה עבור {blueskyPro msgid "Couldn't start checkout" msgstr "לא ניתן להתחיל את התשלום" +#. Shown in the desktop app when the browser sign-in request could not be created. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:66 +msgid "Couldn't start signing in with your browser." +msgstr "לא ניתן היה להתחיל בכניסה דרך הדפדפן שלך." + #. Toast error shown when creating a new account connection fails. #: src/features/connection/commands/ConnectionCommands.ts:27 msgid "Couldn't start the connection" @@ -10942,7 +10948,7 @@ msgid "Couldn't upload banner" msgstr "לא ניתן היה להעלות את הבאנר" #. Desktop handoff flow error shown when verifying the pairing code fails for an unexpected reason. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:17 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:30 msgid "Couldn't verify that code. Try again." msgstr "לא הצלחנו לאמת את הקוד הזה. יש לנסות שוב." @@ -12503,7 +12509,6 @@ msgstr "פריסה דחוסה" #. Short label in the settings dialog permission components. Keep the tone plain and specific. #: src/features/app/components/dialogs/shared/PermissionComponents.tsx:16 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:203 msgid "Deny" msgstr "דחייה" @@ -14910,15 +14915,16 @@ msgstr "הזן את הקוד בן {digitCount} הספרות מאפליקציית msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "הזן את הקוד בן {digitCount} הספרות מאפליקציית האימות שלך." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:108 -msgid "Enter the code" -msgstr "הזן את הקוד" - #. Inline validation error on the verification step of the DSA report flow when the code field is empty. #: src/features/moderation/components/pages/ReportPage.tsx:74 msgid "Enter the code before continuing." msgstr "הזן את הקוד לפני שתמשיך." +#. Title of the browser page where the user types the 12-character code the app shows under Signing in on another device. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +msgid "Enter the code from the {PRODUCT_NAME} app" +msgstr "הזן את הקוד מאפליקציית {PRODUCT_NAME}" + #. Body text in the authentication sudo verification modal. Keep the tone plain and specific. #: src/features/auth/components/modals/SudoVerificationModal.tsx:56 msgid "Enter the code from your authenticator app." @@ -14933,10 +14939,6 @@ msgstr "הזן את הקוד שנשלח לאימייל הנוכחי שלך." msgid "Enter the code sent to your email address." msgstr "הזן את הקוד שנשלח לכתובת האימייל שלך." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:111 -msgid "Enter the code shown in the app to continue." -msgstr "הזן את הקוד שמופיע באפליקציה כדי להמשיך." - #: src/features/user/components/modals/BouncedEmailChangeModal.tsx:157 #: src/features/user/components/modals/EmailChangeModal.tsx:244 msgid "Enter the code we emailed to your new address." @@ -14959,6 +14961,11 @@ msgstr "הזן את כתובת האימייל החדשה שבה תרצה להש msgid "Enter the PIN for your security key to continue." msgstr "הזן את ה-PIN של מפתח האבטחה שלך כדי להמשיך." +#. Title in the desktop app above the code the user types into a browser on another device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:228 +msgid "Enter this code in your browser" +msgstr "הזן את הקוד הזה בדפדפן שלך" + #: src/features/auth/flow/HandoffCodeDisplay.tsx:132 msgid "Enter this code in your browser to complete sign-in." msgstr "הזן קוד זה בדפדפן שלך כדי להשלים את הכניסה." @@ -15362,7 +15369,7 @@ msgstr "יפוג בין {earliest} ל-{latest}" msgid "Expires in {remaining}s" msgstr "יפוג בעוד {remaining} שנ'" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:374 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:250 msgid "Expires in {remainingSeconds}s" msgstr "פג תוקף בעוד {remainingSeconds} שניות" @@ -16165,7 +16172,7 @@ msgid "Fluxer" msgstr "Fluxer" #. Status shown when browser sign-in status polling gives up after repeated failures. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:72 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:57 msgid "Fluxer stopped checking whether the browser approved this sign-in. It didn't lose your code." msgstr "Fluxer הפסיק לבדוק אם הדפדפן אישר את הכניסה הזו. הוא לא איבד את הקוד שלך." @@ -16952,8 +16959,6 @@ msgstr "יצירת קישור שניתן לשיתוף או העתקת קוד ה- msgid "Generate invite link" msgstr "יצירת קישור הזמנה" -#. Button label that replaces an expired browser sign-in code with a fresh one. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:64 #: src/features/auth/flow/HandoffCodeDisplay.tsx:117 msgid "Generate new code" msgstr "יצירת קוד חדש" @@ -17348,6 +17353,16 @@ msgstr "חזור והזן אימייל תקין." msgid "Go back to {productName} to continue." msgstr "חזור אל {productName} כדי להמשיך." +#. Shown after approving a sign-in for an app on another device, which signs in by itself shortly. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:292 +msgid "Go back to the {PRODUCT_NAME} app. It finishes signing in on its own." +msgstr "חזור לאפליקציית {PRODUCT_NAME}. היא תסיים את הכניסה בעצמה." + +#. Shown after approving, when the browser has already handed the sign-in back to the desktop app. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:288 +msgid "Go back to the {PRODUCT_NAME} app. You can close this tab." +msgstr "חזור לאפליקציית {PRODUCT_NAME}. אפשר לסגור את הלשונית הזו." + #. Accessible label for the community row of an expression info card, which opens a community the viewer is already a member of. {communityName} is the community name. #: src/features/expressions/components/ExpressionInfoCard.tsx:89 msgid "Go to {communityName}" @@ -19295,11 +19310,6 @@ msgstr "JSON לא תקין. הדבק את התגובה המלאה מהכתובת msgid "Invalid or expired code" msgstr "קוד שגוי או שפג תוקפו" -#. Desktop handoff flow error shown when the entered pairing code is invalid or expired. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:13 -msgid "Invalid or expired code. Try again." -msgstr "קוד שגוי או שפג תוקפו. נסה שוב." - #. Short label in the authentication authorize flow. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/state/useAuthorizeFlow.ts:82 msgid "Invalid redirect_uri" @@ -20876,7 +20886,7 @@ msgstr "פורמט שעה מקומי" msgid "Localization" msgstr "לוקליזציה" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:192 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:109 #: src/features/user/components/modals/tabs/DevicesTab.tsx:152 msgid "Location" msgstr "מיקום" @@ -21034,6 +21044,11 @@ msgstr "להפוך את {userName} לבעל הקבוצה? תאבד את הרשא msgid "Make group owner" msgstr "הפוך לבעל הקבוצה" +#. Shown above the code on the browser approval page when the app cannot be signed in automatically. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:253 +msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." +msgstr "ודא שקוד זה תואם לזה שביישום {PRODUCT_NAME}." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" @@ -24668,6 +24683,11 @@ msgstr "ב-<0>{listPriceEffectiveDate} המנוי שלך יעבור מ-{list msgid "On click" msgstr "בלחיצה" +#. One line explanation in the desktop app above the code. signInAddress is the web address of the sign-in page, such as web.fluxer.app/login?handoff=1. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:236 +msgid "On your other device, sign in at {signInAddress} and enter this code when asked." +msgstr "במכשיר אחר, היכנס ל- {signInAddress} והזן את הקוד הזה כשתידרש." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:715 msgid "Once deleted, the application and its credentials are permanently removed." msgstr "לאחר המחיקה, האפליקציה ופרטי הגישה שלה יוסרו לצמיתות." @@ -24733,6 +24753,11 @@ msgstr "רק אזכורים" msgid "Only applies on wide screens." msgstr "חל רק על מסכים רחבים." +#. Warning under the title of the browser approval page, so people do not approve a sign-in someone else started. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:245 +msgid "Only continue if you started this sign-in on a device you control." +msgstr "המשך רק אם התחלת את הכניסה הזו במכשיר שבשליטתך." + #. Body copy in the mature content check modal. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:32 msgid "Only credit cards are accepted. Debit and prepaid cards cannot be used for the mature content check." @@ -24921,6 +24946,11 @@ msgstr "פתח את {landmarkName}" msgid "Open {premiumProductFullName}" msgstr "פתח את {premiumProductFullName}" +#. Button on the browser page after approving that opens the desktop app again if it did not come to the front. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:304 +msgid "Open {PRODUCT_NAME}" +msgstr "פתח את {PRODUCT_NAME}" + #. Button label that opens the desktop app. productName is the app name. #. Button that hands SSO sign-in back to the mobile app. productName is the app name. #: src/features/auth/components/pages/SsoCallbackPage.tsx:47 @@ -25011,12 +25041,15 @@ msgstr "פתיחת אפשרויות באנר" msgid "Open bookmarks" msgstr "פתיחת סימניות" -#. Button label that opens the browser sign-in handoff page. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:56 #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:184 msgid "Open browser" msgstr "פתח דפדפן" +#. Button in the desktop app that reopens the browser sign-in page while the app waits for the browser. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:53 +msgid "Open browser again" +msgstr "פתח שוב את הדפדפן" + #. Primary button in the screen-share picker on web. Hands off to the browser's native getDisplayMedia picker. #: src/features/voice/components/modals/ScreenSharePickerModal.tsx:209 msgid "Open browser picker" @@ -25392,10 +25425,6 @@ msgstr "פתיחת הגדרות שמע ווידאו" msgid "Open with {accountName} on {instanceName}" msgstr "פתח עם {accountName} ב-{instanceName}" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:414 -msgid "Open your browser to finish signing in." -msgstr "פתח את הדפדפן שלך כדי לסיים את הכניסה." - #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:137 msgid "Open your browser, sign in, then enter the code below to link your account." msgstr "פתח את הדפדפן שלך, היכנס, ואז הזן את הקוד למטה כדי לקשר את חשבונך." @@ -25421,7 +25450,7 @@ msgstr "פותח את דף החברים. לחץ על מקש רווח או Enter #. Short label in the language tab. Keep it concise. #. Spellcheck engine option in the textarea spellcheck submenu. Uses the host operating system spellchecker. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:79 #: src/features/user/components/modals/tabs/LanguageTab.tsx:110 msgid "Operating system" @@ -26439,7 +26468,7 @@ msgstr "מסלול" msgid "Plans, perks, gifts and your subscription all live on one page." msgstr "תוכניות, הטבות, מתנות והמנוי שלך נמצאים כולם בדף אחד." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:172 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:89 msgid "Platform" msgstr "פלטפורמה" @@ -31859,11 +31888,6 @@ msgstr "הצגת צ'אט" msgid "Show chat with {count, plural, one {# unread message} other {# unread messages}}" msgstr "הצג צ'אט עם {count, plural, one {# הודעה שלא נקראה} other {# הודעות שלא נקראו}}" -#. Button label that opens the manual browser handoff code fallback. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:60 -msgid "Show code" -msgstr "הצג קוד" - #. Developer voice status menu option for displaying the voice connection identifier. #: src/features/voice/components/voice_connection_status/VoiceConnectionStatusInner.tsx:76 msgid "Show connection ID" @@ -32306,7 +32330,9 @@ msgstr "מציג את הבאנר במקטע משלו מתחת לכותרת הק msgid "Sidebar" msgstr "סרגל צד" +#. Button in the browser that approves signing in to the desktop or mobile app that asked for it. #. Generic authentication action label. Use for buttons, links, page titles, and accessible labels. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:33 #: src/features/i18n/utils/CommonMessageDescriptors.ts:79 msgid "Sign in" msgstr "התחבר" @@ -32321,10 +32347,35 @@ msgstr "התחבר/י שוב" msgid "Sign in again as {accountLabel}" msgstr "התחבר שוב בתור {accountLabel}" +#. Shown in the desktop app while it waits for the browser. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:193 +msgid "Sign in to {instanceName} in your browser and confirm. This app finishes signing in on its own." +msgstr "התחבר ל-{instanceName} בדפדפן שלך ואשר. האפליקציה הזו תסיים את ההתחברות בעצמה." + +#. Shown in the desktop app above the code when the browser cannot return the sign-in automatically. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:189 +msgid "Sign in to {instanceName} in your browser, and check that it shows this code:" +msgstr "התחבר ל-{instanceName} בדפדפן שלך, וודא שהוא מציג את הקוד הזה:" + #: src/features/auth/flow/GiftHeader.tsx:33 msgid "Sign in to claim your gift" msgstr "היכנס כדי לקבל את המתנה שלך" +#. Title of the browser page where the user approves signing in to an app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:71 +msgid "Sign in to the {PRODUCT_NAME} app" +msgstr "התחבר לאפליקציית {PRODUCT_NAME}" + +#. Title of the browser page where the user approves signing in to the desktop app that opened it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:58 +msgid "Sign in to the {PRODUCT_NAME} desktop app" +msgstr "התחבר לאפליקציית שולחן העבודה של {PRODUCT_NAME}" + +#. Title of the browser page where the user approves signing in to the mobile app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:65 +msgid "Sign in to the {PRODUCT_NAME} mobile app" +msgstr "התחבר לאפליקציית {PRODUCT_NAME} לנייד" + #. Action label that starts passkey authentication. #: src/features/auth/AuthMessageDescriptors.ts:13 msgid "Sign in with a passkey" @@ -32403,14 +32454,10 @@ msgstr "התנתקות ממכשירים אחרים בחשבון שלך" msgid "Sign out?" msgstr "להתנתק?" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:234 -msgid "Sign-in approved" -msgstr "הכניסה אושרה" - -#. Short label in the authentication handoff approval flow. Keep the tone plain and specific. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:26 -msgid "Sign-in code" -msgstr "קוד כניסה" +#. Title of the browser page after the user cancelled the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:322 +msgid "Sign-in cancelled" +msgstr "הכניסה בוטלה" #. Section title for email address and password controls in the account security tab. Keep it concise. #: src/features/user/components/modals/tabs/account_security_tab/AccountSecuritySections.tsx:23 @@ -32433,10 +32480,6 @@ msgstr "תהליך ההתחברות" msgid "Sign-in method" msgstr "שיטת כניסה" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:84 -msgid "Sign-in request" -msgstr "בקשת התחברות" - #. Aria label on the signal-strength icon shown while the first latency sample is still pending. #: src/features/voice/components/SignalStrengthIcon.tsx:16 msgid "Signal strength loading" @@ -32453,6 +32496,21 @@ msgstr "מחובר" msgid "Signed-in devices" msgstr "מכשירים מחוברים" +#. Shown on the browser approval page above the buttons. name is the display name of the account that will be signed in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:137 +msgid "Signing in as {name}" +msgstr "נכנסים כ- {name}" + +#. Text button in the desktop app that shows a code to type into a browser on a different device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:207 +msgid "Signing in on another device?" +msgstr "נכנסים ממכשיר אחר?" + +#. Title while the browser approves the sign-in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:228 +msgid "Signing in…" +msgstr "נכנסים לחשבון…" + #. Label for Bluesky OAuth signing key ID input. #: src/features/app/components/setup/SetupWizardSteps.tsx:1161 msgid "Signing key ID" @@ -33504,6 +33562,8 @@ msgstr "התחל בדיקת מיקרופון" msgid "Start minimized" msgstr "התחל ממוזער" +#. Button on the browser page after cancelling that goes back to choosing an account. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:337 #: src/features/moderation/components/report/ReportStepDetails.tsx:326 #: src/features/moderation/components/report/ReportStepEmail.tsx:97 #: src/features/moderation/components/report/ReportStepVerification.tsx:134 @@ -34910,6 +34970,11 @@ msgstr "תאילנדית" msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "תודה שעזרת לשמור על הבטיחות ב-{productName}. נבדוק את הדיווח שלך בהקדם האפשרי." +#. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 +msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." +msgstr "הקוד הזה אינו חוקי ב-{instanceHost}. בדוק את הקוד באפליקציית {productName} ונסה שוב." + #. Body of the passkey page after the passkey prompt failed or was dismissed. Keep plain. #: src/features/auth/passkey_migration/PasskeyBridgePage.tsx:36 msgid "That didn't work. Try again or cancel." @@ -34953,11 +35018,6 @@ msgstr "לא ניתן היה למחוק את ההודעה הזו" msgid "That message is gone, or you lost access to the conversation." msgstr "ההודעה הזו כבר לא קיימת, או שאיבדת גישה לשיחה." -#. Error shown when a browser sign-in handoff code expires before it is approved. -#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 -msgid "That sign-in code expired. Try again." -msgstr "קוד הכניסה הזה פג. נסה שוב." - #. End-of-list line in the saved messages popout after every bookmark has been shown. #. End-of-list line on the saved messages page after every bookmark has been shown. #: src/features/messaging/components/pages/SavedMessagesPage.tsx:35 @@ -34965,6 +35025,21 @@ msgstr "קוד הכניסה הזה פג. נסה שוב." msgid "That's all of them." msgstr "זה הכל." +#. Warning on the browser approval page when the app asked for a different account than the one chosen. requestedIdentifier is the email or username the app asked for, name is the chosen account's display name. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:131 +msgid "The {PRODUCT_NAME} app asked to sign in as {requestedIdentifier}, but you chose {name}." +msgstr "האפליקציה {PRODUCT_NAME} ביקשה להתחבר כ-{requestedIdentifier}, אבל בחרת ב-{name}." + +#. Explains where the code comes from, under the title of the browser page where it is typed. Signing in on another device is the label of a button in the app and must match its translation. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:187 +msgid "The {PRODUCT_NAME} app on your other device shows it under Signing in on another device. Only enter a code from a device you control." +msgstr "האפליקציה {PRODUCT_NAME} במכשיר אחר שלך מציגה זאת תחת \"נכנסים ממכשיר אחר\". הזן קוד רק ממכשיר שאתה שולט בו." + +#. Shown after the user cancelled the sign-in request in the browser. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:327 +msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." +msgstr "האפליקציה {PRODUCT_NAME} לא נכנסה לחשבון. אפשר לסגור את הלשונית הזו." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -34983,10 +35058,6 @@ msgstr "האפליקציה קרסה" msgid "The app has crashed. Checking for updates that might fix this issue…" msgstr "האפליקציה קרסה. בודקים אם יש עדכונים שעשויים לפתור את הבעיה…" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:237 -msgid "The app should now be signed in to your account." -msgstr "האפליקציה אמורה להיות מחוברת כעת לחשבון שלך." - #. Activity log detail line under a lifted ban, for a temporary ban that had already ended on its own before it was lifted. A ban is the community ban, not the feature that blocks a user. {date} is when the ban ended, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:55 msgid "The ban had already expired on {date}" @@ -35184,6 +35255,16 @@ msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "מקור שיתוף המסך הפסיק לשלוח וידאו, ולכן שיתוף המסך שלך הופסק." +#. Error shown in the desktop app when a browser sign-in request expires before it is approved in the browser. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 +msgid "The sign-in request expired before your browser approved it." +msgstr "בקשת הכניסה פגה לפני שהדפדפן שלך אישר אותה." + +#. Error shown in the desktop app when the user pressed Cancel on the browser sign-in page. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:14 +msgid "The sign-in was cancelled in your browser." +msgstr "הכניסה לדפדפן בוטלה." + #. Activity log detail line under a deleted sticker, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the sticker, shown as a clickable user chip. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts:100 msgid "The sticker was uploaded by {user}" @@ -35408,6 +35489,11 @@ msgstr "צד שלישי" msgid "This account can't be blocked." msgstr "לא ניתן לחסום חשבון זה." +#. Error in the browser when the chosen account belongs to a different server than the app that asked to sign in. accountHost and requestHost are server addresses. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:38 +msgid "This account is on {accountHost}, but the {productName} app is signing in to {requestHost}. Choose an account on {requestHost}." +msgstr "החשבון הזה נמצא ב-{accountHost}, אבל האפליקציה {productName} נכנסת ל-{requestHost}. בחר חשבון מ-{requestHost}." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:418 msgid "This action cannot be undone. All associated data, including the bot user, will be permanently deleted." msgstr "לא ניתן לבטל פעולה זו. כל הנתונים המשויכים, כולל משתמש הבוט, יימחקו לצמיתות." @@ -35551,11 +35637,6 @@ msgstr "פעולה זו מנקה לחלוטין את מצב הפרימיום ש msgid "This code doesn't exist." msgstr "הקוד הזה לא קיים." -#. Status shown under the browser sign-in code once its countdown reaches zero. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:68 -msgid "This code expired." -msgstr "הקוד הזה פג תוקף." - #. Gift redemption error modal body for an invalid or already used code. #: src/features/gift/commands/GiftCommands.tsx:37 msgid "This code is invalid or already used." @@ -36075,6 +36156,11 @@ msgstr "תוקף קישור האיפוס הזה פג. קישורי איפוס ת msgid "This shows how links appear: {linkPreviewExampleUrl}" msgstr "כך נראים קישורים: {linkPreviewExampleUrl}" +#. Error in the browser when the sign-in request from the desktop app no longer exists, because it expired or the app cancelled it. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:20 +msgid "This sign-in request expired or was cancelled in the {productName} app. Start again from the app." +msgstr "בקשת הכניסה הזו פגה או בוטלה באפליקציית {productName}. נסה שוב מהאפליקציה." + #. Label above the community a sticker comes from in the sticker info card. #: src/features/expressions/components/ExpressionInfoCard.tsx:75 msgid "This sticker is from" @@ -38520,6 +38606,11 @@ msgstr "השתמש ב-{url} במקום שבו תוכנס כתובת ה-URL של msgid "Use a dedicated modal to set a message history threshold date for members who don't have the {readMessageHistoryPermissionLabel} permission." msgstr "השתמש בחלון ייעודי כדי לקבוע תאריך סף להיסטוריית ההודעות עבור חברים שאין להם את ההרשאה {readMessageHistoryPermissionLabel}." +#. Text button on the browser approval page that goes back to choosing which account signs in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:149 +msgid "Use a different account" +msgstr "השתמש בחשבון אחר" + #: src/features/auth/flow/instance_selector/InstancePickerRows.tsx:267 msgid "Use a self-hosted instance URL" msgstr "השתמש בכתובת URL של מופע שאוחסן באופן עצמאי" @@ -39296,10 +39387,6 @@ msgstr "אמת את האימייל שלך כדי לרכוש את {premiumProduct msgid "Verify your email to start DMs." msgstr "יש לאמת את כתובת האימייל שלך כדי להתחיל בצ'אטים פרטיים." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:142 -msgid "Verifying code…" -msgstr "מאמת קוד…" - #: src/features/auth/components/pages/ResetPasswordPage.tsx:145 msgid "Verifying your reset link…" msgstr "מאמת את קישור האיפוס שלך…" @@ -40073,10 +40160,6 @@ msgstr "המתן רגע לפני מחיקת הודעות נוספות." msgid "Wait between messages. Members with \"{bypassSlowmodePermissionLabel}\" can bypass this." msgstr "המתנה בין הודעות. חברים עם ההרשאה \"{bypassSlowmodePermissionLabel}\" יכולים לעקוף זאת." -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:445 -msgid "Waiting for browser approval." -msgstr "ממתינים לאישור הדפדפן." - #. Tooltip explaining that video / screen share controls are gated while the voice connection is not yet ready. #: src/features/voice/components/voice_connection_status/LocalParticipantControls.tsx:45 msgid "Waiting for connection..." @@ -40118,10 +40201,6 @@ msgstr "התעוררות" msgid "Warning" msgstr "אזהרה" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:158 -msgid "Was this you?" -msgstr "האם זה היית אתה?" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:243 msgctxt "us-state" @@ -40959,10 +41038,6 @@ msgstr "כבר יש לך {premiumProductName} לכל החיים" msgid "You already have this connection." msgstr "חיבור זה כבר קיים אצלך." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:87 -msgid "You are about to authorize an app to sign in to your account. Only continue if you initiated this request from a device you control." -msgstr "אתה עומד לאשר לאפליקציה להיכנס לחשבונך. המשך רק אם יזמת בקשה זו ממכשיר שבשליטתך." - #. External link warning title. productName is the Fluxer product name. #: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:22 msgid "You are about to leave {productName}" @@ -41732,6 +41807,11 @@ msgstr "אתה משתמש בתעריף מדור קודם. המחיר הנוכח msgid "You're sending messages too quickly" msgstr "אתה שולח הודעות מהר מדי" +#. Title of the browser page after the user approved signing in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:282 +msgid "You're signed in" +msgstr "נכנסת בהצלחה" + #. Status text on the screen-share hover popout shown to the local streamer. Lightly playful tone. #: src/features/voice/components/StreamWatchHoverPopout.tsx:43 msgid "You're streaming!" diff --git a/fluxer_app/src/features/i18n/locales/hi/messages.po b/fluxer_app/src/features/i18n/locales/hi/messages.po index 8f02462c4..b6a232e54 100644 --- a/fluxer_app/src/features/i18n/locales/hi/messages.po +++ b/fluxer_app/src/features/i18n/locales/hi/messages.po @@ -1573,7 +1573,7 @@ msgid "{imageCount, plural, one {# image} other {# images}}, {videoCount, plural msgstr "{imageCount, plural, one {# इमेज} other {# इमेज}}, {videoCount, plural, one {# वीडियो} other {# वीडियो}}" #. Explanation shown when the selected instance advertises no web app endpoint. Instance name is interpolated. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:76 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:61 msgid "{instanceName} does not publish a web address, so sign-in cannot be handed to a browser." msgstr "{instanceName} कोई वेब पता प्रकाशित नहीं करता है, इसलिए साइन-इन को ब्राउज़र को नहीं सौंपा जा सकता है।" @@ -2777,14 +2777,6 @@ msgstr "एक रिच एम्बेड या लिंक प्रीव msgid "A separate profile for each community" msgstr "हर समुदाय के लिए एक अलग प्रोफ़ाइल" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:164 -msgid "A sign-in request was made for your account. Only approve if you initiated it." -msgstr "आपके अकाउंट के लिए साइन-इन का अनुरोध किया गया था। मंज़ूरी तभी दें जब यह अनुरोध आपने किया हो।" - -#: src/features/auth/flow/HandoffApprovalFlow.tsx:162 -msgid "A sign-in request was made from the following device. Only approve if you recognize it." -msgstr "नीचे दिए गए डिवाइस से साइन-इन का अनुरोध किया गया था। मंज़ूरी तभी दें जब आप इसे पहचानते हों।" - #. Description for has:sticker. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:51 msgid "a sticker" @@ -4811,10 +4803,6 @@ msgstr "सभी कम्युनिटी पर लागू करें" msgid "Approval required" msgstr "मंज़ूरी ज़रूरी" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:206 -msgid "Approve" -msgstr "स्वीकृत करें" - #. Hint under the sign-in option on fluxer.com that pairs a newly installed app with the old installed app. productName is the app name. #: src/features/auth/flow/AuthLoginLayout.tsx:101 msgid "Approve this app from the {productName} app you already use. No password needed." @@ -7873,6 +7861,11 @@ msgstr "एक्सेस जाँचा जा रहा है..." msgid "Checking screen recording permission..." msgstr "स्क्रीन रिकॉर्डिंग अनुमति की जाँच की जा रही है..." +#. Title while the browser looks up the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:224 +msgid "Checking the sign-in request…" +msgstr "साइन-इन अनुरोध की जाँच हो रही है…" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -8847,6 +8840,11 @@ msgstr "कोड ब्लॉक" msgid "Code expired" msgstr "कोड की समय-सीमा समाप्त हो गई" +#. Label of the field in the browser where the user types the 12-character code shown in the desktop or mobile app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:28 +msgid "Code from the {productName} app" +msgstr "{productName} ऐप से कोड" + #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 @@ -9348,7 +9346,6 @@ msgstr "अपने {premiumProductName} बैज को दूसरे य #: src/features/auth/components/pages/SsoCallbackPage.tsx:256 #: src/features/auth/components/pages/SsoCallbackPage.tsx:322 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:216 msgid "Completing sign-in…" msgstr "साइन-इन पूरा हो रहा है…" @@ -9782,7 +9779,6 @@ msgstr "कॉन्टेक्स्ट मेन्यू को लेफ् #: src/features/auth/components/modals/DeviceRevokeModal.tsx:77 #: src/features/auth/components/modals/PasskeyPinModal.tsx:111 #: src/features/auth/components/pages/oauth_authorize_page/OAuthAccountStep.tsx:36 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/connection/components/modals/AddConnectionModal.tsx:384 #: src/features/i18n/utils/CommonMessageDescriptors.ts:726 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:413 @@ -9790,6 +9786,11 @@ msgstr "कॉन्टेक्स्ट मेन्यू को लेफ् msgid "Continue" msgstr "जारी रखें" +#. Title in the desktop app while it waits for the user to sign in on the browser page it opened. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:177 +msgid "Continue in your browser" +msgstr "अपने ब्राउज़र में जारी रखें" + #. Button in the gift time confirmation that proceeds to subscription checkout. #: src/features/app/components/dialogs/components/plutonium/hooks/useCheckoutActions.tsx:145 msgid "Continue to checkout" @@ -10437,7 +10438,7 @@ msgid "Couldn't close DM" msgstr "DM बंद नहीं कर पाए" #. Desktop handoff flow error shown when finalizing the sign-in fails after a valid code. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:21 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:34 msgid "Couldn't complete sign-in. Try again." msgstr "साइन-इन पूरा नहीं हो सका। फिर से कोशिश करें।" @@ -10831,6 +10832,11 @@ msgstr "{blueskyProviderName} ऑथराइज़ेशन शुरू नह msgid "Couldn't start checkout" msgstr "चेकआउट शुरू नहीं किया जा सका" +#. Shown in the desktop app when the browser sign-in request could not be created. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:66 +msgid "Couldn't start signing in with your browser." +msgstr "आपके ब्राउज़र से साइन इन शुरू नहीं हो सका।" + #. Toast error shown when creating a new account connection fails. #: src/features/connection/commands/ConnectionCommands.ts:27 msgid "Couldn't start the connection" @@ -10942,7 +10948,7 @@ msgid "Couldn't upload banner" msgstr "बैनर अपलोड नहीं किया जा सका" #. Desktop handoff flow error shown when verifying the pairing code fails for an unexpected reason. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:17 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:30 msgid "Couldn't verify that code. Try again." msgstr "उस कोड को सत्यापित नहीं किया जा सका। फिर से कोशिश करें।" @@ -12503,7 +12509,6 @@ msgstr "सघन लेआउट" #. Short label in the settings dialog permission components. Keep the tone plain and specific. #: src/features/app/components/dialogs/shared/PermissionComponents.tsx:16 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:203 msgid "Deny" msgstr "अस्वीकार करें" @@ -14910,15 +14915,16 @@ msgstr "अपने ऑथेंटिकेटर ऐप से {digitCount} msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "अपने ऑथेंटिकेटर ऐप से {digitCount} अंकों वाला कोड डालें।" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:108 -msgid "Enter the code" -msgstr "कोड डालें" - #. Inline validation error on the verification step of the DSA report flow when the code field is empty. #: src/features/moderation/components/pages/ReportPage.tsx:74 msgid "Enter the code before continuing." msgstr "जारी रखने से पहले कोड डालें।" +#. Title of the browser page where the user types the 12-character code the app shows under Signing in on another device. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +msgid "Enter the code from the {PRODUCT_NAME} app" +msgstr "{PRODUCT_NAME} ऐप से कोड दर्ज करें" + #. Body text in the authentication sudo verification modal. Keep the tone plain and specific. #: src/features/auth/components/modals/SudoVerificationModal.tsx:56 msgid "Enter the code from your authenticator app." @@ -14933,10 +14939,6 @@ msgstr "आपके मौजूदा ईमेल पर भेजा गय msgid "Enter the code sent to your email address." msgstr "आपके ईमेल पते पर भेजा गया कोड डालें।" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:111 -msgid "Enter the code shown in the app to continue." -msgstr "जारी रखने के लिए ऐप में दिखाया गया कोड डालें।" - #: src/features/user/components/modals/BouncedEmailChangeModal.tsx:157 #: src/features/user/components/modals/EmailChangeModal.tsx:244 msgid "Enter the code we emailed to your new address." @@ -14959,6 +14961,11 @@ msgstr "वह नया ईमेल डालें जिसका आप उ msgid "Enter the PIN for your security key to continue." msgstr "जारी रखने के लिए अपनी सुरक्षा कुंजी का पिन डालें।" +#. Title in the desktop app above the code the user types into a browser on another device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:228 +msgid "Enter this code in your browser" +msgstr "अपने ब्राउज़र में यह कोड दर्ज करें" + #: src/features/auth/flow/HandoffCodeDisplay.tsx:132 msgid "Enter this code in your browser to complete sign-in." msgstr "साइन-इन पूरा करने के लिए अपने ब्राउज़र में यह कोड डालें।" @@ -15362,7 +15369,7 @@ msgstr "{earliest} और {latest} के बीच समाप्त होग msgid "Expires in {remaining}s" msgstr "{remaining} सेकंड में समाप्त होगा" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:374 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:250 msgid "Expires in {remainingSeconds}s" msgstr "{remainingSeconds}s में समाप्त हो रहा है" @@ -16165,7 +16172,7 @@ msgid "Fluxer" msgstr "Fluxer" #. Status shown when browser sign-in status polling gives up after repeated failures. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:72 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:57 msgid "Fluxer stopped checking whether the browser approved this sign-in. It didn't lose your code." msgstr "Fluxer ने यह जांचना बंद कर दिया कि ब्राउज़र ने इस साइन-इन को मंजूरी दी है या नहीं। इसने आपका कोड नहीं खोया है।" @@ -16952,8 +16959,6 @@ msgstr "शेयर करने लायक लिंक जनरेट क msgid "Generate invite link" msgstr "इनवाइट लिंक जनरेट करें" -#. Button label that replaces an expired browser sign-in code with a fresh one. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:64 #: src/features/auth/flow/HandoffCodeDisplay.tsx:117 msgid "Generate new code" msgstr "नया कोड जनरेट करें" @@ -17348,6 +17353,16 @@ msgstr "वापस जाएं और मान्य ईमेल पता msgid "Go back to {productName} to continue." msgstr "जारी रखने के लिए {productName} पर वापस जाएँ।" +#. Shown after approving a sign-in for an app on another device, which signs in by itself shortly. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:292 +msgid "Go back to the {PRODUCT_NAME} app. It finishes signing in on its own." +msgstr "{PRODUCT_NAME} ऐप पर वापस जाएं। यह अपने आप साइन इन हो जाएगा।" + +#. Shown after approving, when the browser has already handed the sign-in back to the desktop app. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:288 +msgid "Go back to the {PRODUCT_NAME} app. You can close this tab." +msgstr "{PRODUCT_NAME} ऐप पर वापस जाएं। आप इस टैब को बंद कर सकते हैं।" + #. Accessible label for the community row of an expression info card, which opens a community the viewer is already a member of. {communityName} is the community name. #: src/features/expressions/components/ExpressionInfoCard.tsx:89 msgid "Go to {communityName}" @@ -19295,11 +19310,6 @@ msgstr "अमान्य JSON। ऊपर दिए गए यूआरएल msgid "Invalid or expired code" msgstr "कोड अमान्य है या उसकी समय-सीमा समाप्त हो चुकी है" -#. Desktop handoff flow error shown when the entered pairing code is invalid or expired. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:13 -msgid "Invalid or expired code. Try again." -msgstr "कोड अमान्य है या उसकी समय-सीमा समाप्त हो चुकी है। फिर से कोशिश करें।" - #. Short label in the authentication authorize flow. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/state/useAuthorizeFlow.ts:82 msgid "Invalid redirect_uri" @@ -20876,7 +20886,7 @@ msgstr "स्थानीय समय फ़ॉर्मैट" msgid "Localization" msgstr "लोकलाइज़ेशन" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:192 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:109 #: src/features/user/components/modals/tabs/DevicesTab.tsx:152 msgid "Location" msgstr "जगह" @@ -21034,6 +21044,11 @@ msgstr "क्या आप {userName} को ग्रुप का माल msgid "Make group owner" msgstr "ग्रुप का मालिक बनाएं" +#. Shown above the code on the browser approval page when the app cannot be signed in automatically. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:253 +msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." +msgstr "सुनिश्चित करें कि यह कोड {PRODUCT_NAME} ऐप में मौजूद कोड से मेल खाता है।" + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" @@ -24668,6 +24683,11 @@ msgstr "<0>{listPriceEffectiveDate} को आपकी सदस्यत msgid "On click" msgstr "क्लिक करने पर" +#. One line explanation in the desktop app above the code. signInAddress is the web address of the sign-in page, such as web.fluxer.app/login?handoff=1. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:236 +msgid "On your other device, sign in at {signInAddress} and enter this code when asked." +msgstr "अपने दूसरे डिवाइस पर, {signInAddress} पर साइन इन करें और पूछे जाने पर यह कोड दर्ज करें।" + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:715 msgid "Once deleted, the application and its credentials are permanently removed." msgstr "एक बार डिलीट होने के बाद, ऐप्लिकेशन और उसके क्रेडेंशियल हमेशा के लिए हटा दिए जाते हैं।" @@ -24733,6 +24753,11 @@ msgstr "सिर्फ़ @उल्लेख" msgid "Only applies on wide screens." msgstr "केवल चौड़ी स्क्रीन पर लागू होता है।" +#. Warning under the title of the browser approval page, so people do not approve a sign-in someone else started. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:245 +msgid "Only continue if you started this sign-in on a device you control." +msgstr "तभी जारी रखें यदि आपने यह साइन-इन उस डिवाइस पर शुरू किया है जिसे आप नियंत्रित करते हैं।" + #. Body copy in the mature content check modal. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:32 msgid "Only credit cards are accepted. Debit and prepaid cards cannot be used for the mature content check." @@ -24921,6 +24946,11 @@ msgstr "{landmarkName} खोलें" msgid "Open {premiumProductFullName}" msgstr "{premiumProductFullName} खोलें" +#. Button on the browser page after approving that opens the desktop app again if it did not come to the front. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:304 +msgid "Open {PRODUCT_NAME}" +msgstr "{PRODUCT_NAME} खोलें" + #. Button label that opens the desktop app. productName is the app name. #. Button that hands SSO sign-in back to the mobile app. productName is the app name. #: src/features/auth/components/pages/SsoCallbackPage.tsx:47 @@ -25011,12 +25041,15 @@ msgstr "बैनर विकल्प खोलें" msgid "Open bookmarks" msgstr "बुकमार्क खोलें" -#. Button label that opens the browser sign-in handoff page. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:56 #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:184 msgid "Open browser" msgstr "ब्राउज़र खोलें" +#. Button in the desktop app that reopens the browser sign-in page while the app waits for the browser. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:53 +msgid "Open browser again" +msgstr "ब्राउज़र फिर से खोलें" + #. Primary button in the screen-share picker on web. Hands off to the browser's native getDisplayMedia picker. #: src/features/voice/components/modals/ScreenSharePickerModal.tsx:209 msgid "Open browser picker" @@ -25392,10 +25425,6 @@ msgstr "वॉइस और वीडियो सेटिंग्स खो msgid "Open with {accountName} on {instanceName}" msgstr "{accountName} पर {instanceName} के साथ खोलें" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:414 -msgid "Open your browser to finish signing in." -msgstr "साइन इन पूरा करने के लिए अपना ब्राउज़र खोलें।" - #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:137 msgid "Open your browser, sign in, then enter the code below to link your account." msgstr "अपना ब्राउज़र खोलें, साइन इन करें, फिर अपना अकाउंट लिंक करने के लिए नीचे दिया गया कोड डालें।" @@ -25421,7 +25450,7 @@ msgstr "सदस्य पेज खोलता है। खोलने क #. Short label in the language tab. Keep it concise. #. Spellcheck engine option in the textarea spellcheck submenu. Uses the host operating system spellchecker. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:79 #: src/features/user/components/modals/tabs/LanguageTab.tsx:110 msgid "Operating system" @@ -26439,7 +26468,7 @@ msgstr "प्लान" msgid "Plans, perks, gifts and your subscription all live on one page." msgstr "योजनाएं, लाभ, उपहार और आपकी सदस्यता - सब एक ही पेज पर उपलब्ध हैं।" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:172 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:89 msgid "Platform" msgstr "प्लेटफ़ॉर्म" @@ -31859,11 +31888,6 @@ msgstr "चैट दिखाएं" msgid "Show chat with {count, plural, one {# unread message} other {# unread messages}}" msgstr "{count, plural, one {# अपठित मैसेज के साथ चैट दिखाएं} other {# अपठित मैसेज के साथ चैट दिखाएं}}" -#. Button label that opens the manual browser handoff code fallback. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:60 -msgid "Show code" -msgstr "कोड दिखाएँ" - #. Developer voice status menu option for displaying the voice connection identifier. #: src/features/voice/components/voice_connection_status/VoiceConnectionStatusInner.tsx:76 msgid "Show connection ID" @@ -32306,7 +32330,9 @@ msgstr "कम्युनिटी हेडर के नीचे बैन msgid "Sidebar" msgstr "साइडबार" +#. Button in the browser that approves signing in to the desktop or mobile app that asked for it. #. Generic authentication action label. Use for buttons, links, page titles, and accessible labels. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:33 #: src/features/i18n/utils/CommonMessageDescriptors.ts:79 msgid "Sign in" msgstr "साइन इन करें" @@ -32321,10 +32347,35 @@ msgstr "फिर से साइन इन करें" msgid "Sign in again as {accountLabel}" msgstr "{accountLabel} के तौर पर फिर से साइन इन करें" +#. Shown in the desktop app while it waits for the browser. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:193 +msgid "Sign in to {instanceName} in your browser and confirm. This app finishes signing in on its own." +msgstr "अपने ब्राउज़र में {instanceName} में साइन इन करें और पुष्टि करें। यह ऐप अपने आप साइन इन पूरा कर लेगा।" + +#. Shown in the desktop app above the code when the browser cannot return the sign-in automatically. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:189 +msgid "Sign in to {instanceName} in your browser, and check that it shows this code:" +msgstr "अपने ब्राउज़र में {instanceName} में साइन इन करें, और जांचें कि यह कोड दिखाता है:" + #: src/features/auth/flow/GiftHeader.tsx:33 msgid "Sign in to claim your gift" msgstr "अपना उपहार पाने के लिए साइन इन करें" +#. Title of the browser page where the user approves signing in to an app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:71 +msgid "Sign in to the {PRODUCT_NAME} app" +msgstr "{PRODUCT_NAME} ऐप में साइन इन करें" + +#. Title of the browser page where the user approves signing in to the desktop app that opened it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:58 +msgid "Sign in to the {PRODUCT_NAME} desktop app" +msgstr "{PRODUCT_NAME} डेस्कटॉप ऐप में साइन इन करें" + +#. Title of the browser page where the user approves signing in to the mobile app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:65 +msgid "Sign in to the {PRODUCT_NAME} mobile app" +msgstr "{PRODUCT_NAME} मोबाइल ऐप में साइन इन करें" + #. Action label that starts passkey authentication. #: src/features/auth/AuthMessageDescriptors.ts:13 msgid "Sign in with a passkey" @@ -32403,14 +32454,10 @@ msgstr "अपने अकाउंट से दूसरे डिवाइ msgid "Sign out?" msgstr "साइन आउट करें?" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:234 -msgid "Sign-in approved" -msgstr "साइन-इन मंज़ूर किया गया" - -#. Short label in the authentication handoff approval flow. Keep the tone plain and specific. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:26 -msgid "Sign-in code" -msgstr "साइन-इन कोड" +#. Title of the browser page after the user cancelled the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:322 +msgid "Sign-in cancelled" +msgstr "साइन-इन रद्द किया गया" #. Section title for email address and password controls in the account security tab. Keep it concise. #: src/features/user/components/modals/tabs/account_security_tab/AccountSecuritySections.tsx:23 @@ -32433,10 +32480,6 @@ msgstr "साइन-इन फ़्लो" msgid "Sign-in method" msgstr "साइन-इन विधि" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:84 -msgid "Sign-in request" -msgstr "साइन-इन अनुरोध" - #. Aria label on the signal-strength icon shown while the first latency sample is still pending. #: src/features/voice/components/SignalStrengthIcon.tsx:16 msgid "Signal strength loading" @@ -32453,6 +32496,21 @@ msgstr "साइन इन किया गया" msgid "Signed-in devices" msgstr "साइन इन किए गए डिवाइस" +#. Shown on the browser approval page above the buttons. name is the display name of the account that will be signed in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:137 +msgid "Signing in as {name}" +msgstr "{name} के तौर पर साइन इन हो रहा है" + +#. Text button in the desktop app that shows a code to type into a browser on a different device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:207 +msgid "Signing in on another device?" +msgstr "किसी दूसरे डिवाइस पर साइन इन कर रहे हैं?" + +#. Title while the browser approves the sign-in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:228 +msgid "Signing in…" +msgstr "साइन इन हो रहा है…" + #. Label for Bluesky OAuth signing key ID input. #: src/features/app/components/setup/SetupWizardSteps.tsx:1161 msgid "Signing key ID" @@ -33504,6 +33562,8 @@ msgstr "माइक्रोफ़ोन की जाँच शुरू क msgid "Start minimized" msgstr "मिनिमाइज़ करके शुरू करें" +#. Button on the browser page after cancelling that goes back to choosing an account. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:337 #: src/features/moderation/components/report/ReportStepDetails.tsx:326 #: src/features/moderation/components/report/ReportStepEmail.tsx:97 #: src/features/moderation/components/report/ReportStepVerification.tsx:134 @@ -34910,6 +34970,11 @@ msgstr "थाई" msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "{productName} को सुरक्षित रखने में मदद करने के लिए धन्यवाद। हम जल्द से जल्द आपकी रिपोर्ट की समीक्षा करेंगे।" +#. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 +msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." +msgstr "वह कोड {instanceHost} पर मान्य नहीं है। कृपया कोड को {productName} ऐप में देखें और पुनः प्रयास करें।" + #. Body of the passkey page after the passkey prompt failed or was dismissed. Keep plain. #: src/features/auth/passkey_migration/PasskeyBridgePage.tsx:36 msgid "That didn't work. Try again or cancel." @@ -34953,11 +35018,6 @@ msgstr "वह मैसेज डिलीट नहीं हो सका" msgid "That message is gone, or you lost access to the conversation." msgstr "वह मैसेज अब मौजूद नहीं है, या उस बातचीत का आपका एक्सेस चला गया है।" -#. Error shown when a browser sign-in handoff code expires before it is approved. -#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 -msgid "That sign-in code expired. Try again." -msgstr "वह साइन-इन कोड समाप्त हो गया। पुनः प्रयास करें।" - #. End-of-list line in the saved messages popout after every bookmark has been shown. #. End-of-list line on the saved messages page after every bookmark has been shown. #: src/features/messaging/components/pages/SavedMessagesPage.tsx:35 @@ -34965,6 +35025,21 @@ msgstr "वह साइन-इन कोड समाप्त हो गया msgid "That's all of them." msgstr "बस इतना ही था।" +#. Warning on the browser approval page when the app asked for a different account than the one chosen. requestedIdentifier is the email or username the app asked for, name is the chosen account's display name. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:131 +msgid "The {PRODUCT_NAME} app asked to sign in as {requestedIdentifier}, but you chose {name}." +msgstr "{PRODUCT_NAME} ऐप ने {requestedIdentifier} के रूप में साइन इन करने के लिए कहा, लेकिन आपने {name} को चुना।" + +#. Explains where the code comes from, under the title of the browser page where it is typed. Signing in on another device is the label of a button in the app and must match its translation. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:187 +msgid "The {PRODUCT_NAME} app on your other device shows it under Signing in on another device. Only enter a code from a device you control." +msgstr "आपके दूसरे डिवाइस पर {PRODUCT_NAME} ऐप इसे \"किसी दूसरे डिवाइस पर साइन इन करना\" के तहत दिखाता है। केवल उसी डिवाइस से कोड दर्ज करें जिसे आप नियंत्रित करते हैं।" + +#. Shown after the user cancelled the sign-in request in the browser. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:327 +msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." +msgstr "{PRODUCT_NAME} ऐप में साइन इन नहीं किया गया था। आप इस टैब को बंद कर सकते हैं।" + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -34983,10 +35058,6 @@ msgstr "ऐप क्रैश हो गया" msgid "The app has crashed. Checking for updates that might fix this issue…" msgstr "ऐप क्रैश हो गया है। ऐसे अपडेट देखे जा रहे हैं जिनसे यह समस्या ठीक हो सकती है…" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:237 -msgid "The app should now be signed in to your account." -msgstr "अब ऐप आपके अकाउंट में साइन इन हो जाना चाहिए।" - #. Activity log detail line under a lifted ban, for a temporary ban that had already ended on its own before it was lifted. A ban is the community ban, not the feature that blocks a user. {date} is when the ban ended, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:55 msgid "The ban had already expired on {date}" @@ -35184,6 +35255,16 @@ msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "स्क्रीन शेयर स्रोत ने वीडियो भेजना बंद कर दिया है, इसलिए आपका स्क्रीन शेयर रोक दिया गया।" +#. Error shown in the desktop app when a browser sign-in request expires before it is approved in the browser. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 +msgid "The sign-in request expired before your browser approved it." +msgstr "आपके ब्राउज़र द्वारा अप्रूव किए जाने से पहले साइन-इन अनुरोध की समय सीमा समाप्त हो गई।" + +#. Error shown in the desktop app when the user pressed Cancel on the browser sign-in page. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:14 +msgid "The sign-in was cancelled in your browser." +msgstr "आपके ब्राउज़र में साइन-इन रद्द कर दिया गया था।" + #. Activity log detail line under a deleted sticker, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the sticker, shown as a clickable user chip. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts:100 msgid "The sticker was uploaded by {user}" @@ -35408,6 +35489,11 @@ msgstr "थर्ड पार्टी" msgid "This account can't be blocked." msgstr "इस अकाउंट को ब्लॉक नहीं किया जा सकता।" +#. Error in the browser when the chosen account belongs to a different server than the app that asked to sign in. accountHost and requestHost are server addresses. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:38 +msgid "This account is on {accountHost}, but the {productName} app is signing in to {requestHost}. Choose an account on {requestHost}." +msgstr "यह खाता {accountHost} पर है, लेकिन {productName} ऐप {requestHost} में साइन इन कर रहा है। {requestHost} पर एक खाता चुनें।" + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:418 msgid "This action cannot be undone. All associated data, including the bot user, will be permanently deleted." msgstr "यह कार्रवाई पूर्ववत नहीं की जा सकती। बॉट यूज़र सहित सभी संबंधित डेटा स्थायी रूप से हटा दिया जाएगा।" @@ -35551,11 +35637,6 @@ msgstr "यह आपकी बैकएंड प्रीमियम स् msgid "This code doesn't exist." msgstr "यह कोड मौजूद नहीं है।" -#. Status shown under the browser sign-in code once its countdown reaches zero. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:68 -msgid "This code expired." -msgstr "यह कोड समाप्त हो गया है।" - #. Gift redemption error modal body for an invalid or already used code. #: src/features/gift/commands/GiftCommands.tsx:37 msgid "This code is invalid or already used." @@ -36075,6 +36156,11 @@ msgstr "यह रीसेट लिंक समाप्त हो गया msgid "This shows how links appear: {linkPreviewExampleUrl}" msgstr "यह दिखाता है कि लिंक कैसे दिखते हैं: {linkPreviewExampleUrl}" +#. Error in the browser when the sign-in request from the desktop app no longer exists, because it expired or the app cancelled it. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:20 +msgid "This sign-in request expired or was cancelled in the {productName} app. Start again from the app." +msgstr "यह साइन-इन अनुरोध {productName} ऐप में समाप्त हो गया या रद्द कर दिया गया। ऐप से पुनः आरंभ करें।" + #. Label above the community a sticker comes from in the sticker info card. #: src/features/expressions/components/ExpressionInfoCard.tsx:75 msgid "This sticker is from" @@ -38520,6 +38606,11 @@ msgstr "जहाँ इमेज यूआरएल डालना है, व msgid "Use a dedicated modal to set a message history threshold date for members who don't have the {readMessageHistoryPermissionLabel} permission." msgstr "जिन सदस्यों के पास {readMessageHistoryPermissionLabel} अनुमति नहीं है, उनके लिए मैसेज हिस्ट्री थ्रेशोल्ड की तारीख एक अलग डायलॉग में सेट करें।" +#. Text button on the browser approval page that goes back to choosing which account signs in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:149 +msgid "Use a different account" +msgstr "कोई दूसरा खाता इस्तेमाल करें" + #: src/features/auth/flow/instance_selector/InstancePickerRows.tsx:267 msgid "Use a self-hosted instance URL" msgstr "एक स्व-होस्टेड इंस्टेंस यूआरएल का उपयोग करें" @@ -39296,10 +39387,6 @@ msgstr "{premiumProductFullName} खरीदने के लिए अपन msgid "Verify your email to start DMs." msgstr "DM शुरू करने के लिए अपना ईमेल वेरिफ़ाई करें।" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:142 -msgid "Verifying code…" -msgstr "कोड वेरिफ़ाई किया जा रहा है…" - #: src/features/auth/components/pages/ResetPasswordPage.tsx:145 msgid "Verifying your reset link…" msgstr "आपका रीसेट लिंक वेरिफ़ाई किया जा रहा है…" @@ -40073,10 +40160,6 @@ msgstr "और मैसेज डिलीट करने से पहले msgid "Wait between messages. Members with \"{bypassSlowmodePermissionLabel}\" can bypass this." msgstr "मैसेज के बीच इंतज़ार करें। जिन सदस्यों के पास \"{bypassSlowmodePermissionLabel}\" अनुमति है, वे इसे बायपास कर सकते हैं।" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:445 -msgid "Waiting for browser approval." -msgstr "ब्राउज़र से मंज़ूरी की प्रतीक्षा हो रही है।" - #. Tooltip explaining that video / screen share controls are gated while the voice connection is not yet ready. #: src/features/voice/components/voice_connection_status/LocalParticipantControls.tsx:45 msgid "Waiting for connection..." @@ -40118,10 +40201,6 @@ msgstr "जगाएँ" msgid "Warning" msgstr "चेतावनी" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:158 -msgid "Was this you?" -msgstr "क्या यह आप थे?" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:243 msgctxt "us-state" @@ -40959,10 +41038,6 @@ msgstr "आपके पास पहले से ही आजीवन {premi msgid "You already have this connection." msgstr "यह कनेक्शन आपके पास पहले से है।" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:87 -msgid "You are about to authorize an app to sign in to your account. Only continue if you initiated this request from a device you control." -msgstr "आप एक ऐप को अपने अकाउंट में साइन इन करने के लिए अधिकृत करने वाले हैं। अगर आपने यह अनुरोध अपने नियंत्रण वाले डिवाइस से शुरू किया है, तभी जारी रखें।" - #. External link warning title. productName is the Fluxer product name. #: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:22 msgid "You are about to leave {productName}" @@ -41732,6 +41807,11 @@ msgstr "आप पुरानी दर पर हैं। इस प्ला msgid "You're sending messages too quickly" msgstr "आप बहुत तेज़ी से मैसेज भेज रहे हैं" +#. Title of the browser page after the user approved signing in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:282 +msgid "You're signed in" +msgstr "आप साइन इन हो गए हैं" + #. Status text on the screen-share hover popout shown to the local streamer. Lightly playful tone. #: src/features/voice/components/StreamWatchHoverPopout.tsx:43 msgid "You're streaming!" diff --git a/fluxer_app/src/features/i18n/locales/hr/messages.po b/fluxer_app/src/features/i18n/locales/hr/messages.po index d001cd90e..939d1929c 100644 --- a/fluxer_app/src/features/i18n/locales/hr/messages.po +++ b/fluxer_app/src/features/i18n/locales/hr/messages.po @@ -1573,7 +1573,7 @@ msgid "{imageCount, plural, one {# image} other {# images}}, {videoCount, plural msgstr "{imageCount, plural, one {# slika} few {# slike} other {# slika}}, {videoCount, plural, one {# videozapis} few {# videozapisa} other {# videozapisa}}" #. Explanation shown when the selected instance advertises no web app endpoint. Instance name is interpolated. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:76 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:61 msgid "{instanceName} does not publish a web address, so sign-in cannot be handed to a browser." msgstr "{instanceName} ne objavljuje web adresu, stoga prijavu nije moguće prenijeti pregledniku." @@ -2777,14 +2777,6 @@ msgstr "bogati ugrađeni sadržaj ili pretpregled poveznice (nije prenesena dato msgid "A separate profile for each community" msgstr "Odvojeni profil za svaku zajednicu" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:164 -msgid "A sign-in request was made for your account. Only approve if you initiated it." -msgstr "Za vaš je račun zatražena prijava. Odobrite samo ako ste je vi pokrenuli." - -#: src/features/auth/flow/HandoffApprovalFlow.tsx:162 -msgid "A sign-in request was made from the following device. Only approve if you recognize it." -msgstr "Zahtjev za prijavu poslan je sa sljedećeg uređaja. Odobrite samo ako ga prepoznajete." - #. Description for has:sticker. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:51 msgid "a sticker" @@ -4811,10 +4803,6 @@ msgstr "Primijeni na sve zajednice" msgid "Approval required" msgstr "Zahtijeva odobrenje" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:206 -msgid "Approve" -msgstr "Odobri" - #. Hint under the sign-in option on fluxer.com that pairs a newly installed app with the old installed app. productName is the app name. #: src/features/auth/flow/AuthLoginLayout.tsx:101 msgid "Approve this app from the {productName} app you already use. No password needed." @@ -7873,6 +7861,11 @@ msgstr "Provjera pristupa..." msgid "Checking screen recording permission..." msgstr "Provjera dopuštenja za snimanje zaslona..." +#. Title while the browser looks up the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:224 +msgid "Checking the sign-in request…" +msgstr "Provjeravam zahtjev za prijavu..." + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -8847,6 +8840,11 @@ msgstr "Blokovi koda" msgid "Code expired" msgstr "Kod je istekao" +#. Label of the field in the browser where the user types the 12-character code shown in the desktop or mobile app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:28 +msgid "Code from the {productName} app" +msgstr "Kod iz aplikacije {productName}" + #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 @@ -9348,7 +9346,6 @@ msgstr "Potpuno sakrijte svoju značku {premiumProductName} od drugih korisnika" #: src/features/auth/components/pages/SsoCallbackPage.tsx:256 #: src/features/auth/components/pages/SsoCallbackPage.tsx:322 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:216 msgid "Completing sign-in…" msgstr "Dovršavanje prijave…" @@ -9782,7 +9779,6 @@ msgstr "Kontekstni izbornici mogu se otvoriti lijevim klikom (na gumbe) ili desn #: src/features/auth/components/modals/DeviceRevokeModal.tsx:77 #: src/features/auth/components/modals/PasskeyPinModal.tsx:111 #: src/features/auth/components/pages/oauth_authorize_page/OAuthAccountStep.tsx:36 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/connection/components/modals/AddConnectionModal.tsx:384 #: src/features/i18n/utils/CommonMessageDescriptors.ts:726 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:413 @@ -9790,6 +9786,11 @@ msgstr "Kontekstni izbornici mogu se otvoriti lijevim klikom (na gumbe) ili desn msgid "Continue" msgstr "Nastavi" +#. Title in the desktop app while it waits for the user to sign in on the browser page it opened. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:177 +msgid "Continue in your browser" +msgstr "Nastavi u pregledniku" + #. Button in the gift time confirmation that proceeds to subscription checkout. #: src/features/app/components/dialogs/components/plutonium/hooks/useCheckoutActions.tsx:145 msgid "Continue to checkout" @@ -10437,7 +10438,7 @@ msgid "Couldn't close DM" msgstr "Nije moguće zatvoriti izravnu poruku" #. Desktop handoff flow error shown when finalizing the sign-in fails after a valid code. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:21 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:34 msgid "Couldn't complete sign-in. Try again." msgstr "Nije moguće dovršiti prijavu. Pokušajte ponovno." @@ -10831,6 +10832,11 @@ msgstr "Nije moguće pokrenuti autorizaciju za {blueskyProviderName}" msgid "Couldn't start checkout" msgstr "Nije moguće pokrenuti naplatu" +#. Shown in the desktop app when the browser sign-in request could not be created. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:66 +msgid "Couldn't start signing in with your browser." +msgstr "Nismo mogli pokrenuti prijavu putem vašeg preglednika." + #. Toast error shown when creating a new account connection fails. #: src/features/connection/commands/ConnectionCommands.ts:27 msgid "Couldn't start the connection" @@ -10942,7 +10948,7 @@ msgid "Couldn't upload banner" msgstr "Nije moguće učitati naslovnu sliku" #. Desktop handoff flow error shown when verifying the pairing code fails for an unexpected reason. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:17 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:30 msgid "Couldn't verify that code. Try again." msgstr "Nije moguće potvrditi taj kôd. Pokušajte ponovno." @@ -12503,7 +12509,6 @@ msgstr "Zgusnuti izgled" #. Short label in the settings dialog permission components. Keep the tone plain and specific. #: src/features/app/components/dialogs/shared/PermissionComponents.tsx:16 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:203 msgid "Deny" msgstr "Odbij" @@ -14910,15 +14915,16 @@ msgstr "Unesite {digitCount}-znamenkasti kod iz aplikacije za provjeru autentič msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Unesite {digitCount}-znamenkasti kod iz svoje aplikacije za provjeru autentičnosti." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:108 -msgid "Enter the code" -msgstr "Unesite kod" - #. Inline validation error on the verification step of the DSA report flow when the code field is empty. #: src/features/moderation/components/pages/ReportPage.tsx:74 msgid "Enter the code before continuing." msgstr "Unesite kod prije nastavka." +#. Title of the browser page where the user types the 12-character code the app shows under Signing in on another device. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +msgid "Enter the code from the {PRODUCT_NAME} app" +msgstr "Unesite kod iz aplikacije {PRODUCT_NAME}" + #. Body text in the authentication sudo verification modal. Keep the tone plain and specific. #: src/features/auth/components/modals/SudoVerificationModal.tsx:56 msgid "Enter the code from your authenticator app." @@ -14933,10 +14939,6 @@ msgstr "Unesite kod poslan na vašu trenutačnu e-poštu." msgid "Enter the code sent to your email address." msgstr "Unesite kod poslan na vašu e-adresu." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:111 -msgid "Enter the code shown in the app to continue." -msgstr "Unesite kôd prikazan u aplikaciji za nastavak." - #: src/features/user/components/modals/BouncedEmailChangeModal.tsx:157 #: src/features/user/components/modals/EmailChangeModal.tsx:244 msgid "Enter the code we emailed to your new address." @@ -14959,6 +14961,11 @@ msgstr "Unesite novu e-adresu koju želite koristiti. Tamo ćemo vam poslati kô msgid "Enter the PIN for your security key to continue." msgstr "Unesite PIN za svoj sigurnosni ključ kako biste nastavili." +#. Title in the desktop app above the code the user types into a browser on another device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:228 +msgid "Enter this code in your browser" +msgstr "Unesite ovaj kod u preglednik" + #: src/features/auth/flow/HandoffCodeDisplay.tsx:132 msgid "Enter this code in your browser to complete sign-in." msgstr "Unesite ovaj kôd u preglednik kako biste dovršili prijavu." @@ -15362,7 +15369,7 @@ msgstr "Istječe između {earliest} i {latest}" msgid "Expires in {remaining}s" msgstr "Istječe za {remaining} s" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:374 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:250 msgid "Expires in {remainingSeconds}s" msgstr "Istječe za {remainingSeconds}s" @@ -16165,7 +16172,7 @@ msgid "Fluxer" msgstr "Fluxer" #. Status shown when browser sign-in status polling gives up after repeated failures. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:72 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:57 msgid "Fluxer stopped checking whether the browser approved this sign-in. It didn't lose your code." msgstr "Fluxer je prestao provjeravati je li preglednik odobrio ovu prijavu. Nije izgubio vaš kod." @@ -16952,8 +16959,6 @@ msgstr "Generirajte poveznicu za dijeljenje ili kopirajte svoj kombinirani prila msgid "Generate invite link" msgstr "Generiraj poveznicu za pozivnicu" -#. Button label that replaces an expired browser sign-in code with a fresh one. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:64 #: src/features/auth/flow/HandoffCodeDisplay.tsx:117 msgid "Generate new code" msgstr "Generiraj novi kôd" @@ -17348,6 +17353,16 @@ msgstr "Vratite se i unesite valjanu e-adresu." msgid "Go back to {productName} to continue." msgstr "Vratite se na {productName} da biste nastavili." +#. Shown after approving a sign-in for an app on another device, which signs in by itself shortly. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:292 +msgid "Go back to the {PRODUCT_NAME} app. It finishes signing in on its own." +msgstr "Vrati se u aplikaciju {PRODUCT_NAME}. Prijava će se dovršiti sama." + +#. Shown after approving, when the browser has already handed the sign-in back to the desktop app. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:288 +msgid "Go back to the {PRODUCT_NAME} app. You can close this tab." +msgstr "Vrati se u aplikaciju {PRODUCT_NAME}. Možeš zatvoriti ovaj tab." + #. Accessible label for the community row of an expression info card, which opens a community the viewer is already a member of. {communityName} is the community name. #: src/features/expressions/components/ExpressionInfoCard.tsx:89 msgid "Go to {communityName}" @@ -19295,11 +19310,6 @@ msgstr "Nevažeći JSON. Zalijepite cijeli odgovor s gornjeg URL-a." msgid "Invalid or expired code" msgstr "Nevažeći ili istekli kod" -#. Desktop handoff flow error shown when the entered pairing code is invalid or expired. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:13 -msgid "Invalid or expired code. Try again." -msgstr "Nevažeći ili istekli kod. Pokušajte ponovno." - #. Short label in the authentication authorize flow. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/state/useAuthorizeFlow.ts:82 msgid "Invalid redirect_uri" @@ -20876,7 +20886,7 @@ msgstr "Format lokalnog vremena" msgid "Localization" msgstr "Lokalizacija" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:192 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:109 #: src/features/user/components/modals/tabs/DevicesTab.tsx:152 msgid "Location" msgstr "Lokacija" @@ -21034,6 +21044,11 @@ msgstr "Želite li da {userName} postane vlasnik grupe? Izgubit ćete vlasničke msgid "Make group owner" msgstr "Postavi za vlasnika grupe" +#. Shown above the code on the browser approval page when the app cannot be signed in automatically. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:253 +msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." +msgstr "Provjeri podudara li se ovaj kod s kodom u aplikaciji {PRODUCT_NAME}." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" @@ -24668,6 +24683,11 @@ msgstr "Dana <0>{listPriceEffectiveDate} vaša pretplata prelazi s {listPric msgid "On click" msgstr "Pri kliku" +#. One line explanation in the desktop app above the code. signInAddress is the web address of the sign-in page, such as web.fluxer.app/login?handoff=1. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:236 +msgid "On your other device, sign in at {signInAddress} and enter this code when asked." +msgstr "Na drugom uređaju, prijavi se na {signInAddress} i unesi ovaj kod kada bude zatraženo." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:715 msgid "Once deleted, the application and its credentials are permanently removed." msgstr "Nakon brisanja, aplikacija i njezine vjerodajnice trajno se uklanjaju." @@ -24733,6 +24753,11 @@ msgstr "Samo @spominjanja" msgid "Only applies on wide screens." msgstr "Primjenjuje se samo na širokim zaslonima." +#. Warning under the title of the browser approval page, so people do not approve a sign-in someone else started. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:245 +msgid "Only continue if you started this sign-in on a device you control." +msgstr "Nastavi samo ako si započeo/la ovu prijavu na uređaju koji kontroliraš." + #. Body copy in the mature content check modal. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:32 msgid "Only credit cards are accepted. Debit and prepaid cards cannot be used for the mature content check." @@ -24921,6 +24946,11 @@ msgstr "Otvori {landmarkName}" msgid "Open {premiumProductFullName}" msgstr "Otvori {premiumProductFullName}" +#. Button on the browser page after approving that opens the desktop app again if it did not come to the front. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:304 +msgid "Open {PRODUCT_NAME}" +msgstr "Otvori {PRODUCT_NAME}" + #. Button label that opens the desktop app. productName is the app name. #. Button that hands SSO sign-in back to the mobile app. productName is the app name. #: src/features/auth/components/pages/SsoCallbackPage.tsx:47 @@ -25011,12 +25041,15 @@ msgstr "Otvori opcije naslovne slike" msgid "Open bookmarks" msgstr "Otvori oznake" -#. Button label that opens the browser sign-in handoff page. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:56 #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:184 msgid "Open browser" msgstr "Otvori preglednik" +#. Button in the desktop app that reopens the browser sign-in page while the app waits for the browser. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:53 +msgid "Open browser again" +msgstr "Ponovo otvori preglednik" + #. Primary button in the screen-share picker on web. Hands off to the browser's native getDisplayMedia picker. #: src/features/voice/components/modals/ScreenSharePickerModal.tsx:209 msgid "Open browser picker" @@ -25392,10 +25425,6 @@ msgstr "Otvori postavke zvuka i videa" msgid "Open with {accountName} on {instanceName}" msgstr "Otvori s {accountName} na {instanceName}" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:414 -msgid "Open your browser to finish signing in." -msgstr "Otvori preglednik za dovršetak prijave." - #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:137 msgid "Open your browser, sign in, then enter the code below to link your account." msgstr "Otvorite preglednik, prijavite se, a zatim unesite kôd u nastavku za povezivanje računa." @@ -25421,7 +25450,7 @@ msgstr "Otvara stranicu Članovi. Pritisnite razmaknicu ili Enter za otvaranje." #. Short label in the language tab. Keep it concise. #. Spellcheck engine option in the textarea spellcheck submenu. Uses the host operating system spellchecker. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:79 #: src/features/user/components/modals/tabs/LanguageTab.tsx:110 msgid "Operating system" @@ -26439,7 +26468,7 @@ msgstr "Plan" msgid "Plans, perks, gifts and your subscription all live on one page." msgstr "Planovi, pogodnosti, pokloni i vaša pretplata nalaze se na jednoj stranici." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:172 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:89 msgid "Platform" msgstr "Platforma" @@ -31859,11 +31888,6 @@ msgstr "Prikaži chat" msgid "Show chat with {count, plural, one {# unread message} other {# unread messages}}" msgstr "Prikaži chat s {count, plural, one {# nepročitanom porukom} few {# nepročitane poruke} other {# nepročitanih poruka}}" -#. Button label that opens the manual browser handoff code fallback. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:60 -msgid "Show code" -msgstr "Prikaži kod" - #. Developer voice status menu option for displaying the voice connection identifier. #: src/features/voice/components/voice_connection_status/VoiceConnectionStatusInner.tsx:76 msgid "Show connection ID" @@ -32306,7 +32330,9 @@ msgstr "Prikazuje naslovnu sliku u vlastitom odjeljku ispod zaglavlja zajednice. msgid "Sidebar" msgstr "Bočna traka" +#. Button in the browser that approves signing in to the desktop or mobile app that asked for it. #. Generic authentication action label. Use for buttons, links, page titles, and accessible labels. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:33 #: src/features/i18n/utils/CommonMessageDescriptors.ts:79 msgid "Sign in" msgstr "Prijava" @@ -32321,10 +32347,35 @@ msgstr "Prijavi se ponovno" msgid "Sign in again as {accountLabel}" msgstr "Ponovno se prijavi kao {accountLabel}" +#. Shown in the desktop app while it waits for the browser. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:193 +msgid "Sign in to {instanceName} in your browser and confirm. This app finishes signing in on its own." +msgstr "Prijavi se na {instanceName} u pregledniku i potvrdi. Ova aplikacija sama završava prijavu." + +#. Shown in the desktop app above the code when the browser cannot return the sign-in automatically. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:189 +msgid "Sign in to {instanceName} in your browser, and check that it shows this code:" +msgstr "Prijavi se na {instanceName} u svom pregledniku i provjeri prikazuje li ovaj kod:" + #: src/features/auth/flow/GiftHeader.tsx:33 msgid "Sign in to claim your gift" msgstr "Prijavite se kako biste preuzeli svoj poklon" +#. Title of the browser page where the user approves signing in to an app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:71 +msgid "Sign in to the {PRODUCT_NAME} app" +msgstr "Prijavi se u aplikaciju {PRODUCT_NAME}" + +#. Title of the browser page where the user approves signing in to the desktop app that opened it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:58 +msgid "Sign in to the {PRODUCT_NAME} desktop app" +msgstr "Prijavi se u aplikaciju {PRODUCT_NAME} za računalo" + +#. Title of the browser page where the user approves signing in to the mobile app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:65 +msgid "Sign in to the {PRODUCT_NAME} mobile app" +msgstr "Prijavi se u mobilnu aplikaciju {PRODUCT_NAME}" + #. Action label that starts passkey authentication. #: src/features/auth/AuthMessageDescriptors.ts:13 msgid "Sign in with a passkey" @@ -32403,14 +32454,10 @@ msgstr "Odjavite druge uređaje sa svog računa" msgid "Sign out?" msgstr "Želite li se odjaviti?" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:234 -msgid "Sign-in approved" -msgstr "Prijava odobrena" - -#. Short label in the authentication handoff approval flow. Keep the tone plain and specific. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:26 -msgid "Sign-in code" -msgstr "Kôd za prijavu" +#. Title of the browser page after the user cancelled the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:322 +msgid "Sign-in cancelled" +msgstr "Prijavljivanje otkazano" #. Section title for email address and password controls in the account security tab. Keep it concise. #: src/features/user/components/modals/tabs/account_security_tab/AccountSecuritySections.tsx:23 @@ -32433,10 +32480,6 @@ msgstr "Tijek prijave" msgid "Sign-in method" msgstr "Način prijave" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:84 -msgid "Sign-in request" -msgstr "Zahtjev za prijavu" - #. Aria label on the signal-strength icon shown while the first latency sample is still pending. #: src/features/voice/components/SignalStrengthIcon.tsx:16 msgid "Signal strength loading" @@ -32453,6 +32496,21 @@ msgstr "Prijavljen" msgid "Signed-in devices" msgstr "Prijavljeni uređaji" +#. Shown on the browser approval page above the buttons. name is the display name of the account that will be signed in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:137 +msgid "Signing in as {name}" +msgstr "Prijava kao {name}" + +#. Text button in the desktop app that shows a code to type into a browser on a different device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:207 +msgid "Signing in on another device?" +msgstr "Prijavljuješ se na drugom uređaju?" + +#. Title while the browser approves the sign-in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:228 +msgid "Signing in…" +msgstr "Prijava…" + #. Label for Bluesky OAuth signing key ID input. #: src/features/app/components/setup/SetupWizardSteps.tsx:1161 msgid "Signing key ID" @@ -33504,6 +33562,8 @@ msgstr "Pokreni test mikrofona" msgid "Start minimized" msgstr "Pokreni umanjeno" +#. Button on the browser page after cancelling that goes back to choosing an account. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:337 #: src/features/moderation/components/report/ReportStepDetails.tsx:326 #: src/features/moderation/components/report/ReportStepEmail.tsx:97 #: src/features/moderation/components/report/ReportStepVerification.tsx:134 @@ -34910,6 +34970,11 @@ msgstr "Tajlandski" msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Hvala vam što nam pomažete održati {productName} sigurnim. Pregledat ćemo vašu prijavu što je prije moguće." +#. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 +msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." +msgstr "Taj kod nije valjan na {instanceHost}. Provjerite kod u aplikaciji {productName} i pokušajte ponovno." + #. Body of the passkey page after the passkey prompt failed or was dismissed. Keep plain. #: src/features/auth/passkey_migration/PasskeyBridgePage.tsx:36 msgid "That didn't work. Try again or cancel." @@ -34953,11 +35018,6 @@ msgstr "Nije moguće izbrisati poruku" msgid "That message is gone, or you lost access to the conversation." msgstr "Ta poruka više ne postoji ili ste izgubili pristup razgovoru." -#. Error shown when a browser sign-in handoff code expires before it is approved. -#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 -msgid "That sign-in code expired. Try again." -msgstr "Taj kôd za prijavu istekao je. Pokušajte ponovno." - #. End-of-list line in the saved messages popout after every bookmark has been shown. #. End-of-list line on the saved messages page after every bookmark has been shown. #: src/features/messaging/components/pages/SavedMessagesPage.tsx:35 @@ -34965,6 +35025,21 @@ msgstr "Taj kôd za prijavu istekao je. Pokušajte ponovno." msgid "That's all of them." msgstr "To je sve." +#. Warning on the browser approval page when the app asked for a different account than the one chosen. requestedIdentifier is the email or username the app asked for, name is the chosen account's display name. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:131 +msgid "The {PRODUCT_NAME} app asked to sign in as {requestedIdentifier}, but you chose {name}." +msgstr "Aplikacija {PRODUCT_NAME} zatražila je prijavu kao {requestedIdentifier}, ali ste odabrali {name}." + +#. Explains where the code comes from, under the title of the browser page where it is typed. Signing in on another device is the label of a button in the app and must match its translation. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:187 +msgid "The {PRODUCT_NAME} app on your other device shows it under Signing in on another device. Only enter a code from a device you control." +msgstr "Aplikacija {PRODUCT_NAME} na vašem drugom uređaju prikazuje je pod \"Prijava na drugom uređaju\". Unesite kod samo s uređaja kojim upravljate." + +#. Shown after the user cancelled the sign-in request in the browser. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:327 +msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." +msgstr "Aplikacija {PRODUCT_NAME} nije bila prijavljena. Možete zatvoriti ovaj tab." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -34983,10 +35058,6 @@ msgstr "Aplikacija se srušila" msgid "The app has crashed. Checking for updates that might fix this issue…" msgstr "Aplikacija se srušila. Provjeravamo ima li ažuriranja koja bi mogla riješiti ovaj problem…" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:237 -msgid "The app should now be signed in to your account." -msgstr "Aplikacija bi sada trebala biti prijavljena na vaš račun." - #. Activity log detail line under a lifted ban, for a temporary ban that had already ended on its own before it was lifted. A ban is the community ban, not the feature that blocks a user. {date} is when the ban ended, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:55 msgid "The ban had already expired on {date}" @@ -35184,6 +35255,16 @@ msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "Izvor dijeljenja zaslona prestao je slati video, pa je dijeljenje zaslona zaustavljeno." +#. Error shown in the desktop app when a browser sign-in request expires before it is approved in the browser. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 +msgid "The sign-in request expired before your browser approved it." +msgstr "Zahtjev za prijavu istekao je prije nego što ga je vaš preglednik odobrio." + +#. Error shown in the desktop app when the user pressed Cancel on the browser sign-in page. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:14 +msgid "The sign-in was cancelled in your browser." +msgstr "Prijava je otkazana u vašem pregledniku." + #. Activity log detail line under a deleted sticker, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the sticker, shown as a clickable user chip. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts:100 msgid "The sticker was uploaded by {user}" @@ -35408,6 +35489,11 @@ msgstr "Treća strana" msgid "This account can't be blocked." msgstr "Ovaj se račun ne može blokirati." +#. Error in the browser when the chosen account belongs to a different server than the app that asked to sign in. accountHost and requestHost are server addresses. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:38 +msgid "This account is on {accountHost}, but the {productName} app is signing in to {requestHost}. Choose an account on {requestHost}." +msgstr "Ovaj račun je na {accountHost}, ali se aplikacija {productName} prijavljuje na {requestHost}. Odaberite račun s {requestHost}." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:418 msgid "This action cannot be undone. All associated data, including the bot user, will be permanently deleted." msgstr "Ova se radnja ne može poništiti. Svi povezani podaci, uključujući korisnika bota, bit će trajno izbrisani." @@ -35551,11 +35637,6 @@ msgstr "Ovo u potpunosti briše vaše premium stanje na pozadini, uključujući msgid "This code doesn't exist." msgstr "Ovaj kôd ne postoji." -#. Status shown under the browser sign-in code once its countdown reaches zero. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:68 -msgid "This code expired." -msgstr "Ova je šifra istekla." - #. Gift redemption error modal body for an invalid or already used code. #: src/features/gift/commands/GiftCommands.tsx:37 msgid "This code is invalid or already used." @@ -36075,6 +36156,11 @@ msgstr "Ova poveznica za poništavanje lozinke istekla je. Poveznice za poništa msgid "This shows how links appear: {linkPreviewExampleUrl}" msgstr "Ovako izgledaju poveznice: {linkPreviewExampleUrl}" +#. Error in the browser when the sign-in request from the desktop app no longer exists, because it expired or the app cancelled it. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:20 +msgid "This sign-in request expired or was cancelled in the {productName} app. Start again from the app." +msgstr "Ovaj zahtjev za prijavu istekao je ili je otkazan u aplikaciji {productName}. Pokušajte ponovno iz aplikacije." + #. Label above the community a sticker comes from in the sticker info card. #: src/features/expressions/components/ExpressionInfoCard.tsx:75 msgid "This sticker is from" @@ -38520,6 +38606,11 @@ msgstr "Koristite {url} gdje treba umetnuti URL slike." msgid "Use a dedicated modal to set a message history threshold date for members who don't have the {readMessageHistoryPermissionLabel} permission." msgstr "Upotrijebite zaseban prozor za postavljanje datuma praga povijesti poruka za članove koji nemaju dopuštenje {readMessageHistoryPermissionLabel}." +#. Text button on the browser approval page that goes back to choosing which account signs in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:149 +msgid "Use a different account" +msgstr "Upotrijebi drugi račun" + #: src/features/auth/flow/instance_selector/InstancePickerRows.tsx:267 msgid "Use a self-hosted instance URL" msgstr "Upotrijebi URL samostalno hostirane instance" @@ -39296,10 +39387,6 @@ msgstr "Potvrdite svoju e-poštu za kupnju {premiumProductFullName}." msgid "Verify your email to start DMs." msgstr "Potvrdite svoju e-poštu za početak izravnih poruka." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:142 -msgid "Verifying code…" -msgstr "Provjera koda…" - #: src/features/auth/components/pages/ResetPasswordPage.tsx:145 msgid "Verifying your reset link…" msgstr "Provjeravamo vašu poveznicu za poništavanje…" @@ -40073,10 +40160,6 @@ msgstr "Pričekajte trenutak prije brisanja više poruka." msgid "Wait between messages. Members with \"{bypassSlowmodePermissionLabel}\" can bypass this." msgstr "Vrijeme čekanja između poruka. Članovi s dopuštenjem \"{bypassSlowmodePermissionLabel}\" mogu ga zaobići." -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:445 -msgid "Waiting for browser approval." -msgstr "Čekanje odobrenja preglednika." - #. Tooltip explaining that video / screen share controls are gated while the voice connection is not yet ready. #: src/features/voice/components/voice_connection_status/LocalParticipantControls.tsx:45 msgid "Waiting for connection..." @@ -40118,10 +40201,6 @@ msgstr "Buđenje" msgid "Warning" msgstr "Upozorenje" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:158 -msgid "Was this you?" -msgstr "Jeste li to bili vi?" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:243 msgctxt "us-state" @@ -40959,10 +41038,6 @@ msgstr "Već imate doživotni {premiumProductName}" msgid "You already have this connection." msgstr "Već imate ovu vezu." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:87 -msgid "You are about to authorize an app to sign in to your account. Only continue if you initiated this request from a device you control." -msgstr "Spremate se autorizirati aplikaciju za prijavu na svoj račun. Nastavite samo ako ste ovaj zahtjev pokrenuli s uređaja koji kontrolirate." - #. External link warning title. productName is the Fluxer product name. #: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:22 msgid "You are about to leave {productName}" @@ -41732,6 +41807,11 @@ msgstr "Koristite staru cijenu. Trenutna cijena za ovaj plan je {currentSubscrip msgid "You're sending messages too quickly" msgstr "Prebrzo šaljete poruke" +#. Title of the browser page after the user approved signing in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:282 +msgid "You're signed in" +msgstr "Prijavljeni ste" + #. Status text on the screen-share hover popout shown to the local streamer. Lightly playful tone. #: src/features/voice/components/StreamWatchHoverPopout.tsx:43 msgid "You're streaming!" diff --git a/fluxer_app/src/features/i18n/locales/hu/messages.po b/fluxer_app/src/features/i18n/locales/hu/messages.po index b3608b063..5575dea52 100644 --- a/fluxer_app/src/features/i18n/locales/hu/messages.po +++ b/fluxer_app/src/features/i18n/locales/hu/messages.po @@ -1573,7 +1573,7 @@ msgid "{imageCount, plural, one {# image} other {# images}}, {videoCount, plural msgstr "{imageCount, plural, one {# kép} other {# kép}}, {videoCount, plural, one {# videó} other {# videó}}" #. Explanation shown when the selected instance advertises no web app endpoint. Instance name is interpolated. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:76 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:61 msgid "{instanceName} does not publish a web address, so sign-in cannot be handed to a browser." msgstr "A(z) {instanceName} nem tesz közzé webcímet, ezért a bejelentkezés nem irányítható át böngészőbe." @@ -2777,14 +2777,6 @@ msgstr "formázott beágyazott tartalom vagy linkelőnézet (nem feltöltött f msgid "A separate profile for each community" msgstr "Külön profil minden közösséghez" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:164 -msgid "A sign-in request was made for your account. Only approve if you initiated it." -msgstr "Bejelentkezési kérelem érkezett a fiókodhoz. Csak akkor hagyd jóvá, ha te kezdeményezted." - -#: src/features/auth/flow/HandoffApprovalFlow.tsx:162 -msgid "A sign-in request was made from the following device. Only approve if you recognize it." -msgstr "Bejelentkezési kérelem érkezett a következő eszközről. Csak akkor hagyd jóvá, ha felismered." - #. Description for has:sticker. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:51 msgid "a sticker" @@ -4811,10 +4803,6 @@ msgstr "Alkalmazás az összes közösségre" msgid "Approval required" msgstr "Jóváhagyás szükséges" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:206 -msgid "Approve" -msgstr "Jóváhagyás" - #. Hint under the sign-in option on fluxer.com that pairs a newly installed app with the old installed app. productName is the app name. #: src/features/auth/flow/AuthLoginLayout.tsx:101 msgid "Approve this app from the {productName} app you already use. No password needed." @@ -7873,6 +7861,11 @@ msgstr "Hozzáférés ellenőrzése…" msgid "Checking screen recording permission..." msgstr "A képernyőfelvétel engedélyének ellenőrzése..." +#. Title while the browser looks up the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:224 +msgid "Checking the sign-in request…" +msgstr "A bejelentkezési kérelem ellenőrzése…" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -8847,6 +8840,11 @@ msgstr "Kódblokkok" msgid "Code expired" msgstr "A kód lejárt" +#. Label of the field in the browser where the user types the 12-character code shown in the desktop or mobile app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:28 +msgid "Code from the {productName} app" +msgstr "Kód a(z) {productName} alkalmazásból" + #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 @@ -9348,7 +9346,6 @@ msgstr "Teljesen elrejti a(z) {premiumProductName} jelvényedet a többi felhasz #: src/features/auth/components/pages/SsoCallbackPage.tsx:256 #: src/features/auth/components/pages/SsoCallbackPage.tsx:322 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:216 msgid "Completing sign-in…" msgstr "Bejelentkezés befejezése…" @@ -9782,7 +9779,6 @@ msgstr "A helyi menük bal egérgombbal (gombokon) vagy jobb egérgombbal (egyé #: src/features/auth/components/modals/DeviceRevokeModal.tsx:77 #: src/features/auth/components/modals/PasskeyPinModal.tsx:111 #: src/features/auth/components/pages/oauth_authorize_page/OAuthAccountStep.tsx:36 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/connection/components/modals/AddConnectionModal.tsx:384 #: src/features/i18n/utils/CommonMessageDescriptors.ts:726 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:413 @@ -9790,6 +9786,11 @@ msgstr "A helyi menük bal egérgombbal (gombokon) vagy jobb egérgombbal (egyé msgid "Continue" msgstr "Folytatás" +#. Title in the desktop app while it waits for the user to sign in on the browser page it opened. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:177 +msgid "Continue in your browser" +msgstr "Folytatás a böngészőben" + #. Button in the gift time confirmation that proceeds to subscription checkout. #: src/features/app/components/dialogs/components/plutonium/hooks/useCheckoutActions.tsx:145 msgid "Continue to checkout" @@ -10437,7 +10438,7 @@ msgid "Couldn't close DM" msgstr "Nem sikerült bezárni a közvetlen beszélgetést" #. Desktop handoff flow error shown when finalizing the sign-in fails after a valid code. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:21 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:34 msgid "Couldn't complete sign-in. Try again." msgstr "Nem sikerült befejezni a bejelentkezést. Próbáld újra." @@ -10831,6 +10832,11 @@ msgstr "Nem sikerült elindítani a(z) {blueskyProviderName} engedélyezési fol msgid "Couldn't start checkout" msgstr "Nem sikerült elindítani a fizetést" +#. Shown in the desktop app when the browser sign-in request could not be created. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:66 +msgid "Couldn't start signing in with your browser." +msgstr "Nem sikerült elindítani a bejelentkezést a böngésződdel." + #. Toast error shown when creating a new account connection fails. #: src/features/connection/commands/ConnectionCommands.ts:27 msgid "Couldn't start the connection" @@ -10942,7 +10948,7 @@ msgid "Couldn't upload banner" msgstr "Nem sikerült feltölteni a borítóképet" #. Desktop handoff flow error shown when verifying the pairing code fails for an unexpected reason. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:17 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:30 msgid "Couldn't verify that code. Try again." msgstr "Nem sikerült ellenőrizni a kódot. Próbáld újra." @@ -12503,7 +12509,6 @@ msgstr "Sűrű elrendezés" #. Short label in the settings dialog permission components. Keep the tone plain and specific. #: src/features/app/components/dialogs/shared/PermissionComponents.tsx:16 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:203 msgid "Deny" msgstr "Elutasítás" @@ -14910,15 +14915,16 @@ msgstr "Add meg a hitelesítő alkalmazásod {digitCount} számjegyű kódját v msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Add meg a hitelesítő alkalmazásod {digitCount} számjegyű kódját." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:108 -msgid "Enter the code" -msgstr "Add meg a kódot" - #. Inline validation error on the verification step of the DSA report flow when the code field is empty. #: src/features/moderation/components/pages/ReportPage.tsx:74 msgid "Enter the code before continuing." msgstr "A folytatáshoz add meg a kódot." +#. Title of the browser page where the user types the 12-character code the app shows under Signing in on another device. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +msgid "Enter the code from the {PRODUCT_NAME} app" +msgstr "Írd be a kódot a(z) {PRODUCT_NAME} alkalmazásból" + #. Body text in the authentication sudo verification modal. Keep the tone plain and specific. #: src/features/auth/components/modals/SudoVerificationModal.tsx:56 msgid "Enter the code from your authenticator app." @@ -14933,10 +14939,6 @@ msgstr "Add meg az aktuális e-mail-címedre küldött kódot." msgid "Enter the code sent to your email address." msgstr "Add meg az e-mail-címedre küldött kódot." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:111 -msgid "Enter the code shown in the app to continue." -msgstr "A folytatáshoz add meg az alkalmazásban látható kódot." - #: src/features/user/components/modals/BouncedEmailChangeModal.tsx:157 #: src/features/user/components/modals/EmailChangeModal.tsx:244 msgid "Enter the code we emailed to your new address." @@ -14959,6 +14961,11 @@ msgstr "Add meg az új e-mail-címedet. Kódot küldünk oda." msgid "Enter the PIN for your security key to continue." msgstr "A folytatáshoz add meg a biztonsági kulcsod PIN-kódját." +#. Title in the desktop app above the code the user types into a browser on another device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:228 +msgid "Enter this code in your browser" +msgstr "Írd be ezt a kódot a böngészőbe" + #: src/features/auth/flow/HandoffCodeDisplay.tsx:132 msgid "Enter this code in your browser to complete sign-in." msgstr "Írd be ezt a kódot a böngésződbe a bejelentkezés befejezéséhez." @@ -15362,7 +15369,7 @@ msgstr "Lejárati idő: {earliest} és {latest} között" msgid "Expires in {remaining}s" msgstr "Lejár {remaining} mp múlva" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:374 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:250 msgid "Expires in {remainingSeconds}s" msgstr "Lejár: {remainingSeconds} mp múlva" @@ -16165,7 +16172,7 @@ msgid "Fluxer" msgstr "Fluxer" #. Status shown when browser sign-in status polling gives up after repeated failures. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:72 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:57 msgid "Fluxer stopped checking whether the browser approved this sign-in. It didn't lose your code." msgstr "A Fluxer abbahagyta annak ellenőrzését, hogy a böngésző jóváhagyta-e ezt a bejelentkezést. Nem veszítette el a kódodat." @@ -16952,8 +16959,6 @@ msgstr "Megosztható hivatkozás generálása vagy az egyesített egyéni CSS m msgid "Generate invite link" msgstr "Meghívólink generálása" -#. Button label that replaces an expired browser sign-in code with a fresh one. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:64 #: src/features/auth/flow/HandoffCodeDisplay.tsx:117 msgid "Generate new code" msgstr "Új kód generálása" @@ -17348,6 +17353,16 @@ msgstr "Menj vissza, és adj meg egy érvényes e-mail-címet." msgid "Go back to {productName} to continue." msgstr "A folytatáshoz térj vissza a(z) {productName} alkalmazásba." +#. Shown after approving a sign-in for an app on another device, which signs in by itself shortly. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:292 +msgid "Go back to the {PRODUCT_NAME} app. It finishes signing in on its own." +msgstr "Vissza a(z) {PRODUCT_NAME} alkalmazásba. A bejelentkezés magától befejeződik." + +#. Shown after approving, when the browser has already handed the sign-in back to the desktop app. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:288 +msgid "Go back to the {PRODUCT_NAME} app. You can close this tab." +msgstr "Vissza a(z) {PRODUCT_NAME} alkalmazásba. Bezárhatod ezt a lapot." + #. Accessible label for the community row of an expression info card, which opens a community the viewer is already a member of. {communityName} is the community name. #: src/features/expressions/components/ExpressionInfoCard.tsx:89 msgid "Go to {communityName}" @@ -19295,11 +19310,6 @@ msgstr "Érvénytelen JSON. Illeszd be a fenti URL-ről kapott teljes választ." msgid "Invalid or expired code" msgstr "Érvénytelen vagy lejárt kód" -#. Desktop handoff flow error shown when the entered pairing code is invalid or expired. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:13 -msgid "Invalid or expired code. Try again." -msgstr "Érvénytelen vagy lejárt kód. Próbáld újra." - #. Short label in the authentication authorize flow. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/state/useAuthorizeFlow.ts:82 msgid "Invalid redirect_uri" @@ -20876,7 +20886,7 @@ msgstr "Területi beállítás szerinti időformátum" msgid "Localization" msgstr "Lokalizáció" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:192 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:109 #: src/features/user/components/modals/tabs/DevicesTab.tsx:152 msgid "Location" msgstr "Hely" @@ -21034,6 +21044,11 @@ msgstr "{userName} legyen a csoport tulajdonosa? Ekkor elveszíted a tulajdonosi msgid "Make group owner" msgstr "Csoporttulajdonossá tétel" +#. Shown above the code on the browser approval page when the app cannot be signed in automatically. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:253 +msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." +msgstr "Győződj meg róla, hogy ez a kód megegyezik a(z) {PRODUCT_NAME} alkalmazásban lévővel." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" @@ -24668,6 +24683,11 @@ msgstr "<0>{listPriceEffectiveDate} napján az előfizetésed a(z) {listPric msgid "On click" msgstr "Kattintásra" +#. One line explanation in the desktop app above the code. signInAddress is the web address of the sign-in page, such as web.fluxer.app/login?handoff=1. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:236 +msgid "On your other device, sign in at {signInAddress} and enter this code when asked." +msgstr "A másik eszközödön jelentkezz be a(z) {signInAddress} címen, és add meg ezt a kódot, amikor a rendszer kéri." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:715 msgid "Once deleted, the application and its credentials are permanently removed." msgstr "Törlés után az alkalmazás és a hitelesítő adatai véglegesen eltávolításra kerülnek." @@ -24733,6 +24753,11 @@ msgstr "Csak az @említések" msgid "Only applies on wide screens." msgstr "Csak széles képernyőn jelenik meg." +#. Warning under the title of the browser approval page, so people do not approve a sign-in someone else started. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:245 +msgid "Only continue if you started this sign-in on a device you control." +msgstr "Csak akkor folytasd, ha olyan eszközön kezdted ezt a bejelentkezést, amely felett rendelkezel." + #. Body copy in the mature content check modal. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:32 msgid "Only credit cards are accepted. Debit and prepaid cards cannot be used for the mature content check." @@ -24921,6 +24946,11 @@ msgstr "Megnyitás: {landmarkName}" msgid "Open {premiumProductFullName}" msgstr "Nyissa meg a(z) {premiumProductFullName}" +#. Button on the browser page after approving that opens the desktop app again if it did not come to the front. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:304 +msgid "Open {PRODUCT_NAME}" +msgstr "Nyissa meg a {PRODUCT_NAME} alkalmazást" + #. Button label that opens the desktop app. productName is the app name. #. Button that hands SSO sign-in back to the mobile app. productName is the app name. #: src/features/auth/components/pages/SsoCallbackPage.tsx:47 @@ -25011,12 +25041,15 @@ msgstr "Borítókép beállításainak megnyitása" msgid "Open bookmarks" msgstr "Mentett üzenetek megnyitása" -#. Button label that opens the browser sign-in handoff page. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:56 #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:184 msgid "Open browser" msgstr "Böngésző megnyitása" +#. Button in the desktop app that reopens the browser sign-in page while the app waits for the browser. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:53 +msgid "Open browser again" +msgstr "Böngésző újbóli megnyitása" + #. Primary button in the screen-share picker on web. Hands off to the browser's native getDisplayMedia picker. #: src/features/voice/components/modals/ScreenSharePickerModal.tsx:209 msgid "Open browser picker" @@ -25392,10 +25425,6 @@ msgstr "Hang és videó beállítások megnyitása" msgid "Open with {accountName} on {instanceName}" msgstr "Megnyitás ezzel: {accountName} itt: {instanceName}" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:414 -msgid "Open your browser to finish signing in." -msgstr "Nyisd meg a böngésződet a bejelentkezés befejezéséhez." - #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:137 msgid "Open your browser, sign in, then enter the code below to link your account." msgstr "Nyisd meg a böngésződet, jelentkezz be, majd add meg az alábbi kódot a fiókod összekapcsolásához." @@ -25421,7 +25450,7 @@ msgstr "Megnyitja a Tagok oldalt. Nyomj szóközt vagy entert a megnyitáshoz." #. Short label in the language tab. Keep it concise. #. Spellcheck engine option in the textarea spellcheck submenu. Uses the host operating system spellchecker. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:79 #: src/features/user/components/modals/tabs/LanguageTab.tsx:110 msgid "Operating system" @@ -26439,7 +26468,7 @@ msgstr "Csomag" msgid "Plans, perks, gifts and your subscription all live on one page." msgstr "A csomagok, előnyök, ajándékok és az előfizetésed mind egy helyen találhatók." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:172 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:89 msgid "Platform" msgstr "Platform" @@ -31859,11 +31888,6 @@ msgstr "Csevegés megjelenítése" msgid "Show chat with {count, plural, one {# unread message} other {# unread messages}}" msgstr "Csevegés megjelenítése ({count, plural, one {# olvasatlan üzenet} other {# olvasatlan üzenet}})" -#. Button label that opens the manual browser handoff code fallback. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:60 -msgid "Show code" -msgstr "Kód mutatása" - #. Developer voice status menu option for displaying the voice connection identifier. #: src/features/voice/components/voice_connection_status/VoiceConnectionStatusInner.tsx:76 msgid "Show connection ID" @@ -32306,7 +32330,9 @@ msgstr "A borítóképet külön szakaszban jeleníti meg a közösség fejléce msgid "Sidebar" msgstr "Oldalsáv" +#. Button in the browser that approves signing in to the desktop or mobile app that asked for it. #. Generic authentication action label. Use for buttons, links, page titles, and accessible labels. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:33 #: src/features/i18n/utils/CommonMessageDescriptors.ts:79 msgid "Sign in" msgstr "Bejelentkezés" @@ -32321,10 +32347,35 @@ msgstr "Jelentkezz be újra" msgid "Sign in again as {accountLabel}" msgstr "Jelentkezz be újra mint {accountLabel}" +#. Shown in the desktop app while it waits for the browser. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:193 +msgid "Sign in to {instanceName} in your browser and confirm. This app finishes signing in on its own." +msgstr "Jelentkezz be a böngésződben a(z) {instanceName} szolgáltatásba, és erősítsd meg. Az alkalmazás önállóan befejezi a bejelentkezést." + +#. Shown in the desktop app above the code when the browser cannot return the sign-in automatically. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:189 +msgid "Sign in to {instanceName} in your browser, and check that it shows this code:" +msgstr "Jelentkezz be a böngésződben a(z) {instanceName} szolgáltatásba, és ellenőrizd, hogy ez a kód jelenik-e meg:" + #: src/features/auth/flow/GiftHeader.tsx:33 msgid "Sign in to claim your gift" msgstr "Jelentkezz be az ajándékodért" +#. Title of the browser page where the user approves signing in to an app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:71 +msgid "Sign in to the {PRODUCT_NAME} app" +msgstr "Jelentkezz be a(z) {PRODUCT_NAME} alkalmazásba" + +#. Title of the browser page where the user approves signing in to the desktop app that opened it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:58 +msgid "Sign in to the {PRODUCT_NAME} desktop app" +msgstr "Jelentkezz be a(z) {PRODUCT_NAME} asztali alkalmazásba" + +#. Title of the browser page where the user approves signing in to the mobile app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:65 +msgid "Sign in to the {PRODUCT_NAME} mobile app" +msgstr "Jelentkezz be a(z) {PRODUCT_NAME} mobilalkalmazásba" + #. Action label that starts passkey authentication. #: src/features/auth/AuthMessageDescriptors.ts:13 msgid "Sign in with a passkey" @@ -32403,14 +32454,10 @@ msgstr "Más eszközök kijelentkeztetése a fiókodból" msgid "Sign out?" msgstr "Kijelentkezés?" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:234 -msgid "Sign-in approved" -msgstr "Bejelentkezés jóváhagyva" - -#. Short label in the authentication handoff approval flow. Keep the tone plain and specific. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:26 -msgid "Sign-in code" -msgstr "Bejelentkezési kód" +#. Title of the browser page after the user cancelled the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:322 +msgid "Sign-in cancelled" +msgstr "Bejelentkezés megszakítva" #. Section title for email address and password controls in the account security tab. Keep it concise. #: src/features/user/components/modals/tabs/account_security_tab/AccountSecuritySections.tsx:23 @@ -32433,10 +32480,6 @@ msgstr "Bejelentkezési folyamat" msgid "Sign-in method" msgstr "Bejelentkezési mód" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:84 -msgid "Sign-in request" -msgstr "Bejelentkezési kérelem" - #. Aria label on the signal-strength icon shown while the first latency sample is still pending. #: src/features/voice/components/SignalStrengthIcon.tsx:16 msgid "Signal strength loading" @@ -32453,6 +32496,21 @@ msgstr "Bejelentkezve" msgid "Signed-in devices" msgstr "Bejelentkezett eszközök" +#. Shown on the browser approval page above the buttons. name is the display name of the account that will be signed in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:137 +msgid "Signing in as {name}" +msgstr "Bejelentkezés ekként: {name}" + +#. Text button in the desktop app that shows a code to type into a browser on a different device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:207 +msgid "Signing in on another device?" +msgstr "Bejelentkezel egy másik eszközön?" + +#. Title while the browser approves the sign-in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:228 +msgid "Signing in…" +msgstr "Bejelentkezés folyamatban…" + #. Label for Bluesky OAuth signing key ID input. #: src/features/app/components/setup/SetupWizardSteps.tsx:1161 msgid "Signing key ID" @@ -33504,6 +33562,8 @@ msgstr "Mikrofonteszt indítása" msgid "Start minimized" msgstr "Indítás kis méretben" +#. Button on the browser page after cancelling that goes back to choosing an account. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:337 #: src/features/moderation/components/report/ReportStepDetails.tsx:326 #: src/features/moderation/components/report/ReportStepEmail.tsx:97 #: src/features/moderation/components/report/ReportStepVerification.tsx:134 @@ -34910,6 +34970,11 @@ msgstr "thai" msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Köszönjük, hogy segítesz megőrizni a(z) {productName} biztonságát. A bejelentésedet a lehető leghamarabb megvizsgáljuk." +#. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 +msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." +msgstr "Ez a kód nem érvényes itt: {instanceHost}. Ellenőrizd a kódot a(z) {productName} alkalmazásban, és próbáld újra." + #. Body of the passkey page after the passkey prompt failed or was dismissed. Keep plain. #: src/features/auth/passkey_migration/PasskeyBridgePage.tsx:36 msgid "That didn't work. Try again or cancel." @@ -34953,11 +35018,6 @@ msgstr "Nem sikerült törölni az üzenetet" msgid "That message is gone, or you lost access to the conversation." msgstr "Ez az üzenet már nem létezik, vagy elvesztetted a hozzáférést a beszélgetéshez." -#. Error shown when a browser sign-in handoff code expires before it is approved. -#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 -msgid "That sign-in code expired. Try again." -msgstr "Ez a bejelentkezési kód lejárt. Próbáld újra." - #. End-of-list line in the saved messages popout after every bookmark has been shown. #. End-of-list line on the saved messages page after every bookmark has been shown. #: src/features/messaging/components/pages/SavedMessagesPage.tsx:35 @@ -34965,6 +35025,21 @@ msgstr "Ez a bejelentkezési kód lejárt. Próbáld újra." msgid "That's all of them." msgstr "Ennyi volt az összes." +#. Warning on the browser approval page when the app asked for a different account than the one chosen. requestedIdentifier is the email or username the app asked for, name is the chosen account's display name. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:131 +msgid "The {PRODUCT_NAME} app asked to sign in as {requestedIdentifier}, but you chose {name}." +msgstr "A(z) {PRODUCT_NAME} alkalmazás a(z) {requestedIdentifier} fiókkal szeretett volna bejelentkezni, de Ön a(z) {name} fiókot választotta." + +#. Explains where the code comes from, under the title of the browser page where it is typed. Signing in on another device is the label of a button in the app and must match its translation. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:187 +msgid "The {PRODUCT_NAME} app on your other device shows it under Signing in on another device. Only enter a code from a device you control." +msgstr "A(z) {PRODUCT_NAME} alkalmazás a másik eszközödön a „Bejelentkezés másik eszközön” alatt jelenik meg. Csak olyan kódot adj meg, amelyik egy általad felügyelt eszközről származik." + +#. Shown after the user cancelled the sign-in request in the browser. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:327 +msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." +msgstr "A(z) {PRODUCT_NAME} alkalmazás nem jelentkezett be. Bezárhatod ezt a lapot." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -34983,10 +35058,6 @@ msgstr "Az alkalmazás összeomlott" msgid "The app has crashed. Checking for updates that might fix this issue…" msgstr "Az alkalmazás összeomlott. Frissítések keresése, amelyek megoldhatják ezt a problémát…" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:237 -msgid "The app should now be signed in to your account." -msgstr "Az alkalmazásban most már be kell lenned jelentkezve a fiókodba." - #. Activity log detail line under a lifted ban, for a temporary ban that had already ended on its own before it was lifted. A ban is the community ban, not the feature that blocks a user. {date} is when the ban ended, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:55 msgid "The ban had already expired on {date}" @@ -35184,6 +35255,16 @@ msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "A képernyőmegosztás forrása nem küldött tovább videót, ezért a képernyőmegosztásod leállt." +#. Error shown in the desktop app when a browser sign-in request expires before it is approved in the browser. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 +msgid "The sign-in request expired before your browser approved it." +msgstr "A bejelentkezési kérelem lejárt, mielőtt a böngésződ jóváhagyta volna." + +#. Error shown in the desktop app when the user pressed Cancel on the browser sign-in page. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:14 +msgid "The sign-in was cancelled in your browser." +msgstr "A bejelentkezés megszakadt a böngésződben." + #. Activity log detail line under a deleted sticker, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the sticker, shown as a clickable user chip. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts:100 msgid "The sticker was uploaded by {user}" @@ -35408,6 +35489,11 @@ msgstr "Harmadik fél" msgid "This account can't be blocked." msgstr "Ez a fiók nem tiltható le." +#. Error in the browser when the chosen account belongs to a different server than the app that asked to sign in. accountHost and requestHost are server addresses. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:38 +msgid "This account is on {accountHost}, but the {productName} app is signing in to {requestHost}. Choose an account on {requestHost}." +msgstr "Ez a fiók a(z) {accountHost} címen található, de a(z) {productName} alkalmazás a(z) {requestHost} címre jelentkezik be. Válassz egy fiókot a(z) {requestHost} címről." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:418 msgid "This action cannot be undone. All associated data, including the bot user, will be permanently deleted." msgstr "Ez a művelet nem vonható vissza. Minden kapcsolódó adat, beleértve a bot felhasználót is, véglegesen törlődik." @@ -35551,11 +35637,6 @@ msgstr "Ez teljesen törli a háttérrendszerben tárolt prémiumállapotodat, b msgid "This code doesn't exist." msgstr "Ez a kód nem létezik." -#. Status shown under the browser sign-in code once its countdown reaches zero. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:68 -msgid "This code expired." -msgstr "Ez a kód lejárt." - #. Gift redemption error modal body for an invalid or already used code. #: src/features/gift/commands/GiftCommands.tsx:37 msgid "This code is invalid or already used." @@ -36075,6 +36156,11 @@ msgstr "Ez a visszaállítási link lejárt. A visszaállítási linkek 1 órán msgid "This shows how links appear: {linkPreviewExampleUrl}" msgstr "Így jelennek meg a hivatkozások: {linkPreviewExampleUrl}" +#. Error in the browser when the sign-in request from the desktop app no longer exists, because it expired or the app cancelled it. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:20 +msgid "This sign-in request expired or was cancelled in the {productName} app. Start again from the app." +msgstr "Ez a bejelentkezési kérés lejárt, vagy törölve lett a(z) {productName} alkalmazásban. Indítsa el újra az alkalmazásból." + #. Label above the community a sticker comes from in the sticker info card. #: src/features/expressions/components/ExpressionInfoCard.tsx:75 msgid "This sticker is from" @@ -38520,6 +38606,11 @@ msgstr "A kép URL-jének beillesztési helyén használd a(z) {url} helyőrzőt msgid "Use a dedicated modal to set a message history threshold date for members who don't have the {readMessageHistoryPermissionLabel} permission." msgstr "Külön ablakban állíthatod be az üzenetelőzmények küszöbdátumát a(z) {readMessageHistoryPermissionLabel} jogosultsággal nem rendelkező tagok számára." +#. Text button on the browser approval page that goes back to choosing which account signs in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:149 +msgid "Use a different account" +msgstr "Használj másik fiókot" + #: src/features/auth/flow/instance_selector/InstancePickerRows.tsx:267 msgid "Use a self-hosted instance URL" msgstr "Használj egy saját üzemeltetésű példány URL-címét" @@ -39296,10 +39387,6 @@ msgstr "A(z) {premiumProductFullName} megvásárlásához erősítsd meg az e-ma msgid "Verify your email to start DMs." msgstr "Közvetlen beszélgetések indításához erősítsd meg az e-mail-címedet." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:142 -msgid "Verifying code…" -msgstr "Kód ellenőrzése…" - #: src/features/auth/components/pages/ResetPasswordPage.tsx:145 msgid "Verifying your reset link…" msgstr "Visszaállítási link ellenőrzése…" @@ -40073,10 +40160,6 @@ msgstr "Várj egy pillanatot, mielőtt további üzeneteket törölsz." msgid "Wait between messages. Members with \"{bypassSlowmodePermissionLabel}\" can bypass this." msgstr "Várakozás az üzenetek között. A(z) „{bypassSlowmodePermissionLabel}” jogosultsággal rendelkező tagok ezt megkerülhetik." -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:445 -msgid "Waiting for browser approval." -msgstr "A böngésző jóváhagyására várunk." - #. Tooltip explaining that video / screen share controls are gated while the voice connection is not yet ready. #: src/features/voice/components/voice_connection_status/LocalParticipantControls.tsx:45 msgid "Waiting for connection..." @@ -40118,10 +40201,6 @@ msgstr "Felébresztés" msgid "Warning" msgstr "Figyelem" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:158 -msgid "Was this you?" -msgstr "Te voltál?" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:243 msgctxt "us-state" @@ -40959,10 +41038,6 @@ msgstr "Már van élethosszig tartó {premiumProductName} előfizetésed" msgid "You already have this connection." msgstr "Ez a kapcsolat már megvan." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:87 -msgid "You are about to authorize an app to sign in to your account. Only continue if you initiated this request from a device you control." -msgstr "Egy alkalmazásnak adsz engedélyt, hogy bejelentkezzen a fiókodba. Csak akkor folytasd, ha te kezdeményezted ezt a kérést egy általad ellenőrzött eszközről." - #. External link warning title. productName is the Fluxer product name. #: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:22 msgid "You are about to leave {productName}" @@ -41732,6 +41807,11 @@ msgstr "Régi díjszabás vonatkozik rád. A csomag jelenlegi ára: {currentSubs msgid "You're sending messages too quickly" msgstr "Túl gyorsan küldesz üzeneteket" +#. Title of the browser page after the user approved signing in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:282 +msgid "You're signed in" +msgstr "Bejelentkeztél" + #. Status text on the screen-share hover popout shown to the local streamer. Lightly playful tone. #: src/features/voice/components/StreamWatchHoverPopout.tsx:43 msgid "You're streaming!" diff --git a/fluxer_app/src/features/i18n/locales/id/messages.po b/fluxer_app/src/features/i18n/locales/id/messages.po index e8604b908..b81f72651 100644 --- a/fluxer_app/src/features/i18n/locales/id/messages.po +++ b/fluxer_app/src/features/i18n/locales/id/messages.po @@ -1573,7 +1573,7 @@ msgid "{imageCount, plural, one {# image} other {# images}}, {videoCount, plural msgstr "{imageCount, plural, one {# gambar} other {# gambar}}, {videoCount, plural, one {# video} other {# video}}" #. Explanation shown when the selected instance advertises no web app endpoint. Instance name is interpolated. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:76 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:61 msgid "{instanceName} does not publish a web address, so sign-in cannot be handed to a browser." msgstr "{instanceName} tidak memublikasikan alamat web, jadi masuk tidak dapat diserahkan ke peramban." @@ -2777,14 +2777,6 @@ msgstr "sematan kaya atau pratinjau tautan (bukan file yang diunggah)" msgid "A separate profile for each community" msgstr "Profil terpisah untuk setiap komunitas" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:164 -msgid "A sign-in request was made for your account. Only approve if you initiated it." -msgstr "Ada permintaan masuk untuk akunmu. Setujui hanya jika kamu yang memulainya." - -#: src/features/auth/flow/HandoffApprovalFlow.tsx:162 -msgid "A sign-in request was made from the following device. Only approve if you recognize it." -msgstr "Ada permintaan masuk dari perangkat berikut. Setujui hanya jika kamu mengenalinya." - #. Description for has:sticker. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:51 msgid "a sticker" @@ -4811,10 +4803,6 @@ msgstr "Terapkan ke semua komunitas" msgid "Approval required" msgstr "Persetujuan diperlukan" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:206 -msgid "Approve" -msgstr "Setujui" - #. Hint under the sign-in option on fluxer.com that pairs a newly installed app with the old installed app. productName is the app name. #: src/features/auth/flow/AuthLoginLayout.tsx:101 msgid "Approve this app from the {productName} app you already use. No password needed." @@ -7873,6 +7861,11 @@ msgstr "Memeriksa akses..." msgid "Checking screen recording permission..." msgstr "Memeriksa izin perekaman layar..." +#. Title while the browser looks up the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:224 +msgid "Checking the sign-in request…" +msgstr "Memeriksa permintaan masuk…" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -8847,6 +8840,11 @@ msgstr "Blok kode" msgid "Code expired" msgstr "Kode kedaluwarsa" +#. Label of the field in the browser where the user types the 12-character code shown in the desktop or mobile app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:28 +msgid "Code from the {productName} app" +msgstr "Kode dari aplikasi {productName}" + #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 @@ -9348,7 +9346,6 @@ msgstr "Sembunyikan lencana {premiumProductName} milikmu sepenuhnya dari penggun #: src/features/auth/components/pages/SsoCallbackPage.tsx:256 #: src/features/auth/components/pages/SsoCallbackPage.tsx:322 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:216 msgid "Completing sign-in…" msgstr "Menyelesaikan proses masuk…" @@ -9782,7 +9779,6 @@ msgstr "Menu konteks dapat dibuka dengan klik kiri (pada tombol) atau klik kanan #: src/features/auth/components/modals/DeviceRevokeModal.tsx:77 #: src/features/auth/components/modals/PasskeyPinModal.tsx:111 #: src/features/auth/components/pages/oauth_authorize_page/OAuthAccountStep.tsx:36 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/connection/components/modals/AddConnectionModal.tsx:384 #: src/features/i18n/utils/CommonMessageDescriptors.ts:726 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:413 @@ -9790,6 +9786,11 @@ msgstr "Menu konteks dapat dibuka dengan klik kiri (pada tombol) atau klik kanan msgid "Continue" msgstr "Lanjutkan" +#. Title in the desktop app while it waits for the user to sign in on the browser page it opened. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:177 +msgid "Continue in your browser" +msgstr "Lanjutkan di browser Anda" + #. Button in the gift time confirmation that proceeds to subscription checkout. #: src/features/app/components/dialogs/components/plutonium/hooks/useCheckoutActions.tsx:145 msgid "Continue to checkout" @@ -10437,7 +10438,7 @@ msgid "Couldn't close DM" msgstr "Tidak dapat menutup DM" #. Desktop handoff flow error shown when finalizing the sign-in fails after a valid code. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:21 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:34 msgid "Couldn't complete sign-in. Try again." msgstr "Tidak dapat menyelesaikan proses masuk. Coba lagi." @@ -10831,6 +10832,11 @@ msgstr "Tidak dapat memulai otorisasi {blueskyProviderName}" msgid "Couldn't start checkout" msgstr "Tidak dapat memulai pembayaran" +#. Shown in the desktop app when the browser sign-in request could not be created. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:66 +msgid "Couldn't start signing in with your browser." +msgstr "Tidak dapat memulai masuk melalui browser Anda." + #. Toast error shown when creating a new account connection fails. #: src/features/connection/commands/ConnectionCommands.ts:27 msgid "Couldn't start the connection" @@ -10942,7 +10948,7 @@ msgid "Couldn't upload banner" msgstr "Tidak dapat mengunggah banner" #. Desktop handoff flow error shown when verifying the pairing code fails for an unexpected reason. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:17 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:30 msgid "Couldn't verify that code. Try again." msgstr "Tidak dapat memverifikasi kode tersebut. Coba lagi." @@ -12503,7 +12509,6 @@ msgstr "Tata letak rapat" #. Short label in the settings dialog permission components. Keep the tone plain and specific. #: src/features/app/components/dialogs/shared/PermissionComponents.tsx:16 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:203 msgid "Deny" msgstr "Tolak" @@ -14910,15 +14915,16 @@ msgstr "Masukkan kode {digitCount} digit dari aplikasi autentikatormu atau salah msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Masukkan kode {digitCount} digit dari aplikasi autentikatormu." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:108 -msgid "Enter the code" -msgstr "Masukkan kode" - #. Inline validation error on the verification step of the DSA report flow when the code field is empty. #: src/features/moderation/components/pages/ReportPage.tsx:74 msgid "Enter the code before continuing." msgstr "Masukkan kode sebelum melanjutkan." +#. Title of the browser page where the user types the 12-character code the app shows under Signing in on another device. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +msgid "Enter the code from the {PRODUCT_NAME} app" +msgstr "Masukkan kode dari aplikasi {PRODUCT_NAME}" + #. Body text in the authentication sudo verification modal. Keep the tone plain and specific. #: src/features/auth/components/modals/SudoVerificationModal.tsx:56 msgid "Enter the code from your authenticator app." @@ -14933,10 +14939,6 @@ msgstr "Masukkan kode yang dikirim ke emailmu saat ini." msgid "Enter the code sent to your email address." msgstr "Masukkan kode yang dikirim ke alamat emailmu." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:111 -msgid "Enter the code shown in the app to continue." -msgstr "Masukkan kode yang ditampilkan di aplikasi untuk melanjutkan." - #: src/features/user/components/modals/BouncedEmailChangeModal.tsx:157 #: src/features/user/components/modals/EmailChangeModal.tsx:244 msgid "Enter the code we emailed to your new address." @@ -14959,6 +14961,11 @@ msgstr "Masukkan email baru yang ingin kamu gunakan. Kami akan mengirimkan kode msgid "Enter the PIN for your security key to continue." msgstr "Masukkan PIN kunci keamananmu untuk melanjutkan." +#. Title in the desktop app above the code the user types into a browser on another device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:228 +msgid "Enter this code in your browser" +msgstr "Masukkan kode ini di browser Anda" + #: src/features/auth/flow/HandoffCodeDisplay.tsx:132 msgid "Enter this code in your browser to complete sign-in." msgstr "Masukkan kode ini di browsermu untuk menyelesaikan proses masuk." @@ -15362,7 +15369,7 @@ msgstr "Kedaluwarsa antara {earliest} dan {latest}" msgid "Expires in {remaining}s" msgstr "Kedaluwarsa dalam {remaining} detik" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:374 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:250 msgid "Expires in {remainingSeconds}s" msgstr "Kadaluwarsa dalam {remainingSeconds}d" @@ -16165,7 +16172,7 @@ msgid "Fluxer" msgstr "Fluxer" #. Status shown when browser sign-in status polling gives up after repeated failures. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:72 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:57 msgid "Fluxer stopped checking whether the browser approved this sign-in. It didn't lose your code." msgstr "Fluxer berhenti memeriksa apakah browser menyetujui login ini. Kode Anda tidak hilang." @@ -16952,8 +16959,6 @@ msgstr "Buat tautan yang dapat dibagikan atau salin CSS kustom gabunganmu." msgid "Generate invite link" msgstr "Buat tautan undangan" -#. Button label that replaces an expired browser sign-in code with a fresh one. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:64 #: src/features/auth/flow/HandoffCodeDisplay.tsx:117 msgid "Generate new code" msgstr "Buat kode baru" @@ -17348,6 +17353,16 @@ msgstr "Kembali dan masukkan email yang valid." msgid "Go back to {productName} to continue." msgstr "Kembali ke {productName} untuk melanjutkan." +#. Shown after approving a sign-in for an app on another device, which signs in by itself shortly. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:292 +msgid "Go back to the {PRODUCT_NAME} app. It finishes signing in on its own." +msgstr "Kembali ke aplikasi {PRODUCT_NAME}. Masuk akan selesai dengan sendirinya." + +#. Shown after approving, when the browser has already handed the sign-in back to the desktop app. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:288 +msgid "Go back to the {PRODUCT_NAME} app. You can close this tab." +msgstr "Kembali ke aplikasi {PRODUCT_NAME}. Anda bisa menutup tab ini." + #. Accessible label for the community row of an expression info card, which opens a community the viewer is already a member of. {communityName} is the community name. #: src/features/expressions/components/ExpressionInfoCard.tsx:89 msgid "Go to {communityName}" @@ -19295,11 +19310,6 @@ msgstr "JSON tidak valid. Tempel respons lengkap dari URL di atas." msgid "Invalid or expired code" msgstr "Kode tidak valid atau kedaluwarsa" -#. Desktop handoff flow error shown when the entered pairing code is invalid or expired. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:13 -msgid "Invalid or expired code. Try again." -msgstr "Kode tidak valid atau kedaluwarsa. Coba lagi." - #. Short label in the authentication authorize flow. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/state/useAuthorizeFlow.ts:82 msgid "Invalid redirect_uri" @@ -20876,7 +20886,7 @@ msgstr "Format waktu lokal" msgid "Localization" msgstr "Lokalisasi" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:192 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:109 #: src/features/user/components/modals/tabs/DevicesTab.tsx:152 msgid "Location" msgstr "Lokasi" @@ -21034,6 +21044,11 @@ msgstr "Jadikan {userName} pemilik grup? Kamu akan kehilangan hak istimewa pemil msgid "Make group owner" msgstr "Jadikan pemilik grup" +#. Shown above the code on the browser approval page when the app cannot be signed in automatically. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:253 +msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." +msgstr "Pastikan kode ini cocok dengan yang ada di aplikasi {PRODUCT_NAME}." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" @@ -24668,6 +24683,11 @@ msgstr "Pada <0>{listPriceEffectiveDate} langgananmu akan berpindah dari {li msgid "On click" msgstr "Saat diklik" +#. One line explanation in the desktop app above the code. signInAddress is the web address of the sign-in page, such as web.fluxer.app/login?handoff=1. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:236 +msgid "On your other device, sign in at {signInAddress} and enter this code when asked." +msgstr "Di perangkat Anda yang lain, masuk di {signInAddress} dan masukkan kode ini saat diminta." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:715 msgid "Once deleted, the application and its credentials are permanently removed." msgstr "Setelah dihapus, aplikasi dan kredensialnya akan terhapus secara permanen." @@ -24733,6 +24753,11 @@ msgstr "Hanya @sebutan" msgid "Only applies on wide screens." msgstr "Hanya berlaku di layar lebar." +#. Warning under the title of the browser approval page, so people do not approve a sign-in someone else started. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:245 +msgid "Only continue if you started this sign-in on a device you control." +msgstr "Lanjutkan hanya jika Anda memulai login ini di perangkat yang Anda kendalikan." + #. Body copy in the mature content check modal. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:32 msgid "Only credit cards are accepted. Debit and prepaid cards cannot be used for the mature content check." @@ -24921,6 +24946,11 @@ msgstr "Buka {landmarkName}" msgid "Open {premiumProductFullName}" msgstr "Buka {premiumProductFullName}" +#. Button on the browser page after approving that opens the desktop app again if it did not come to the front. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:304 +msgid "Open {PRODUCT_NAME}" +msgstr "Buka {PRODUCT_NAME}" + #. Button label that opens the desktop app. productName is the app name. #. Button that hands SSO sign-in back to the mobile app. productName is the app name. #: src/features/auth/components/pages/SsoCallbackPage.tsx:47 @@ -25011,12 +25041,15 @@ msgstr "Buka opsi banner" msgid "Open bookmarks" msgstr "Buka bookmark" -#. Button label that opens the browser sign-in handoff page. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:56 #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:184 msgid "Open browser" msgstr "Buka browser" +#. Button in the desktop app that reopens the browser sign-in page while the app waits for the browser. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:53 +msgid "Open browser again" +msgstr "Buka kembali peramban" + #. Primary button in the screen-share picker on web. Hands off to the browser's native getDisplayMedia picker. #: src/features/voice/components/modals/ScreenSharePickerModal.tsx:209 msgid "Open browser picker" @@ -25392,10 +25425,6 @@ msgstr "Buka pengaturan suara & video" msgid "Open with {accountName} on {instanceName}" msgstr "Buka dengan {accountName} di {instanceName}" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:414 -msgid "Open your browser to finish signing in." -msgstr "Buka browser Anda untuk menyelesaikan login." - #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:137 msgid "Open your browser, sign in, then enter the code below to link your account." msgstr "Buka browsermu, masuk, lalu masukkan kode di bawah untuk menautkan akunmu." @@ -25421,7 +25450,7 @@ msgstr "Membuka halaman Anggota. Tekan Spasi atau Enter untuk membuka." #. Short label in the language tab. Keep it concise. #. Spellcheck engine option in the textarea spellcheck submenu. Uses the host operating system spellchecker. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:79 #: src/features/user/components/modals/tabs/LanguageTab.tsx:110 msgid "Operating system" @@ -26439,7 +26468,7 @@ msgstr "Paket" msgid "Plans, perks, gifts and your subscription all live on one page." msgstr "Paket, keuntungan, hadiah, dan langganan Anda semuanya ada di satu halaman." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:172 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:89 msgid "Platform" msgstr "Platform" @@ -31859,11 +31888,6 @@ msgstr "Tampilkan obrolan" msgid "Show chat with {count, plural, one {# unread message} other {# unread messages}}" msgstr "Tampilkan obrolan dengan {count, plural, one {# pesan belum dibaca} other {# pesan belum dibaca}}" -#. Button label that opens the manual browser handoff code fallback. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:60 -msgid "Show code" -msgstr "Tampilkan kode" - #. Developer voice status menu option for displaying the voice connection identifier. #: src/features/voice/components/voice_connection_status/VoiceConnectionStatusInner.tsx:76 msgid "Show connection ID" @@ -32306,7 +32330,9 @@ msgstr "Menampilkan banner di bagiannya sendiri di bawah header komunitas." msgid "Sidebar" msgstr "Bilah sisi" +#. Button in the browser that approves signing in to the desktop or mobile app that asked for it. #. Generic authentication action label. Use for buttons, links, page titles, and accessible labels. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:33 #: src/features/i18n/utils/CommonMessageDescriptors.ts:79 msgid "Sign in" msgstr "Masuk" @@ -32321,10 +32347,35 @@ msgstr "Masuk lagi" msgid "Sign in again as {accountLabel}" msgstr "Masuk lagi sebagai {accountLabel}" +#. Shown in the desktop app while it waits for the browser. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:193 +msgid "Sign in to {instanceName} in your browser and confirm. This app finishes signing in on its own." +msgstr "Masuk ke {instanceName} di browser Anda dan konfirmasi. Aplikasi ini akan menyelesaikan proses masuk dengan sendirinya." + +#. Shown in the desktop app above the code when the browser cannot return the sign-in automatically. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:189 +msgid "Sign in to {instanceName} in your browser, and check that it shows this code:" +msgstr "Masuk ke {instanceName} di browser Anda, dan periksa apakah kode ini ditampilkan:" + #: src/features/auth/flow/GiftHeader.tsx:33 msgid "Sign in to claim your gift" msgstr "Masuk untuk mengklaim hadiahmu" +#. Title of the browser page where the user approves signing in to an app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:71 +msgid "Sign in to the {PRODUCT_NAME} app" +msgstr "Masuk ke aplikasi {PRODUCT_NAME}" + +#. Title of the browser page where the user approves signing in to the desktop app that opened it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:58 +msgid "Sign in to the {PRODUCT_NAME} desktop app" +msgstr "Masuk ke aplikasi desktop {PRODUCT_NAME}" + +#. Title of the browser page where the user approves signing in to the mobile app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:65 +msgid "Sign in to the {PRODUCT_NAME} mobile app" +msgstr "Masuk ke aplikasi seluler {PRODUCT_NAME}" + #. Action label that starts passkey authentication. #: src/features/auth/AuthMessageDescriptors.ts:13 msgid "Sign in with a passkey" @@ -32403,14 +32454,10 @@ msgstr "Keluar dari perangkat lain yang terhubung ke akunmu" msgid "Sign out?" msgstr "Keluar?" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:234 -msgid "Sign-in approved" -msgstr "Permintaan masuk disetujui" - -#. Short label in the authentication handoff approval flow. Keep the tone plain and specific. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:26 -msgid "Sign-in code" -msgstr "Kode masuk" +#. Title of the browser page after the user cancelled the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:322 +msgid "Sign-in cancelled" +msgstr "Penyelesaian masuk dibatalkan" #. Section title for email address and password controls in the account security tab. Keep it concise. #: src/features/user/components/modals/tabs/account_security_tab/AccountSecuritySections.tsx:23 @@ -32433,10 +32480,6 @@ msgstr "Alur masuk" msgid "Sign-in method" msgstr "Metode masuk" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:84 -msgid "Sign-in request" -msgstr "Permintaan masuk" - #. Aria label on the signal-strength icon shown while the first latency sample is still pending. #: src/features/voice/components/SignalStrengthIcon.tsx:16 msgid "Signal strength loading" @@ -32453,6 +32496,21 @@ msgstr "Sudah masuk" msgid "Signed-in devices" msgstr "Perangkat yang sudah masuk" +#. Shown on the browser approval page above the buttons. name is the display name of the account that will be signed in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:137 +msgid "Signing in as {name}" +msgstr "Masuk sebagai {name}" + +#. Text button in the desktop app that shows a code to type into a browser on a different device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:207 +msgid "Signing in on another device?" +msgstr "Masuk di perangkat lain?" + +#. Title while the browser approves the sign-in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:228 +msgid "Signing in…" +msgstr "Masuk…" + #. Label for Bluesky OAuth signing key ID input. #: src/features/app/components/setup/SetupWizardSteps.tsx:1161 msgid "Signing key ID" @@ -33504,6 +33562,8 @@ msgstr "Mulai tes mikrofon" msgid "Start minimized" msgstr "Mulai diminimalkan" +#. Button on the browser page after cancelling that goes back to choosing an account. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:337 #: src/features/moderation/components/report/ReportStepDetails.tsx:326 #: src/features/moderation/components/report/ReportStepEmail.tsx:97 #: src/features/moderation/components/report/ReportStepVerification.tsx:134 @@ -34910,6 +34970,11 @@ msgstr "Thailand" msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Terima kasih telah membantu menjaga {productName} tetap aman. Kami akan meninjau laporanmu sesegera mungkin." +#. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 +msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." +msgstr "Kode itu tidak valid di {instanceHost}. Periksa kode di aplikasi {productName} dan coba lagi." + #. Body of the passkey page after the passkey prompt failed or was dismissed. Keep plain. #: src/features/auth/passkey_migration/PasskeyBridgePage.tsx:36 msgid "That didn't work. Try again or cancel." @@ -34953,11 +35018,6 @@ msgstr "Pesan itu tidak bisa dihapus" msgid "That message is gone, or you lost access to the conversation." msgstr "Pesan itu sudah tidak ada, atau kamu kehilangan akses ke percakapannya." -#. Error shown when a browser sign-in handoff code expires before it is approved. -#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 -msgid "That sign-in code expired. Try again." -msgstr "Kode masuk itu kedaluwarsa. Coba lagi." - #. End-of-list line in the saved messages popout after every bookmark has been shown. #. End-of-list line on the saved messages page after every bookmark has been shown. #: src/features/messaging/components/pages/SavedMessagesPage.tsx:35 @@ -34965,6 +35025,21 @@ msgstr "Kode masuk itu kedaluwarsa. Coba lagi." msgid "That's all of them." msgstr "Sudah semuanya." +#. Warning on the browser approval page when the app asked for a different account than the one chosen. requestedIdentifier is the email or username the app asked for, name is the chosen account's display name. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:131 +msgid "The {PRODUCT_NAME} app asked to sign in as {requestedIdentifier}, but you chose {name}." +msgstr "Aplikasi {PRODUCT_NAME} meminta untuk masuk sebagai {requestedIdentifier}, tetapi Anda memilih {name}." + +#. Explains where the code comes from, under the title of the browser page where it is typed. Signing in on another device is the label of a button in the app and must match its translation. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:187 +msgid "The {PRODUCT_NAME} app on your other device shows it under Signing in on another device. Only enter a code from a device you control." +msgstr "Aplikasi {PRODUCT_NAME} di perangkat Anda yang lain menampilkannya di bawah Masuk di perangkat lain. Hanya masukkan kode dari perangkat yang Anda kendalikan." + +#. Shown after the user cancelled the sign-in request in the browser. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:327 +msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." +msgstr "Aplikasi {PRODUCT_NAME} tidak masuk. Anda dapat menutup tab ini." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -34983,10 +35058,6 @@ msgstr "Aplikasi mengalami error" msgid "The app has crashed. Checking for updates that might fix this issue…" msgstr "Aplikasi mengalami error. Mencari pembaruan yang mungkin bisa memperbaiki masalah ini…" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:237 -msgid "The app should now be signed in to your account." -msgstr "Aplikasi seharusnya sudah masuk ke akunmu." - #. Activity log detail line under a lifted ban, for a temporary ban that had already ended on its own before it was lifted. A ban is the community ban, not the feature that blocks a user. {date} is when the ban ended, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:55 msgid "The ban had already expired on {date}" @@ -35184,6 +35255,16 @@ msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "Sumber berbagi layar berhenti mengirim video, jadi berbagi layarmu dihentikan." +#. Error shown in the desktop app when a browser sign-in request expires before it is approved in the browser. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 +msgid "The sign-in request expired before your browser approved it." +msgstr "Permintaan masuk kedaluwarsa sebelum disetujui oleh browser Anda." + +#. Error shown in the desktop app when the user pressed Cancel on the browser sign-in page. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:14 +msgid "The sign-in was cancelled in your browser." +msgstr "Tanda tangan dibatalkan di browser Anda." + #. Activity log detail line under a deleted sticker, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the sticker, shown as a clickable user chip. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts:100 msgid "The sticker was uploaded by {user}" @@ -35408,6 +35489,11 @@ msgstr "Pihak ketiga" msgid "This account can't be blocked." msgstr "Akun ini tidak dapat diblokir." +#. Error in the browser when the chosen account belongs to a different server than the app that asked to sign in. accountHost and requestHost are server addresses. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:38 +msgid "This account is on {accountHost}, but the {productName} app is signing in to {requestHost}. Choose an account on {requestHost}." +msgstr "Akun ini ada di {accountHost}, tetapi aplikasi {productName} masuk ke {requestHost}. Pilih akun di {requestHost}." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:418 msgid "This action cannot be undone. All associated data, including the bot user, will be permanently deleted." msgstr "Tindakan ini tidak dapat dibatalkan. Semua data terkait, termasuk pengguna bot, akan dihapus secara permanen." @@ -35551,11 +35637,6 @@ msgstr "Ini akan menghapus seluruh status premium backend kamu, termasuk jenis p msgid "This code doesn't exist." msgstr "Kode ini tidak ada." -#. Status shown under the browser sign-in code once its countdown reaches zero. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:68 -msgid "This code expired." -msgstr "Kode ini kedaluwarsa." - #. Gift redemption error modal body for an invalid or already used code. #: src/features/gift/commands/GiftCommands.tsx:37 msgid "This code is invalid or already used." @@ -36075,6 +36156,11 @@ msgstr "Tautan setel ulang ini telah kedaluwarsa. Tautan setel ulang berlaku sel msgid "This shows how links appear: {linkPreviewExampleUrl}" msgstr "Begini tampilan tautan: {linkPreviewExampleUrl}" +#. Error in the browser when the sign-in request from the desktop app no longer exists, because it expired or the app cancelled it. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:20 +msgid "This sign-in request expired or was cancelled in the {productName} app. Start again from the app." +msgstr "Permintaan masuk ini kedaluwarsa atau dibatalkan di aplikasi {productName}. Coba lagi dari aplikasi." + #. Label above the community a sticker comes from in the sticker info card. #: src/features/expressions/components/ExpressionInfoCard.tsx:75 msgid "This sticker is from" @@ -38520,6 +38606,11 @@ msgstr "Gunakan {url} di tempat URL gambar akan disisipkan." msgid "Use a dedicated modal to set a message history threshold date for members who don't have the {readMessageHistoryPermissionLabel} permission." msgstr "Gunakan modal khusus untuk menetapkan tanggal batas riwayat pesan bagi anggota yang tidak memiliki izin {readMessageHistoryPermissionLabel}." +#. Text button on the browser approval page that goes back to choosing which account signs in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:149 +msgid "Use a different account" +msgstr "Gunakan akun lain" + #: src/features/auth/flow/instance_selector/InstancePickerRows.tsx:267 msgid "Use a self-hosted instance URL" msgstr "Gunakan URL instance yang di-host sendiri" @@ -39296,10 +39387,6 @@ msgstr "Verifikasi emailmu untuk membeli {premiumProductFullName}." msgid "Verify your email to start DMs." msgstr "Verifikasi emailmu untuk memulai DM." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:142 -msgid "Verifying code…" -msgstr "Memverifikasi kode…" - #: src/features/auth/components/pages/ResetPasswordPage.tsx:145 msgid "Verifying your reset link…" msgstr "Memverifikasi tautan setel ulangmu…" @@ -40073,10 +40160,6 @@ msgstr "Tunggu sebentar sebelum menghapus pesan lagi." msgid "Wait between messages. Members with \"{bypassSlowmodePermissionLabel}\" can bypass this." msgstr "Jeda antar pesan. Anggota dengan \"{bypassSlowmodePermissionLabel}\" dapat melewati ini." -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:445 -msgid "Waiting for browser approval." -msgstr "Menunggu persetujuan browser." - #. Tooltip explaining that video / screen share controls are gated while the voice connection is not yet ready. #: src/features/voice/components/voice_connection_status/LocalParticipantControls.tsx:45 msgid "Waiting for connection..." @@ -40118,10 +40201,6 @@ msgstr "Bangunkan" msgid "Warning" msgstr "Peringatan" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:158 -msgid "Was this you?" -msgstr "Apakah ini kamu?" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:243 msgctxt "us-state" @@ -40959,10 +41038,6 @@ msgstr "Kamu sudah punya {premiumProductName} seumur hidup" msgid "You already have this connection." msgstr "Kamu sudah punya koneksi ini." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:87 -msgid "You are about to authorize an app to sign in to your account. Only continue if you initiated this request from a device you control." -msgstr "Kamu akan mengizinkan sebuah aplikasi untuk masuk ke akunmu. Lanjutkan hanya jika kamu yang memulai permintaan ini dari perangkat yang kamu kendalikan." - #. External link warning title. productName is the Fluxer product name. #: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:22 msgid "You are about to leave {productName}" @@ -41732,6 +41807,11 @@ msgstr "Kamu memakai tarif lama. Harga paket ini saat ini adalah {currentSubscri msgid "You're sending messages too quickly" msgstr "Kamu mengirim pesan terlalu cepat" +#. Title of the browser page after the user approved signing in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:282 +msgid "You're signed in" +msgstr "Anda telah masuk" + #. Status text on the screen-share hover popout shown to the local streamer. Lightly playful tone. #: src/features/voice/components/StreamWatchHoverPopout.tsx:43 msgid "You're streaming!" diff --git a/fluxer_app/src/features/i18n/locales/it/messages.po b/fluxer_app/src/features/i18n/locales/it/messages.po index e6c48f312..80aab1e27 100644 --- a/fluxer_app/src/features/i18n/locales/it/messages.po +++ b/fluxer_app/src/features/i18n/locales/it/messages.po @@ -1573,7 +1573,7 @@ msgid "{imageCount, plural, one {# image} other {# images}}, {videoCount, plural msgstr "{imageCount, plural, one {# immagine} other {# immagini}}, {videoCount, plural, one {# video} other {# video}}" #. Explanation shown when the selected instance advertises no web app endpoint. Instance name is interpolated. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:76 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:61 msgid "{instanceName} does not publish a web address, so sign-in cannot be handed to a browser." msgstr "{instanceName} non pubblica un indirizzo web, quindi l'accesso non può essere gestito tramite browser." @@ -2777,14 +2777,6 @@ msgstr "un contenuto incorporato avanzato o un’anteprima del link (non un file msgid "A separate profile for each community" msgstr "Un profilo separato per ogni community" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:164 -msgid "A sign-in request was made for your account. Only approve if you initiated it." -msgstr "È stata effettuata una richiesta di accesso per il tuo account. Approva solo se l'hai avviata tu." - -#: src/features/auth/flow/HandoffApprovalFlow.tsx:162 -msgid "A sign-in request was made from the following device. Only approve if you recognize it." -msgstr "È stata effettuata una richiesta di accesso dal seguente dispositivo. Approva solo se lo riconosci." - #. Description for has:sticker. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:51 msgid "a sticker" @@ -4811,10 +4803,6 @@ msgstr "Applica a tutte le community" msgid "Approval required" msgstr "Approvazione richiesta" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:206 -msgid "Approve" -msgstr "Approva" - #. Hint under the sign-in option on fluxer.com that pairs a newly installed app with the old installed app. productName is the app name. #: src/features/auth/flow/AuthLoginLayout.tsx:101 msgid "Approve this app from the {productName} app you already use. No password needed." @@ -7873,6 +7861,11 @@ msgstr "Controllo accesso..." msgid "Checking screen recording permission..." msgstr "Controllo dell'autorizzazione per la registrazione dello schermo..." +#. Title while the browser looks up the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:224 +msgid "Checking the sign-in request…" +msgstr "Verifica della richiesta di accesso in corso…" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -8847,6 +8840,11 @@ msgstr "Blocchi di codice" msgid "Code expired" msgstr "Codice scaduto" +#. Label of the field in the browser where the user types the 12-character code shown in the desktop or mobile app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:28 +msgid "Code from the {productName} app" +msgstr "Codice dall'app {productName}" + #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 @@ -9348,7 +9346,6 @@ msgstr "Nascondi completamente il tuo badge {premiumProductName} agli altri uten #: src/features/auth/components/pages/SsoCallbackPage.tsx:256 #: src/features/auth/components/pages/SsoCallbackPage.tsx:322 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:216 msgid "Completing sign-in…" msgstr "Accesso in corso…" @@ -9782,7 +9779,6 @@ msgstr "I menu contestuali si aprono con un clic sinistro (sui pulsanti) o destr #: src/features/auth/components/modals/DeviceRevokeModal.tsx:77 #: src/features/auth/components/modals/PasskeyPinModal.tsx:111 #: src/features/auth/components/pages/oauth_authorize_page/OAuthAccountStep.tsx:36 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/connection/components/modals/AddConnectionModal.tsx:384 #: src/features/i18n/utils/CommonMessageDescriptors.ts:726 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:413 @@ -9790,6 +9786,11 @@ msgstr "I menu contestuali si aprono con un clic sinistro (sui pulsanti) o destr msgid "Continue" msgstr "Continua" +#. Title in the desktop app while it waits for the user to sign in on the browser page it opened. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:177 +msgid "Continue in your browser" +msgstr "Continua nel browser" + #. Button in the gift time confirmation that proceeds to subscription checkout. #: src/features/app/components/dialogs/components/plutonium/hooks/useCheckoutActions.tsx:145 msgid "Continue to checkout" @@ -10437,7 +10438,7 @@ msgid "Couldn't close DM" msgstr "Impossibile chiudere il DM" #. Desktop handoff flow error shown when finalizing the sign-in fails after a valid code. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:21 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:34 msgid "Couldn't complete sign-in. Try again." msgstr "Accesso non completato. Riprova." @@ -10831,6 +10832,11 @@ msgstr "Impossibile avviare l'autorizzazione per {blueskyProviderName}" msgid "Couldn't start checkout" msgstr "Impossibile avviare il pagamento" +#. Shown in the desktop app when the browser sign-in request could not be created. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:66 +msgid "Couldn't start signing in with your browser." +msgstr "Impossibile avviare l'accesso tramite browser." + #. Toast error shown when creating a new account connection fails. #: src/features/connection/commands/ConnectionCommands.ts:27 msgid "Couldn't start the connection" @@ -10942,7 +10948,7 @@ msgid "Couldn't upload banner" msgstr "Impossibile caricare il banner" #. Desktop handoff flow error shown when verifying the pairing code fails for an unexpected reason. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:17 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:30 msgid "Couldn't verify that code. Try again." msgstr "Impossibile verificare il codice. Riprova." @@ -12503,7 +12509,6 @@ msgstr "Layout compatto" #. Short label in the settings dialog permission components. Keep the tone plain and specific. #: src/features/app/components/dialogs/shared/PermissionComponents.tsx:16 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:203 msgid "Deny" msgstr "Nega" @@ -14910,15 +14915,16 @@ msgstr "Inserisci il codice di {digitCount} cifre dalla tua app di autenticazion msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Inserisci il codice di {digitCount} cifre dalla tua app di autenticazione." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:108 -msgid "Enter the code" -msgstr "Inserisci il codice" - #. Inline validation error on the verification step of the DSA report flow when the code field is empty. #: src/features/moderation/components/pages/ReportPage.tsx:74 msgid "Enter the code before continuing." msgstr "Inserisci il codice prima di continuare." +#. Title of the browser page where the user types the 12-character code the app shows under Signing in on another device. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +msgid "Enter the code from the {PRODUCT_NAME} app" +msgstr "Inserisci il codice dall'app {PRODUCT_NAME}" + #. Body text in the authentication sudo verification modal. Keep the tone plain and specific. #: src/features/auth/components/modals/SudoVerificationModal.tsx:56 msgid "Enter the code from your authenticator app." @@ -14933,10 +14939,6 @@ msgstr "Inserisci il codice inviato alla tua email attuale." msgid "Enter the code sent to your email address." msgstr "Inserisci il codice inviato al tuo indirizzo email." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:111 -msgid "Enter the code shown in the app to continue." -msgstr "Inserisci il codice mostrato nell'app per continuare." - #: src/features/user/components/modals/BouncedEmailChangeModal.tsx:157 #: src/features/user/components/modals/EmailChangeModal.tsx:244 msgid "Enter the code we emailed to your new address." @@ -14959,6 +14961,11 @@ msgstr "Inserisci la nuova email che vuoi usare. Ti invieremo un codice lì." msgid "Enter the PIN for your security key to continue." msgstr "Inserisci il PIN della tua chiave di sicurezza per continuare." +#. Title in the desktop app above the code the user types into a browser on another device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:228 +msgid "Enter this code in your browser" +msgstr "Inserisci questo codice nel tuo browser" + #: src/features/auth/flow/HandoffCodeDisplay.tsx:132 msgid "Enter this code in your browser to complete sign-in." msgstr "Inserisci questo codice nel browser per completare l'accesso." @@ -15362,7 +15369,7 @@ msgstr "Scade tra {earliest} e {latest}" msgid "Expires in {remaining}s" msgstr "Scade tra {remaining}s" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:374 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:250 msgid "Expires in {remainingSeconds}s" msgstr "Scade tra {remainingSeconds}s" @@ -16165,7 +16172,7 @@ msgid "Fluxer" msgstr "Fluxer" #. Status shown when browser sign-in status polling gives up after repeated failures. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:72 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:57 msgid "Fluxer stopped checking whether the browser approved this sign-in. It didn't lose your code." msgstr "Fluxer ha smesso di controllare se il browser ha approvato l'accesso. Non ha perso il tuo codice." @@ -16952,8 +16959,6 @@ msgstr "Genera un link condivisibile o copia il tuo CSS personalizzato combinato msgid "Generate invite link" msgstr "Genera link d'invito" -#. Button label that replaces an expired browser sign-in code with a fresh one. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:64 #: src/features/auth/flow/HandoffCodeDisplay.tsx:117 msgid "Generate new code" msgstr "Genera nuovo codice" @@ -17348,6 +17353,16 @@ msgstr "Torna indietro e inserisci un'email valida." msgid "Go back to {productName} to continue." msgstr "Torna a {productName} per continuare." +#. Shown after approving a sign-in for an app on another device, which signs in by itself shortly. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:292 +msgid "Go back to the {PRODUCT_NAME} app. It finishes signing in on its own." +msgstr "Torna all'app {PRODUCT_NAME}. Il processo di accesso si completerà da solo." + +#. Shown after approving, when the browser has already handed the sign-in back to the desktop app. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:288 +msgid "Go back to the {PRODUCT_NAME} app. You can close this tab." +msgstr "Torna all'app {PRODUCT_NAME}. Puoi chiudere questa scheda." + #. Accessible label for the community row of an expression info card, which opens a community the viewer is already a member of. {communityName} is the community name. #: src/features/expressions/components/ExpressionInfoCard.tsx:89 msgid "Go to {communityName}" @@ -19295,11 +19310,6 @@ msgstr "JSON non valido. Incolla la risposta completa dall'URL qui sopra." msgid "Invalid or expired code" msgstr "Codice non valido o scaduto" -#. Desktop handoff flow error shown when the entered pairing code is invalid or expired. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:13 -msgid "Invalid or expired code. Try again." -msgstr "Codice non valido o scaduto. Riprova." - #. Short label in the authentication authorize flow. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/state/useAuthorizeFlow.ts:82 msgid "Invalid redirect_uri" @@ -20876,7 +20886,7 @@ msgstr "Formato ora locale" msgid "Localization" msgstr "Localizzazione" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:192 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:109 #: src/features/user/components/modals/tabs/DevicesTab.tsx:152 msgid "Location" msgstr "Posizione" @@ -21034,6 +21044,11 @@ msgstr "Rendere {userName} il proprietario del gruppo? Perderai i privilegi di p msgid "Make group owner" msgstr "Nomina proprietario del gruppo" +#. Shown above the code on the browser approval page when the app cannot be signed in automatically. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:253 +msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." +msgstr "Assicurati che questo codice corrisponda a quello nell'app {PRODUCT_NAME}." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" @@ -24668,6 +24683,11 @@ msgstr "Il <0>{listPriceEffectiveDate} il tuo abbonamento passerà da {listP msgid "On click" msgstr "Al clic" +#. One line explanation in the desktop app above the code. signInAddress is the web address of the sign-in page, such as web.fluxer.app/login?handoff=1. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:236 +msgid "On your other device, sign in at {signInAddress} and enter this code when asked." +msgstr "Sul tuo altro dispositivo, accedi a {signInAddress} e inserisci questo codice quando richiesto." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:715 msgid "Once deleted, the application and its credentials are permanently removed." msgstr "Una volta eliminata, l'applicazione e le sue credenziali vengono rimosse in modo permanente." @@ -24733,6 +24753,11 @@ msgstr "Solo @menzioni" msgid "Only applies on wide screens." msgstr "Si applica solo su schermi ampi." +#. Warning under the title of the browser approval page, so people do not approve a sign-in someone else started. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:245 +msgid "Only continue if you started this sign-in on a device you control." +msgstr "Continua solo se hai avviato questa accesso su un dispositivo che controlli." + #. Body copy in the mature content check modal. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:32 msgid "Only credit cards are accepted. Debit and prepaid cards cannot be used for the mature content check." @@ -24921,6 +24946,11 @@ msgstr "Apri {landmarkName}" msgid "Open {premiumProductFullName}" msgstr "Apri {premiumProductFullName}" +#. Button on the browser page after approving that opens the desktop app again if it did not come to the front. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:304 +msgid "Open {PRODUCT_NAME}" +msgstr "Apri {PRODUCT_NAME}" + #. Button label that opens the desktop app. productName is the app name. #. Button that hands SSO sign-in back to the mobile app. productName is the app name. #: src/features/auth/components/pages/SsoCallbackPage.tsx:47 @@ -25011,12 +25041,15 @@ msgstr "Apri opzioni banner" msgid "Open bookmarks" msgstr "Apri i messaggi salvati" -#. Button label that opens the browser sign-in handoff page. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:56 #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:184 msgid "Open browser" msgstr "Apri il browser" +#. Button in the desktop app that reopens the browser sign-in page while the app waits for the browser. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:53 +msgid "Open browser again" +msgstr "Apri di nuovo il browser" + #. Primary button in the screen-share picker on web. Hands off to the browser's native getDisplayMedia picker. #: src/features/voice/components/modals/ScreenSharePickerModal.tsx:209 msgid "Open browser picker" @@ -25392,10 +25425,6 @@ msgstr "Apri le impostazioni audio e video" msgid "Open with {accountName} on {instanceName}" msgstr "Apri con {accountName} su {instanceName}" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:414 -msgid "Open your browser to finish signing in." -msgstr "Apri il browser per completare l'accesso." - #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:137 msgid "Open your browser, sign in, then enter the code below to link your account." msgstr "Apri il browser, accedi, quindi inserisci il codice qui sotto per collegare il tuo account." @@ -25421,7 +25450,7 @@ msgstr "Apre la pagina Membri. Premi Spazio o Invio per aprire." #. Short label in the language tab. Keep it concise. #. Spellcheck engine option in the textarea spellcheck submenu. Uses the host operating system spellchecker. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:79 #: src/features/user/components/modals/tabs/LanguageTab.tsx:110 msgid "Operating system" @@ -26439,7 +26468,7 @@ msgstr "Piano" msgid "Plans, perks, gifts and your subscription all live on one page." msgstr "Piani, vantaggi, regali e il tuo abbonamento si trovano tutti in un'unica pagina." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:172 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:89 msgid "Platform" msgstr "Piattaforma" @@ -31859,11 +31888,6 @@ msgstr "Mostra chat" msgid "Show chat with {count, plural, one {# unread message} other {# unread messages}}" msgstr "Mostra chat con {count, plural, one {# messaggio non letto} other {# messaggi non letti}}" -#. Button label that opens the manual browser handoff code fallback. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:60 -msgid "Show code" -msgstr "Mostra codice" - #. Developer voice status menu option for displaying the voice connection identifier. #: src/features/voice/components/voice_connection_status/VoiceConnectionStatusInner.tsx:76 msgid "Show connection ID" @@ -32306,7 +32330,9 @@ msgstr "Mostra il banner in una sezione dedicata sotto l'intestazione della comm msgid "Sidebar" msgstr "Barra laterale" +#. Button in the browser that approves signing in to the desktop or mobile app that asked for it. #. Generic authentication action label. Use for buttons, links, page titles, and accessible labels. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:33 #: src/features/i18n/utils/CommonMessageDescriptors.ts:79 msgid "Sign in" msgstr "Accedi" @@ -32321,10 +32347,35 @@ msgstr "Accedi di nuovo" msgid "Sign in again as {accountLabel}" msgstr "Accedi di nuovo come {accountLabel}" +#. Shown in the desktop app while it waits for the browser. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:193 +msgid "Sign in to {instanceName} in your browser and confirm. This app finishes signing in on its own." +msgstr "Accedi a {instanceName} nel tuo browser e conferma. Questa app completerà l'accesso da sola." + +#. Shown in the desktop app above the code when the browser cannot return the sign-in automatically. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:189 +msgid "Sign in to {instanceName} in your browser, and check that it shows this code:" +msgstr "Accedi a {instanceName} nel tuo browser e verifica che venga visualizzato questo codice:" + #: src/features/auth/flow/GiftHeader.tsx:33 msgid "Sign in to claim your gift" msgstr "Accedi per riscattare il tuo regalo" +#. Title of the browser page where the user approves signing in to an app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:71 +msgid "Sign in to the {PRODUCT_NAME} app" +msgstr "Accedi all'app {PRODUCT_NAME}" + +#. Title of the browser page where the user approves signing in to the desktop app that opened it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:58 +msgid "Sign in to the {PRODUCT_NAME} desktop app" +msgstr "Accedi all'app desktop {PRODUCT_NAME}" + +#. Title of the browser page where the user approves signing in to the mobile app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:65 +msgid "Sign in to the {PRODUCT_NAME} mobile app" +msgstr "Accedi all'app mobile {PRODUCT_NAME}" + #. Action label that starts passkey authentication. #: src/features/auth/AuthMessageDescriptors.ts:13 msgid "Sign in with a passkey" @@ -32403,14 +32454,10 @@ msgstr "Esci da altri dispositivi collegati al tuo account" msgid "Sign out?" msgstr "Vuoi disconnetterti?" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:234 -msgid "Sign-in approved" -msgstr "Accesso approvato" - -#. Short label in the authentication handoff approval flow. Keep the tone plain and specific. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:26 -msgid "Sign-in code" -msgstr "Codice di accesso" +#. Title of the browser page after the user cancelled the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:322 +msgid "Sign-in cancelled" +msgstr "Accesso annullato" #. Section title for email address and password controls in the account security tab. Keep it concise. #: src/features/user/components/modals/tabs/account_security_tab/AccountSecuritySections.tsx:23 @@ -32433,10 +32480,6 @@ msgstr "Flusso di accesso" msgid "Sign-in method" msgstr "Metodo di accesso" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:84 -msgid "Sign-in request" -msgstr "Richiesta di accesso" - #. Aria label on the signal-strength icon shown while the first latency sample is still pending. #: src/features/voice/components/SignalStrengthIcon.tsx:16 msgid "Signal strength loading" @@ -32453,6 +32496,21 @@ msgstr "Accesso effettuato" msgid "Signed-in devices" msgstr "Dispositivi connessi" +#. Shown on the browser approval page above the buttons. name is the display name of the account that will be signed in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:137 +msgid "Signing in as {name}" +msgstr "Accesso come {name}" + +#. Text button in the desktop app that shows a code to type into a browser on a different device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:207 +msgid "Signing in on another device?" +msgstr "Accedi da un altro dispositivo?" + +#. Title while the browser approves the sign-in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:228 +msgid "Signing in…" +msgstr "Accesso in corso…" + #. Label for Bluesky OAuth signing key ID input. #: src/features/app/components/setup/SetupWizardSteps.tsx:1161 msgid "Signing key ID" @@ -33504,6 +33562,8 @@ msgstr "Avvia test del microfono" msgid "Start minimized" msgstr "Avvia ridotto a icona" +#. Button on the browser page after cancelling that goes back to choosing an account. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:337 #: src/features/moderation/components/report/ReportStepDetails.tsx:326 #: src/features/moderation/components/report/ReportStepEmail.tsx:97 #: src/features/moderation/components/report/ReportStepVerification.tsx:134 @@ -34910,6 +34970,11 @@ msgstr "Tailandese" msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Grazie per aver contribuito a rendere {productName} un luogo sicuro. Esamineremo la tua segnalazione il prima possibile." +#. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 +msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." +msgstr "Quel codice non è valido su {instanceHost}. Controlla il codice nell'app {productName} e riprova." + #. Body of the passkey page after the passkey prompt failed or was dismissed. Keep plain. #: src/features/auth/passkey_migration/PasskeyBridgePage.tsx:36 msgid "That didn't work. Try again or cancel." @@ -34953,11 +35018,6 @@ msgstr "Non è stato possibile eliminare il messaggio" msgid "That message is gone, or you lost access to the conversation." msgstr "Il messaggio non esiste più o hai perso l'accesso alla conversazione." -#. Error shown when a browser sign-in handoff code expires before it is approved. -#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 -msgid "That sign-in code expired. Try again." -msgstr "Quel codice di accesso è scaduto. Riprova." - #. End-of-list line in the saved messages popout after every bookmark has been shown. #. End-of-list line on the saved messages page after every bookmark has been shown. #: src/features/messaging/components/pages/SavedMessagesPage.tsx:35 @@ -34965,6 +35025,21 @@ msgstr "Quel codice di accesso è scaduto. Riprova." msgid "That's all of them." msgstr "Questo è tutto." +#. Warning on the browser approval page when the app asked for a different account than the one chosen. requestedIdentifier is the email or username the app asked for, name is the chosen account's display name. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:131 +msgid "The {PRODUCT_NAME} app asked to sign in as {requestedIdentifier}, but you chose {name}." +msgstr "L'app {PRODUCT_NAME} ha richiesto di accedere come {requestedIdentifier}, ma hai scelto {name}." + +#. Explains where the code comes from, under the title of the browser page where it is typed. Signing in on another device is the label of a button in the app and must match its translation. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:187 +msgid "The {PRODUCT_NAME} app on your other device shows it under Signing in on another device. Only enter a code from a device you control." +msgstr "L'app {PRODUCT_NAME} sul tuo altro dispositivo la mostra sotto \"Accesso da un altro dispositivo\". Inserisci solo un codice da un dispositivo che controlli." + +#. Shown after the user cancelled the sign-in request in the browser. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:327 +msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." +msgstr "L'app {PRODUCT_NAME} non è stata autenticata. Puoi chiudere questa scheda." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -34983,10 +35058,6 @@ msgstr "L'app si è bloccata" msgid "The app has crashed. Checking for updates that might fix this issue…" msgstr "L'app si è bloccata. Verifico la disponibilità di aggiornamenti che potrebbero risolvere il problema…" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:237 -msgid "The app should now be signed in to your account." -msgstr "L'app dovrebbe ora aver effettuato l'accesso al tuo account." - #. Activity log detail line under a lifted ban, for a temporary ban that had already ended on its own before it was lifted. A ban is the community ban, not the feature that blocks a user. {date} is when the ban ended, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:55 msgid "The ban had already expired on {date}" @@ -35184,6 +35255,16 @@ msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "La sorgente della condivisione dello schermo ha smesso di inviare video, quindi la condivisione dello schermo è stata interrotta." +#. Error shown in the desktop app when a browser sign-in request expires before it is approved in the browser. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 +msgid "The sign-in request expired before your browser approved it." +msgstr "La richiesta di accesso è scaduta prima che il tuo browser la approvasse." + +#. Error shown in the desktop app when the user pressed Cancel on the browser sign-in page. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:14 +msgid "The sign-in was cancelled in your browser." +msgstr "L'accesso è stato annullato nel tuo browser." + #. Activity log detail line under a deleted sticker, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the sticker, shown as a clickable user chip. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts:100 msgid "The sticker was uploaded by {user}" @@ -35408,6 +35489,11 @@ msgstr "Terze parti" msgid "This account can't be blocked." msgstr "Questo account non può essere bloccato." +#. Error in the browser when the chosen account belongs to a different server than the app that asked to sign in. accountHost and requestHost are server addresses. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:38 +msgid "This account is on {accountHost}, but the {productName} app is signing in to {requestHost}. Choose an account on {requestHost}." +msgstr "Questo account si trova su {accountHost}, ma l'app {productName} sta effettuando l'accesso a {requestHost}. Scegli un account su {requestHost}." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:418 msgid "This action cannot be undone. All associated data, including the bot user, will be permanently deleted." msgstr "Questa azione non può essere annullata. Tutti i dati associati, incluso l'utente bot, verranno eliminati definitivamente." @@ -35551,11 +35637,6 @@ msgstr "Questo azzera completamente il tuo stato premium nel backend, inclusi ti msgid "This code doesn't exist." msgstr "Questo codice non esiste." -#. Status shown under the browser sign-in code once its countdown reaches zero. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:68 -msgid "This code expired." -msgstr "Questo codice è scaduto." - #. Gift redemption error modal body for an invalid or already used code. #: src/features/gift/commands/GiftCommands.tsx:37 msgid "This code is invalid or already used." @@ -36075,6 +36156,11 @@ msgstr "Questo link di reimpostazione è scaduto. I link di reimpostazione duran msgid "This shows how links appear: {linkPreviewExampleUrl}" msgstr "Ecco come appaiono i link: {linkPreviewExampleUrl}" +#. Error in the browser when the sign-in request from the desktop app no longer exists, because it expired or the app cancelled it. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:20 +msgid "This sign-in request expired or was cancelled in the {productName} app. Start again from the app." +msgstr "Questa richiesta di accesso è scaduta o è stata annullata nell'app {productName}. Riprova dall'app." + #. Label above the community a sticker comes from in the sticker info card. #: src/features/expressions/components/ExpressionInfoCard.tsx:75 msgid "This sticker is from" @@ -38520,6 +38606,11 @@ msgstr "Usa {url} dove l'URL dell'immagine dovrebbe essere inserito." msgid "Use a dedicated modal to set a message history threshold date for members who don't have the {readMessageHistoryPermissionLabel} permission." msgstr "Usa una finestra dedicata per impostare una data limite per la cronologia dei messaggi per i membri che non hanno il permesso {readMessageHistoryPermissionLabel}." +#. Text button on the browser approval page that goes back to choosing which account signs in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:149 +msgid "Use a different account" +msgstr "Usa un altro account" + #: src/features/auth/flow/instance_selector/InstancePickerRows.tsx:267 msgid "Use a self-hosted instance URL" msgstr "Usa un URL di istanza self-hosted" @@ -39296,10 +39387,6 @@ msgstr "Verifica la tua email per acquistare {premiumProductFullName}." msgid "Verify your email to start DMs." msgstr "Verifica la tua email per avviare DM." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:142 -msgid "Verifying code…" -msgstr "Verifica codice…" - #: src/features/auth/components/pages/ResetPasswordPage.tsx:145 msgid "Verifying your reset link…" msgstr "Verifica del link di reimpostazione…" @@ -40073,10 +40160,6 @@ msgstr "Attendi un momento prima di eliminare altri messaggi." msgid "Wait between messages. Members with \"{bypassSlowmodePermissionLabel}\" can bypass this." msgstr "Tempo di attesa tra i messaggi. I membri con il permesso \"{bypassSlowmodePermissionLabel}\" possono ignorarlo." -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:445 -msgid "Waiting for browser approval." -msgstr "In attesa dell'approvazione del browser." - #. Tooltip explaining that video / screen share controls are gated while the voice connection is not yet ready. #: src/features/voice/components/voice_connection_status/LocalParticipantControls.tsx:45 msgid "Waiting for connection..." @@ -40118,10 +40201,6 @@ msgstr "Riattivazione" msgid "Warning" msgstr "Avviso" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:158 -msgid "Was this you?" -msgstr "Sei stato tu?" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:243 msgctxt "us-state" @@ -40959,10 +41038,6 @@ msgstr "Hai già {premiumProductName} a vita" msgid "You already have this connection." msgstr "Hai già questa connessione." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:87 -msgid "You are about to authorize an app to sign in to your account. Only continue if you initiated this request from a device you control." -msgstr "Stai per autorizzare un'app ad accedere al tuo account. Continua solo se hai avviato questa richiesta da un dispositivo che controlli." - #. External link warning title. productName is the Fluxer product name. #: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:22 msgid "You are about to leave {productName}" @@ -41732,6 +41807,11 @@ msgstr "Hai un piano con una tariffa precedente. Il prezzo attuale per questo pi msgid "You're sending messages too quickly" msgstr "Stai inviando messaggi troppo velocemente" +#. Title of the browser page after the user approved signing in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:282 +msgid "You're signed in" +msgstr "Sei connesso" + #. Status text on the screen-share hover popout shown to the local streamer. Lightly playful tone. #: src/features/voice/components/StreamWatchHoverPopout.tsx:43 msgid "You're streaming!" diff --git a/fluxer_app/src/features/i18n/locales/ja/messages.po b/fluxer_app/src/features/i18n/locales/ja/messages.po index f1e644eea..5b4d48eed 100644 --- a/fluxer_app/src/features/i18n/locales/ja/messages.po +++ b/fluxer_app/src/features/i18n/locales/ja/messages.po @@ -1573,7 +1573,7 @@ msgid "{imageCount, plural, one {# image} other {# images}}, {videoCount, plural msgstr "{imageCount, plural, one {# 画像} other {# 画像}}、{videoCount, plural, one {# 動画} other {# 動画}}" #. Explanation shown when the selected instance advertises no web app endpoint. Instance name is interpolated. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:76 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:61 msgid "{instanceName} does not publish a web address, so sign-in cannot be handed to a browser." msgstr "{instanceName} にはウェブアドレスが公開されていないため、ブラウザでのサインイン処理ができません。" @@ -2777,14 +2777,6 @@ msgstr "リッチな埋め込みまたはリンクプレビュー(アップロ msgid "A separate profile for each community" msgstr "コミュニティごとのプロフィール" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:164 -msgid "A sign-in request was made for your account. Only approve if you initiated it." -msgstr "アカウントへのサインインリクエストがありました。自分で行った操作である場合のみ承認してください。" - -#: src/features/auth/flow/HandoffApprovalFlow.tsx:162 -msgid "A sign-in request was made from the following device. Only approve if you recognize it." -msgstr "以下のデバイスからサインインが要求されました。身に覚えがある場合のみ承認してください。" - #. Description for has:sticker. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:51 msgid "a sticker" @@ -4811,10 +4803,6 @@ msgstr "すべてのコミュニティに適用" msgid "Approval required" msgstr "承認が必要" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:206 -msgid "Approve" -msgstr "承認" - #. Hint under the sign-in option on fluxer.com that pairs a newly installed app with the old installed app. productName is the app name. #: src/features/auth/flow/AuthLoginLayout.tsx:101 msgid "Approve this app from the {productName} app you already use. No password needed." @@ -7873,6 +7861,11 @@ msgstr "アクセス権を確認中…" msgid "Checking screen recording permission..." msgstr "画面録画の許可を確認しています…" +#. Title while the browser looks up the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:224 +msgid "Checking the sign-in request…" +msgstr "サインインリクエストを確認しています…" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -8847,6 +8840,11 @@ msgstr "コードブロック" msgid "Code expired" msgstr "コードの有効期限が切れました" +#. Label of the field in the browser where the user types the 12-character code shown in the desktop or mobile app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:28 +msgid "Code from the {productName} app" +msgstr "{productName}アプリのコード" + #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 @@ -9348,7 +9346,6 @@ msgstr "{premiumProductName}バッジを他のユーザーから完全に非表 #: src/features/auth/components/pages/SsoCallbackPage.tsx:256 #: src/features/auth/components/pages/SsoCallbackPage.tsx:322 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:216 msgid "Completing sign-in…" msgstr "サインインを完了しています…" @@ -9782,7 +9779,6 @@ msgstr "左クリック(ボタン上)または右クリック(その他の #: src/features/auth/components/modals/DeviceRevokeModal.tsx:77 #: src/features/auth/components/modals/PasskeyPinModal.tsx:111 #: src/features/auth/components/pages/oauth_authorize_page/OAuthAccountStep.tsx:36 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/connection/components/modals/AddConnectionModal.tsx:384 #: src/features/i18n/utils/CommonMessageDescriptors.ts:726 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:413 @@ -9790,6 +9786,11 @@ msgstr "左クリック(ボタン上)または右クリック(その他の msgid "Continue" msgstr "続行" +#. Title in the desktop app while it waits for the user to sign in on the browser page it opened. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:177 +msgid "Continue in your browser" +msgstr "ブラウザで続ける" + #. Button in the gift time confirmation that proceeds to subscription checkout. #: src/features/app/components/dialogs/components/plutonium/hooks/useCheckoutActions.tsx:145 msgid "Continue to checkout" @@ -10437,7 +10438,7 @@ msgid "Couldn't close DM" msgstr "DMを閉じられませんでした" #. Desktop handoff flow error shown when finalizing the sign-in fails after a valid code. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:21 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:34 msgid "Couldn't complete sign-in. Try again." msgstr "サインインを完了できませんでした。もう一度お試しください。" @@ -10831,6 +10832,11 @@ msgstr "{blueskyProviderName}の認証を開始できませんでした" msgid "Couldn't start checkout" msgstr "チェックアウトを開始できませんでした" +#. Shown in the desktop app when the browser sign-in request could not be created. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:66 +msgid "Couldn't start signing in with your browser." +msgstr "ブラウザでのサインインを開始できませんでした。" + #. Toast error shown when creating a new account connection fails. #: src/features/connection/commands/ConnectionCommands.ts:27 msgid "Couldn't start the connection" @@ -10942,7 +10948,7 @@ msgid "Couldn't upload banner" msgstr "バナーをアップロードできませんでした" #. Desktop handoff flow error shown when verifying the pairing code fails for an unexpected reason. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:17 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:30 msgid "Couldn't verify that code. Try again." msgstr "コードを確認できませんでした。もう一度お試しください。" @@ -12503,7 +12509,6 @@ msgstr "コンパクト表示" #. Short label in the settings dialog permission components. Keep the tone plain and specific. #: src/features/app/components/dialogs/shared/PermissionComponents.tsx:16 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:203 msgid "Deny" msgstr "拒否" @@ -14910,15 +14915,16 @@ msgstr "認証アプリの{digitCount}桁のコード、またはバックアッ msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "認証アプリに表示された{digitCount}桁のコードを入力してください。" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:108 -msgid "Enter the code" -msgstr "コードを入力" - #. Inline validation error on the verification step of the DSA report flow when the code field is empty. #: src/features/moderation/components/pages/ReportPage.tsx:74 msgid "Enter the code before continuing." msgstr "続行する前にコードを入力してください。" +#. Title of the browser page where the user types the 12-character code the app shows under Signing in on another device. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +msgid "Enter the code from the {PRODUCT_NAME} app" +msgstr "{PRODUCT_NAME}アプリからコードを入力してください" + #. Body text in the authentication sudo verification modal. Keep the tone plain and specific. #: src/features/auth/components/modals/SudoVerificationModal.tsx:56 msgid "Enter the code from your authenticator app." @@ -14933,10 +14939,6 @@ msgstr "現在のメールアドレスに送信されたコードを入力して msgid "Enter the code sent to your email address." msgstr "メールアドレスに送信されたコードを入力してください。" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:111 -msgid "Enter the code shown in the app to continue." -msgstr "アプリに表示されているコードを入力して続行してください。" - #: src/features/user/components/modals/BouncedEmailChangeModal.tsx:157 #: src/features/user/components/modals/EmailChangeModal.tsx:244 msgid "Enter the code we emailed to your new address." @@ -14959,6 +14961,11 @@ msgstr "新しいメールアドレスを入力してください。このアド msgid "Enter the PIN for your security key to continue." msgstr "セキュリティキーのPINを入力して続行してください。" +#. Title in the desktop app above the code the user types into a browser on another device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:228 +msgid "Enter this code in your browser" +msgstr "ブラウザでこのコードを入力してください" + #: src/features/auth/flow/HandoffCodeDisplay.tsx:132 msgid "Enter this code in your browser to complete sign-in." msgstr "サインインを完了するには、ブラウザでこのコードを入力してください。" @@ -15362,7 +15369,7 @@ msgstr "有効期限: {earliest}〜{latest}" msgid "Expires in {remaining}s" msgstr "{remaining}秒で期限切れ" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:374 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:250 msgid "Expires in {remainingSeconds}s" msgstr "{remainingSeconds}秒で期限切れ" @@ -16165,7 +16172,7 @@ msgid "Fluxer" msgstr "Fluxer" #. Status shown when browser sign-in status polling gives up after repeated failures. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:72 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:57 msgid "Fluxer stopped checking whether the browser approved this sign-in. It didn't lose your code." msgstr "Fluxer はブラウザでのサインイン承認の確認を停止しました。コードは失われていません。" @@ -16952,8 +16959,6 @@ msgstr "共有用のリンクを生成するか、まとめたカスタムCSSを msgid "Generate invite link" msgstr "招待リンクを生成" -#. Button label that replaces an expired browser sign-in code with a fresh one. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:64 #: src/features/auth/flow/HandoffCodeDisplay.tsx:117 msgid "Generate new code" msgstr "新しいコードを生成" @@ -17348,6 +17353,16 @@ msgstr "戻って有効なメールアドレスを入力してください。" msgid "Go back to {productName} to continue." msgstr "{productName}に戻って続行してください。" +#. Shown after approving a sign-in for an app on another device, which signs in by itself shortly. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:292 +msgid "Go back to the {PRODUCT_NAME} app. It finishes signing in on its own." +msgstr "{PRODUCT_NAME}アプリに戻る。自動的にサインインが完了します。" + +#. Shown after approving, when the browser has already handed the sign-in back to the desktop app. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:288 +msgid "Go back to the {PRODUCT_NAME} app. You can close this tab." +msgstr "{PRODUCT_NAME}アプリに戻る。このタブは閉じても大丈夫です。" + #. Accessible label for the community row of an expression info card, which opens a community the viewer is already a member of. {communityName} is the community name. #: src/features/expressions/components/ExpressionInfoCard.tsx:89 msgid "Go to {communityName}" @@ -19295,11 +19310,6 @@ msgstr "JSONが無効です。上記のURLからの応答をすべて貼り付 msgid "Invalid or expired code" msgstr "コードが無効または期限切れです" -#. Desktop handoff flow error shown when the entered pairing code is invalid or expired. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:13 -msgid "Invalid or expired code. Try again." -msgstr "コードが無効であるか、期限が切れています。もう一度お試しください。" - #. Short label in the authentication authorize flow. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/state/useAuthorizeFlow.ts:82 msgid "Invalid redirect_uri" @@ -20876,7 +20886,7 @@ msgstr "時刻表示形式" msgid "Localization" msgstr "言語と地域" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:192 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:109 #: src/features/user/components/modals/tabs/DevicesTab.tsx:152 msgid "Location" msgstr "場所" @@ -21034,6 +21044,11 @@ msgstr "{userName}さんをグループのオーナーにしますか?オー msgid "Make group owner" msgstr "グループのオーナーにする" +#. Shown above the code on the browser approval page when the app cannot be signed in automatically. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:253 +msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." +msgstr "{PRODUCT_NAME} アプリ内のコードが一致していることを確認してください。" + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" @@ -24668,6 +24683,11 @@ msgstr "<0>{listPriceEffectiveDate}に、サブスクリプションが{list msgid "On click" msgstr "クリック時" +#. One line explanation in the desktop app above the code. signInAddress is the web address of the sign-in page, such as web.fluxer.app/login?handoff=1. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:236 +msgid "On your other device, sign in at {signInAddress} and enter this code when asked." +msgstr "他のデバイスで {signInAddress} にサインインし、求められたらこのコードを入力してください。" + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:715 msgid "Once deleted, the application and its credentials are permanently removed." msgstr "一度削除すると、アプリと認証情報は完全に削除されます。" @@ -24733,6 +24753,11 @@ msgstr "メンションのみ" msgid "Only applies on wide screens." msgstr "ワイド画面にのみ適用されます。" +#. Warning under the title of the browser approval page, so people do not approve a sign-in someone else started. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:245 +msgid "Only continue if you started this sign-in on a device you control." +msgstr "このサインインを自分で開始したデバイスでのみ続行してください。" + #. Body copy in the mature content check modal. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:32 msgid "Only credit cards are accepted. Debit and prepaid cards cannot be used for the mature content check." @@ -24921,6 +24946,11 @@ msgstr "{landmarkName}を開く" msgid "Open {premiumProductFullName}" msgstr "{premiumProductFullName}を開く" +#. Button on the browser page after approving that opens the desktop app again if it did not come to the front. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:304 +msgid "Open {PRODUCT_NAME}" +msgstr "{PRODUCT_NAME}を開く" + #. Button label that opens the desktop app. productName is the app name. #. Button that hands SSO sign-in back to the mobile app. productName is the app name. #: src/features/auth/components/pages/SsoCallbackPage.tsx:47 @@ -25011,12 +25041,15 @@ msgstr "バナーオプションを開く" msgid "Open bookmarks" msgstr "ブックマークを開く" -#. Button label that opens the browser sign-in handoff page. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:56 #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:184 msgid "Open browser" msgstr "ブラウザを開く" +#. Button in the desktop app that reopens the browser sign-in page while the app waits for the browser. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:53 +msgid "Open browser again" +msgstr "ブラウザをもう一度開く" + #. Primary button in the screen-share picker on web. Hands off to the browser's native getDisplayMedia picker. #: src/features/voice/components/modals/ScreenSharePickerModal.tsx:209 msgid "Open browser picker" @@ -25392,10 +25425,6 @@ msgstr "音声とビデオの設定を開く" msgid "Open with {accountName} on {instanceName}" msgstr "{accountName} で {instanceName} を開く" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:414 -msgid "Open your browser to finish signing in." -msgstr "ブラウザを開いてサインインを完了してください。" - #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:137 msgid "Open your browser, sign in, then enter the code below to link your account." msgstr "ブラウザを開いてサインインし、以下のコードを入力してアカウントをリンクしてください。" @@ -25421,7 +25450,7 @@ msgstr "メンバーページを開きます。スペースキーまたはEnter #. Short label in the language tab. Keep it concise. #. Spellcheck engine option in the textarea spellcheck submenu. Uses the host operating system spellchecker. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:79 #: src/features/user/components/modals/tabs/LanguageTab.tsx:110 msgid "Operating system" @@ -26439,7 +26468,7 @@ msgstr "プラン" msgid "Plans, perks, gifts and your subscription all live on one page." msgstr "プラン、特典、ギフト、サブスクリプションはすべて1つのページにまとめられています。" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:172 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:89 msgid "Platform" msgstr "プラットフォーム" @@ -31859,11 +31888,6 @@ msgstr "チャットを表示" msgid "Show chat with {count, plural, one {# unread message} other {# unread messages}}" msgstr "{count, plural, one {#件の未読メッセージがあるチャットを表示} other {#件の未読メッセージがあるチャットを表示}}" -#. Button label that opens the manual browser handoff code fallback. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:60 -msgid "Show code" -msgstr "コードを表示" - #. Developer voice status menu option for displaying the voice connection identifier. #: src/features/voice/components/voice_connection_status/VoiceConnectionStatusInner.tsx:76 msgid "Show connection ID" @@ -32306,7 +32330,9 @@ msgstr "コミュニティヘッダーの下にある専用セクションにバ msgid "Sidebar" msgstr "サイドバー" +#. Button in the browser that approves signing in to the desktop or mobile app that asked for it. #. Generic authentication action label. Use for buttons, links, page titles, and accessible labels. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:33 #: src/features/i18n/utils/CommonMessageDescriptors.ts:79 msgid "Sign in" msgstr "サインイン" @@ -32321,10 +32347,35 @@ msgstr "もう一度サインイン" msgid "Sign in again as {accountLabel}" msgstr "{accountLabel} として再度サインインしてください" +#. Shown in the desktop app while it waits for the browser. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:193 +msgid "Sign in to {instanceName} in your browser and confirm. This app finishes signing in on its own." +msgstr "ブラウザで {instanceName} にサインインして確認してください。このアプリは自動的にサインインを完了します。" + +#. Shown in the desktop app above the code when the browser cannot return the sign-in automatically. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:189 +msgid "Sign in to {instanceName} in your browser, and check that it shows this code:" +msgstr "ブラウザで {instanceName} にサインインし、このコードが表示されていることを確認してください。" + #: src/features/auth/flow/GiftHeader.tsx:33 msgid "Sign in to claim your gift" msgstr "サインインしてギフトを受け取る" +#. Title of the browser page where the user approves signing in to an app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:71 +msgid "Sign in to the {PRODUCT_NAME} app" +msgstr "{PRODUCT_NAME} アプリにサインイン" + +#. Title of the browser page where the user approves signing in to the desktop app that opened it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:58 +msgid "Sign in to the {PRODUCT_NAME} desktop app" +msgstr "{PRODUCT_NAME} デスクトップアプリにサインイン" + +#. Title of the browser page where the user approves signing in to the mobile app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:65 +msgid "Sign in to the {PRODUCT_NAME} mobile app" +msgstr "{PRODUCT_NAME}モバイルアプリにサインイン" + #. Action label that starts passkey authentication. #: src/features/auth/AuthMessageDescriptors.ts:13 msgid "Sign in with a passkey" @@ -32403,14 +32454,10 @@ msgstr "アカウントから他のデバイスをサインアウトする" msgid "Sign out?" msgstr "サインアウトしますか?" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:234 -msgid "Sign-in approved" -msgstr "サインインを承認しました" - -#. Short label in the authentication handoff approval flow. Keep the tone plain and specific. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:26 -msgid "Sign-in code" -msgstr "サインインコード" +#. Title of the browser page after the user cancelled the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:322 +msgid "Sign-in cancelled" +msgstr "サインインがキャンセルされました" #. Section title for email address and password controls in the account security tab. Keep it concise. #: src/features/user/components/modals/tabs/account_security_tab/AccountSecuritySections.tsx:23 @@ -32433,10 +32480,6 @@ msgstr "サインインの流れ" msgid "Sign-in method" msgstr "サインイン方法" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:84 -msgid "Sign-in request" -msgstr "サインインのリクエスト" - #. Aria label on the signal-strength icon shown while the first latency sample is still pending. #: src/features/voice/components/SignalStrengthIcon.tsx:16 msgid "Signal strength loading" @@ -32453,6 +32496,21 @@ msgstr "サインイン済み" msgid "Signed-in devices" msgstr "サインイン中のデバイス" +#. Shown on the browser approval page above the buttons. name is the display name of the account that will be signed in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:137 +msgid "Signing in as {name}" +msgstr "{name} としてサインインしています" + +#. Text button in the desktop app that shows a code to type into a browser on a different device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:207 +msgid "Signing in on another device?" +msgstr "別のデバイスでサインインしていますか?" + +#. Title while the browser approves the sign-in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:228 +msgid "Signing in…" +msgstr "サインイン中…" + #. Label for Bluesky OAuth signing key ID input. #: src/features/app/components/setup/SetupWizardSteps.tsx:1161 msgid "Signing key ID" @@ -33504,6 +33562,8 @@ msgstr "マイクテストを開始" msgid "Start minimized" msgstr "最小化して起動" +#. Button on the browser page after cancelling that goes back to choosing an account. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:337 #: src/features/moderation/components/report/ReportStepDetails.tsx:326 #: src/features/moderation/components/report/ReportStepEmail.tsx:97 #: src/features/moderation/components/report/ReportStepVerification.tsx:134 @@ -34910,6 +34970,11 @@ msgstr "タイ語" msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "{productName}を安全に保つためのご協力ありがとうございます。できるだけ早くご報告内容を確認いたします。" +#. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 +msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." +msgstr "そのコードは {instanceHost} では無効です。{productName} アプリでコードを確認してから、もう一度お試しください。" + #. Body of the passkey page after the passkey prompt failed or was dismissed. Keep plain. #: src/features/auth/passkey_migration/PasskeyBridgePage.tsx:36 msgid "That didn't work. Try again or cancel." @@ -34953,11 +35018,6 @@ msgstr "メッセージを削除できませんでした" msgid "That message is gone, or you lost access to the conversation." msgstr "そのメッセージは削除されたか、会話へのアクセス権を失いました。" -#. Error shown when a browser sign-in handoff code expires before it is approved. -#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 -msgid "That sign-in code expired. Try again." -msgstr "サインインコードの有効期限が切れました。もう一度お試しください。" - #. End-of-list line in the saved messages popout after every bookmark has been shown. #. End-of-list line on the saved messages page after every bookmark has been shown. #: src/features/messaging/components/pages/SavedMessagesPage.tsx:35 @@ -34965,6 +35025,21 @@ msgstr "サインインコードの有効期限が切れました。もう一度 msgid "That's all of them." msgstr "ブックマークは以上です。" +#. Warning on the browser approval page when the app asked for a different account than the one chosen. requestedIdentifier is the email or username the app asked for, name is the chosen account's display name. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:131 +msgid "The {PRODUCT_NAME} app asked to sign in as {requestedIdentifier}, but you chose {name}." +msgstr "{PRODUCT_NAME}アプリは{requestedIdentifier}としてサインインを求めましたが、{name}を選択しました。" + +#. Explains where the code comes from, under the title of the browser page where it is typed. Signing in on another device is the label of a button in the app and must match its translation. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:187 +msgid "The {PRODUCT_NAME} app on your other device shows it under Signing in on another device. Only enter a code from a device you control." +msgstr "他のデバイスの{PRODUCT_NAME}アプリで「他のデバイスでのサインイン」の下に表示されます。管理下にあるデバイスからのコードのみを入力してください。" + +#. Shown after the user cancelled the sign-in request in the browser. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:327 +msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." +msgstr "{PRODUCT_NAME} アプリでサインインが完了していません。このタブは閉じることができます。" + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -34983,10 +35058,6 @@ msgstr "アプリがクラッシュしました" msgid "The app has crashed. Checking for updates that might fix this issue…" msgstr "アプリがクラッシュしました。この問題を解決する可能性のあるアップデートを確認しています…" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:237 -msgid "The app should now be signed in to your account." -msgstr "これでアプリがあなたのアカウントにサインインしているはずです。" - #. Activity log detail line under a lifted ban, for a temporary ban that had already ended on its own before it was lifted. A ban is the community ban, not the feature that blocks a user. {date} is when the ban ended, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:55 msgid "The ban had already expired on {date}" @@ -35184,6 +35255,16 @@ msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "画面共有のソースがビデオの送信を停止したため、画面共有は停止されました。" +#. Error shown in the desktop app when a browser sign-in request expires before it is approved in the browser. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 +msgid "The sign-in request expired before your browser approved it." +msgstr "サインインリクエストがブラウザで承認される前に期限切れになりました。" + +#. Error shown in the desktop app when the user pressed Cancel on the browser sign-in page. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:14 +msgid "The sign-in was cancelled in your browser." +msgstr "ブラウザでサインインがキャンセルされました。" + #. Activity log detail line under a deleted sticker, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the sticker, shown as a clickable user chip. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts:100 msgid "The sticker was uploaded by {user}" @@ -35408,6 +35489,11 @@ msgstr "サードパーティ" msgid "This account can't be blocked." msgstr "このアカウントをブロックすることはできません。" +#. Error in the browser when the chosen account belongs to a different server than the app that asked to sign in. accountHost and requestHost are server addresses. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:38 +msgid "This account is on {accountHost}, but the {productName} app is signing in to {requestHost}. Choose an account on {requestHost}." +msgstr "このアカウントは {accountHost} にありますが、{productName} アプリは {requestHost} にサインインしようとしています。{requestHost} のアカウントを選択してください。" + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:418 msgid "This action cannot be undone. All associated data, including the bot user, will be permanently deleted." msgstr "この操作は元に戻せません。ボットユーザーを含むすべての関連データが完全に削除されます。" @@ -35551,11 +35637,6 @@ msgstr "プレミアムタイプ、請求メタデータ、オーバーライド msgid "This code doesn't exist." msgstr "このコードは存在しません。" -#. Status shown under the browser sign-in code once its countdown reaches zero. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:68 -msgid "This code expired." -msgstr "このコードは期限切れました。" - #. Gift redemption error modal body for an invalid or already used code. #: src/features/gift/commands/GiftCommands.tsx:37 msgid "This code is invalid or already used." @@ -36075,6 +36156,11 @@ msgstr "このリセットリンクは期限切れです。リセットリンク msgid "This shows how links appear: {linkPreviewExampleUrl}" msgstr "リンクの表示例: {linkPreviewExampleUrl}" +#. Error in the browser when the sign-in request from the desktop app no longer exists, because it expired or the app cancelled it. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:20 +msgid "This sign-in request expired or was cancelled in the {productName} app. Start again from the app." +msgstr "{productName}アプリでこのサインインリクエストは期限切れまたはキャンセルされました。アプリからもう一度やり直してください。" + #. Label above the community a sticker comes from in the sticker info card. #: src/features/expressions/components/ExpressionInfoCard.tsx:75 msgid "This sticker is from" @@ -38520,6 +38606,11 @@ msgstr "画像URLを挿入する場所に「{url}」を使用してください msgid "Use a dedicated modal to set a message history threshold date for members who don't have the {readMessageHistoryPermissionLabel} permission." msgstr "{readMessageHistoryPermissionLabel}の権限がないメンバー向けに、専用のモーダルでメッセージ履歴のしきい値の日付を設定します。" +#. Text button on the browser approval page that goes back to choosing which account signs in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:149 +msgid "Use a different account" +msgstr "別の Вход" + #: src/features/auth/flow/instance_selector/InstancePickerRows.tsx:267 msgid "Use a self-hosted instance URL" msgstr "自己ホスト型インスタンスのURLを使用" @@ -39296,10 +39387,6 @@ msgstr "{premiumProductFullName}をご購入いただくには、メールアド msgid "Verify your email to start DMs." msgstr "DMを開始するにはメールアドレスを確認してください。" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:142 -msgid "Verifying code…" -msgstr "コードを確認中…" - #: src/features/auth/components/pages/ResetPasswordPage.tsx:145 msgid "Verifying your reset link…" msgstr "リセットリンクを確認中…" @@ -40073,10 +40160,6 @@ msgstr "続けてメッセージを削除する前に、少し時間をおいて msgid "Wait between messages. Members with \"{bypassSlowmodePermissionLabel}\" can bypass this." msgstr "メッセージ間の待機時間です。「{bypassSlowmodePermissionLabel}」権限を持つメンバーはこれをバイパスできます。" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:445 -msgid "Waiting for browser approval." -msgstr "ブラウザの承認を待っています。" - #. Tooltip explaining that video / screen share controls are gated while the voice connection is not yet ready. #: src/features/voice/components/voice_connection_status/LocalParticipantControls.tsx:45 msgid "Waiting for connection..." @@ -40118,10 +40201,6 @@ msgstr "スリープ解除" msgid "Warning" msgstr "警告" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:158 -msgid "Was this you?" -msgstr "ご本人ですか?" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:243 msgctxt "us-state" @@ -40959,10 +41038,6 @@ msgstr "すでに永久版の{premiumProductName}をお持ちです" msgid "You already have this connection." msgstr "この接続はすでに追加されています。" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:87 -msgid "You are about to authorize an app to sign in to your account. Only continue if you initiated this request from a device you control." -msgstr "アカウントへのサインインをアプリに許可しようとしています。ご自身が管理するデバイスからこのリクエストを開始した場合にのみ、続行してください。" - #. External link warning title. productName is the Fluxer product name. #: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:22 msgid "You are about to leave {productName}" @@ -41732,6 +41807,11 @@ msgstr "旧料金プランをご利用中です。このプランの現在の価 msgid "You're sending messages too quickly" msgstr "メッセージの送信ペースが速すぎます" +#. Title of the browser page after the user approved signing in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:282 +msgid "You're signed in" +msgstr "サインインしました" + #. Status text on the screen-share hover popout shown to the local streamer. Lightly playful tone. #: src/features/voice/components/StreamWatchHoverPopout.tsx:43 msgid "You're streaming!" diff --git a/fluxer_app/src/features/i18n/locales/ko/messages.po b/fluxer_app/src/features/i18n/locales/ko/messages.po index dfaa3df6e..fc1e9fc94 100644 --- a/fluxer_app/src/features/i18n/locales/ko/messages.po +++ b/fluxer_app/src/features/i18n/locales/ko/messages.po @@ -1573,7 +1573,7 @@ msgid "{imageCount, plural, one {# image} other {# images}}, {videoCount, plural msgstr "{imageCount, plural, one {#개의 이미지} other {#개의 이미지}}, {videoCount, plural, one {#개의 동영상} other {#개의 동영상}}" #. Explanation shown when the selected instance advertises no web app endpoint. Instance name is interpolated. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:76 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:61 msgid "{instanceName} does not publish a web address, so sign-in cannot be handed to a browser." msgstr "{instanceName}에서 웹 주소를 게시하지 않아 브라우저로 로그인을 넘길 수 없습니다." @@ -2777,14 +2777,6 @@ msgstr "리치 임베드 또는 링크 미리보기(업로드된 파일 아님)" msgid "A separate profile for each community" msgstr "커뮤니티별 별도 프로필" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:164 -msgid "A sign-in request was made for your account. Only approve if you initiated it." -msgstr "회원님의 계정에 대한 로그인 요청이 있었습니다. 본인이 시작한 경우에만 승인하세요." - -#: src/features/auth/flow/HandoffApprovalFlow.tsx:162 -msgid "A sign-in request was made from the following device. Only approve if you recognize it." -msgstr "다음 기기에서 로그인 요청이 들어왔습니다. 아는 기기인 경우에만 승인하세요." - #. Description for has:sticker. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:51 msgid "a sticker" @@ -4811,10 +4803,6 @@ msgstr "모든 커뮤니티에 적용" msgid "Approval required" msgstr "승인 필요" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:206 -msgid "Approve" -msgstr "승인" - #. Hint under the sign-in option on fluxer.com that pairs a newly installed app with the old installed app. productName is the app name. #: src/features/auth/flow/AuthLoginLayout.tsx:101 msgid "Approve this app from the {productName} app you already use. No password needed." @@ -7873,6 +7861,11 @@ msgstr "접근 권한 확인 중..." msgid "Checking screen recording permission..." msgstr "화면 녹화 권한 확인 중..." +#. Title while the browser looks up the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:224 +msgid "Checking the sign-in request…" +msgstr "로그인 요청을 확인 중입니다…" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -8847,6 +8840,11 @@ msgstr "코드 블록" msgid "Code expired" msgstr "코드 만료됨" +#. Label of the field in the browser where the user types the 12-character code shown in the desktop or mobile app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:28 +msgid "Code from the {productName} app" +msgstr "{productName} 앱의 코드" + #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 @@ -9348,7 +9346,6 @@ msgstr "다른 사용자에게 {premiumProductName} 배지를 완전히 숨깁 #: src/features/auth/components/pages/SsoCallbackPage.tsx:256 #: src/features/auth/components/pages/SsoCallbackPage.tsx:322 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:216 msgid "Completing sign-in…" msgstr "로그인 완료 중…" @@ -9782,7 +9779,6 @@ msgstr "좌클릭(버튼) 또는 우클릭(다른 요소)으로 상황별 메뉴 #: src/features/auth/components/modals/DeviceRevokeModal.tsx:77 #: src/features/auth/components/modals/PasskeyPinModal.tsx:111 #: src/features/auth/components/pages/oauth_authorize_page/OAuthAccountStep.tsx:36 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/connection/components/modals/AddConnectionModal.tsx:384 #: src/features/i18n/utils/CommonMessageDescriptors.ts:726 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:413 @@ -9790,6 +9786,11 @@ msgstr "좌클릭(버튼) 또는 우클릭(다른 요소)으로 상황별 메뉴 msgid "Continue" msgstr "계속" +#. Title in the desktop app while it waits for the user to sign in on the browser page it opened. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:177 +msgid "Continue in your browser" +msgstr "브라우저에서 계속하기" + #. Button in the gift time confirmation that proceeds to subscription checkout. #: src/features/app/components/dialogs/components/plutonium/hooks/useCheckoutActions.tsx:145 msgid "Continue to checkout" @@ -10437,7 +10438,7 @@ msgid "Couldn't close DM" msgstr "DM을 닫을 수 없습니다" #. Desktop handoff flow error shown when finalizing the sign-in fails after a valid code. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:21 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:34 msgid "Couldn't complete sign-in. Try again." msgstr "로그인을 완료할 수 없습니다. 다시 시도해 주세요." @@ -10831,6 +10832,11 @@ msgstr "{blueskyProviderName} 승인을 시작할 수 없습니다" msgid "Couldn't start checkout" msgstr "결제를 시작할 수 없습니다" +#. Shown in the desktop app when the browser sign-in request could not be created. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:66 +msgid "Couldn't start signing in with your browser." +msgstr "브라우저로 로그인을 시작할 수 없습니다." + #. Toast error shown when creating a new account connection fails. #: src/features/connection/commands/ConnectionCommands.ts:27 msgid "Couldn't start the connection" @@ -10942,7 +10948,7 @@ msgid "Couldn't upload banner" msgstr "배너를 업로드할 수 없습니다" #. Desktop handoff flow error shown when verifying the pairing code fails for an unexpected reason. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:17 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:30 msgid "Couldn't verify that code. Try again." msgstr "코드를 확인할 수 없습니다. 다시 시도해 주세요." @@ -12503,7 +12509,6 @@ msgstr "간결한 레이아웃" #. Short label in the settings dialog permission components. Keep the tone plain and specific. #: src/features/app/components/dialogs/shared/PermissionComponents.tsx:16 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:203 msgid "Deny" msgstr "거부" @@ -14910,15 +14915,16 @@ msgstr "인증 앱의 {digitCount}자리 코드나 백업 코드 중 하나를 msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "인증 앱의 {digitCount}자리 코드를 입력하세요." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:108 -msgid "Enter the code" -msgstr "코드 입력" - #. Inline validation error on the verification step of the DSA report flow when the code field is empty. #: src/features/moderation/components/pages/ReportPage.tsx:74 msgid "Enter the code before continuing." msgstr "계속하려면 코드를 입력하세요." +#. Title of the browser page where the user types the 12-character code the app shows under Signing in on another device. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +msgid "Enter the code from the {PRODUCT_NAME} app" +msgstr "{PRODUCT_NAME} 앱에서 코드를 입력하세요" + #. Body text in the authentication sudo verification modal. Keep the tone plain and specific. #: src/features/auth/components/modals/SudoVerificationModal.tsx:56 msgid "Enter the code from your authenticator app." @@ -14933,10 +14939,6 @@ msgstr "현재 이메일로 전송된 코드를 입력하세요." msgid "Enter the code sent to your email address." msgstr "이메일로 전송된 코드를 입력하세요." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:111 -msgid "Enter the code shown in the app to continue." -msgstr "계속하려면 앱에 표시된 코드를 입력하세요." - #: src/features/user/components/modals/BouncedEmailChangeModal.tsx:157 #: src/features/user/components/modals/EmailChangeModal.tsx:244 msgid "Enter the code we emailed to your new address." @@ -14959,6 +14961,11 @@ msgstr "새 이메일 주소를 입력해 주세요. 다음 단계에서 인증 msgid "Enter the PIN for your security key to continue." msgstr "계속하려면 보안 키의 PIN을 입력하세요." +#. Title in the desktop app above the code the user types into a browser on another device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:228 +msgid "Enter this code in your browser" +msgstr "브라우저에 이 코드를 입력하세요" + #: src/features/auth/flow/HandoffCodeDisplay.tsx:132 msgid "Enter this code in your browser to complete sign-in." msgstr "브라우저에 이 코드를 입력하여 로그인을 완료하세요." @@ -15362,7 +15369,7 @@ msgstr "{earliest} ~ {latest} 만료" msgid "Expires in {remaining}s" msgstr "{remaining}초 후 만료" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:374 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:250 msgid "Expires in {remainingSeconds}s" msgstr "{remainingSeconds}초 후 만료" @@ -16165,7 +16172,7 @@ msgid "Fluxer" msgstr "Fluxer" #. Status shown when browser sign-in status polling gives up after repeated failures. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:72 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:57 msgid "Fluxer stopped checking whether the browser approved this sign-in. It didn't lose your code." msgstr "Fluxer가 브라우저에서 이 로그인을 승인했는지 확인을 중단했습니다. 코드는 잃지 않았습니다." @@ -16952,8 +16959,6 @@ msgstr "공유 가능한 링크를 생성하거나 조합된 맞춤 CSS를 복 msgid "Generate invite link" msgstr "초대 링크 생성" -#. Button label that replaces an expired browser sign-in code with a fresh one. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:64 #: src/features/auth/flow/HandoffCodeDisplay.tsx:117 msgid "Generate new code" msgstr "새 코드 생성" @@ -17348,6 +17353,16 @@ msgstr "돌아가서 유효한 이메일을 입력하세요." msgid "Go back to {productName} to continue." msgstr "{productName}(으)로 돌아가 계속하세요." +#. Shown after approving a sign-in for an app on another device, which signs in by itself shortly. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:292 +msgid "Go back to the {PRODUCT_NAME} app. It finishes signing in on its own." +msgstr "{PRODUCT_NAME} 앱으로 돌아가세요. 자동으로 로그인이 완료됩니다." + +#. Shown after approving, when the browser has already handed the sign-in back to the desktop app. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:288 +msgid "Go back to the {PRODUCT_NAME} app. You can close this tab." +msgstr "{PRODUCT_NAME} 앱으로 돌아가세요. 이 탭은 닫으셔도 됩니다." + #. Accessible label for the community row of an expression info card, which opens a community the viewer is already a member of. {communityName} is the community name. #: src/features/expressions/components/ExpressionInfoCard.tsx:89 msgid "Go to {communityName}" @@ -19295,11 +19310,6 @@ msgstr "JSON이 유효하지 않습니다. 위 URL에서 전체 응답을 붙여 msgid "Invalid or expired code" msgstr "유효하지 않거나 만료된 코드입니다" -#. Desktop handoff flow error shown when the entered pairing code is invalid or expired. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:13 -msgid "Invalid or expired code. Try again." -msgstr "코드가 유효하지 않거나 만료되었습니다. 다시 시도해 주세요." - #. Short label in the authentication authorize flow. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/state/useAuthorizeFlow.ts:82 msgid "Invalid redirect_uri" @@ -20876,7 +20886,7 @@ msgstr "시간 형식" msgid "Localization" msgstr "언어 및 지역" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:192 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:109 #: src/features/user/components/modals/tabs/DevicesTab.tsx:152 msgid "Location" msgstr "위치" @@ -21034,6 +21044,11 @@ msgstr "{userName}님을 그룹 소유자로 지정하시겠어요? 소유자 msgid "Make group owner" msgstr "그룹 소유자로 지정" +#. Shown above the code on the browser approval page when the app cannot be signed in automatically. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:253 +msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." +msgstr "{PRODUCT_NAME} 앱에 있는 이 코드를 확인하세요." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" @@ -24668,6 +24683,11 @@ msgstr "<0>{listPriceEffectiveDate}에 구독이 {listPriceCurrentLabel}에 msgid "On click" msgstr "클릭 시" +#. One line explanation in the desktop app above the code. signInAddress is the web address of the sign-in page, such as web.fluxer.app/login?handoff=1. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:236 +msgid "On your other device, sign in at {signInAddress} and enter this code when asked." +msgstr "다른 기기에서 {signInAddress}에 로그인하고 요청 시 이 코드를 입력하세요." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:715 msgid "Once deleted, the application and its credentials are permanently removed." msgstr "삭제하면 애플리케이션과 자격 증명이 영구적으로 제거됩니다." @@ -24733,6 +24753,11 @@ msgstr "멘션만" msgid "Only applies on wide screens." msgstr "넓은 화면에서만 적용됩니다." +#. Warning under the title of the browser approval page, so people do not approve a sign-in someone else started. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:245 +msgid "Only continue if you started this sign-in on a device you control." +msgstr "이 로그인은 본인이 제어하는 기기에서 시작한 것이 맞는지 확인한 후에만 계속 진행하세요." + #. Body copy in the mature content check modal. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:32 msgid "Only credit cards are accepted. Debit and prepaid cards cannot be used for the mature content check." @@ -24921,6 +24946,11 @@ msgstr "{landmarkName} 열기" msgid "Open {premiumProductFullName}" msgstr "{premiumProductFullName} 열기" +#. Button on the browser page after approving that opens the desktop app again if it did not come to the front. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:304 +msgid "Open {PRODUCT_NAME}" +msgstr "{PRODUCT_NAME} 열기" + #. Button label that opens the desktop app. productName is the app name. #. Button that hands SSO sign-in back to the mobile app. productName is the app name. #: src/features/auth/components/pages/SsoCallbackPage.tsx:47 @@ -25011,12 +25041,15 @@ msgstr "배너 옵션 열기" msgid "Open bookmarks" msgstr "북마크 열기" -#. Button label that opens the browser sign-in handoff page. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:56 #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:184 msgid "Open browser" msgstr "브라우저 열기" +#. Button in the desktop app that reopens the browser sign-in page while the app waits for the browser. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:53 +msgid "Open browser again" +msgstr "브라우저 다시 열기" + #. Primary button in the screen-share picker on web. Hands off to the browser's native getDisplayMedia picker. #: src/features/voice/components/modals/ScreenSharePickerModal.tsx:209 msgid "Open browser picker" @@ -25392,10 +25425,6 @@ msgstr "오디오 및 비디오 설정 열기" msgid "Open with {accountName} on {instanceName}" msgstr "{accountName}(으)로 {instanceName} 열기" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:414 -msgid "Open your browser to finish signing in." -msgstr "로그인을 완료하려면 브라우저를 열어주세요." - #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:137 msgid "Open your browser, sign in, then enter the code below to link your account." msgstr "브라우저를 열고 로그인한 다음 아래 코드를 입력하여 계정을 연결하세요." @@ -25421,7 +25450,7 @@ msgstr "멤버 페이지를 엽니다. 열려면 스페이스바 또는 Enter #. Short label in the language tab. Keep it concise. #. Spellcheck engine option in the textarea spellcheck submenu. Uses the host operating system spellchecker. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:79 #: src/features/user/components/modals/tabs/LanguageTab.tsx:110 msgid "Operating system" @@ -26439,7 +26468,7 @@ msgstr "플랜" msgid "Plans, perks, gifts and your subscription all live on one page." msgstr "플랜, 혜택, 선물 및 구독 정보가 모두 한 페이지에 있습니다." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:172 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:89 msgid "Platform" msgstr "플랫폼" @@ -31859,11 +31888,6 @@ msgstr "채팅 표시" msgid "Show chat with {count, plural, one {# unread message} other {# unread messages}}" msgstr "채팅 표시({count, plural, one {#개의 읽지 않은 메시지} other {#개의 읽지 않은 메시지}})" -#. Button label that opens the manual browser handoff code fallback. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:60 -msgid "Show code" -msgstr "코드 보기" - #. Developer voice status menu option for displaying the voice connection identifier. #: src/features/voice/components/voice_connection_status/VoiceConnectionStatusInner.tsx:76 msgid "Show connection ID" @@ -32306,7 +32330,9 @@ msgstr "커뮤니티 헤더 아래에 배너가 별도의 섹션으로 표시됩 msgid "Sidebar" msgstr "사이드바" +#. Button in the browser that approves signing in to the desktop or mobile app that asked for it. #. Generic authentication action label. Use for buttons, links, page titles, and accessible labels. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:33 #: src/features/i18n/utils/CommonMessageDescriptors.ts:79 msgid "Sign in" msgstr "로그인" @@ -32321,10 +32347,35 @@ msgstr "다시 로그인" msgid "Sign in again as {accountLabel}" msgstr "{accountLabel}(으)로 다시 로그인" +#. Shown in the desktop app while it waits for the browser. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:193 +msgid "Sign in to {instanceName} in your browser and confirm. This app finishes signing in on its own." +msgstr "브라우저에서 {instanceName}에 로그인하고 확인하세요. 이 앱은 자동으로 로그인을 완료합니다." + +#. Shown in the desktop app above the code when the browser cannot return the sign-in automatically. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:189 +msgid "Sign in to {instanceName} in your browser, and check that it shows this code:" +msgstr "브라우저에서 {instanceName}에 로그인하고 이 코드가 표시되는지 확인하세요:" + #: src/features/auth/flow/GiftHeader.tsx:33 msgid "Sign in to claim your gift" msgstr "선물을 받으려면 로그인하세요" +#. Title of the browser page where the user approves signing in to an app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:71 +msgid "Sign in to the {PRODUCT_NAME} app" +msgstr "{PRODUCT_NAME} 앱에 로그인" + +#. Title of the browser page where the user approves signing in to the desktop app that opened it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:58 +msgid "Sign in to the {PRODUCT_NAME} desktop app" +msgstr "{PRODUCT_NAME} 데스크톱 앱에 로그인" + +#. Title of the browser page where the user approves signing in to the mobile app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:65 +msgid "Sign in to the {PRODUCT_NAME} mobile app" +msgstr "{PRODUCT_NAME} 모바일 앱에 로그인" + #. Action label that starts passkey authentication. #: src/features/auth/AuthMessageDescriptors.ts:13 msgid "Sign in with a passkey" @@ -32403,14 +32454,10 @@ msgstr "다른 기기에서 내 계정 로그아웃" msgid "Sign out?" msgstr "로그아웃하시겠어요?" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:234 -msgid "Sign-in approved" -msgstr "로그인 승인됨" - -#. Short label in the authentication handoff approval flow. Keep the tone plain and specific. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:26 -msgid "Sign-in code" -msgstr "로그인 코드" +#. Title of the browser page after the user cancelled the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:322 +msgid "Sign-in cancelled" +msgstr "로그인 취소됨" #. Section title for email address and password controls in the account security tab. Keep it concise. #: src/features/user/components/modals/tabs/account_security_tab/AccountSecuritySections.tsx:23 @@ -32433,10 +32480,6 @@ msgstr "로그인 절차" msgid "Sign-in method" msgstr "로그인 방법" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:84 -msgid "Sign-in request" -msgstr "로그인 요청" - #. Aria label on the signal-strength icon shown while the first latency sample is still pending. #: src/features/voice/components/SignalStrengthIcon.tsx:16 msgid "Signal strength loading" @@ -32453,6 +32496,21 @@ msgstr "로그인됨" msgid "Signed-in devices" msgstr "로그인된 기기" +#. Shown on the browser approval page above the buttons. name is the display name of the account that will be signed in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:137 +msgid "Signing in as {name}" +msgstr "{name}(으)로 로그인 중" + +#. Text button in the desktop app that shows a code to type into a browser on a different device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:207 +msgid "Signing in on another device?" +msgstr "다른 기기에서 로그인 중이신가요?" + +#. Title while the browser approves the sign-in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:228 +msgid "Signing in…" +msgstr "로그인 중…" + #. Label for Bluesky OAuth signing key ID input. #: src/features/app/components/setup/SetupWizardSteps.tsx:1161 msgid "Signing key ID" @@ -33504,6 +33562,8 @@ msgstr "마이크 테스트 시작" msgid "Start minimized" msgstr "최소화하여 시작" +#. Button on the browser page after cancelling that goes back to choosing an account. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:337 #: src/features/moderation/components/report/ReportStepDetails.tsx:326 #: src/features/moderation/components/report/ReportStepEmail.tsx:97 #: src/features/moderation/components/report/ReportStepVerification.tsx:134 @@ -34910,6 +34970,11 @@ msgstr "태국어" msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "{productName}을(를) 안전하게 유지하는 데 도움을 주셔서 감사합니다. 최대한 빨리 신고 내용을 검토하겠습니다." +#. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 +msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." +msgstr "해당 코드는 {instanceHost}에서 유효하지 않습니다. {productName} 앱에서 코드를 확인한 후 다시 시도하세요." + #. Body of the passkey page after the passkey prompt failed or was dismissed. Keep plain. #: src/features/auth/passkey_migration/PasskeyBridgePage.tsx:36 msgid "That didn't work. Try again or cancel." @@ -34953,11 +35018,6 @@ msgstr "메시지를 삭제하지 못했습니다" msgid "That message is gone, or you lost access to the conversation." msgstr "해당 메시지가 사라졌거나 대화에 대한 액세스 권한을 잃었습니다." -#. Error shown when a browser sign-in handoff code expires before it is approved. -#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 -msgid "That sign-in code expired. Try again." -msgstr "로그인 코드가 만료되었습니다. 다시 시도하세요." - #. End-of-list line in the saved messages popout after every bookmark has been shown. #. End-of-list line on the saved messages page after every bookmark has been shown. #: src/features/messaging/components/pages/SavedMessagesPage.tsx:35 @@ -34965,6 +35025,21 @@ msgstr "로그인 코드가 만료되었습니다. 다시 시도하세요." msgid "That's all of them." msgstr "모두 불러왔습니다." +#. Warning on the browser approval page when the app asked for a different account than the one chosen. requestedIdentifier is the email or username the app asked for, name is the chosen account's display name. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:131 +msgid "The {PRODUCT_NAME} app asked to sign in as {requestedIdentifier}, but you chose {name}." +msgstr "{PRODUCT_NAME} 앱이 {requestedIdentifier}(으)로 로그인하려 했지만, {name}(으)로 선택하셨습니다." + +#. Explains where the code comes from, under the title of the browser page where it is typed. Signing in on another device is the label of a button in the app and must match its translation. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:187 +msgid "The {PRODUCT_NAME} app on your other device shows it under Signing in on another device. Only enter a code from a device you control." +msgstr "다른 기기의 {PRODUCT_NAME} 앱에서 '다른 기기에서 로그인 중' 아래에 표시됩니다. 본인이 제어하는 기기에서만 코드를 입력하세요." + +#. Shown after the user cancelled the sign-in request in the browser. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:327 +msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." +msgstr "{PRODUCT_NAME} 앱에 로그인하지 않았습니다. 이 탭을 닫을 수 있습니다." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -34983,10 +35058,6 @@ msgstr "앱이 비정상적으로 종료되었습니다" msgid "The app has crashed. Checking for updates that might fix this issue…" msgstr "앱이 비정상적으로 종료되었습니다. 이 문제를 해결할 수 있는 업데이트를 확인하는 중…" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:237 -msgid "The app should now be signed in to your account." -msgstr "이제 앱에서 계정에 로그인되어 있을 거예요." - #. Activity log detail line under a lifted ban, for a temporary ban that had already ended on its own before it was lifted. A ban is the community ban, not the feature that blocks a user. {date} is when the ban ended, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:55 msgid "The ban had already expired on {date}" @@ -35184,6 +35255,16 @@ msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "화면 공유 소스가 더 이상 비디오를 보내지 않아 화면 공유가 중단되었습니다." +#. Error shown in the desktop app when a browser sign-in request expires before it is approved in the browser. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 +msgid "The sign-in request expired before your browser approved it." +msgstr "로그인 요청이 브라우저에서 승인되기 전에 만료되었습니다." + +#. Error shown in the desktop app when the user pressed Cancel on the browser sign-in page. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:14 +msgid "The sign-in was cancelled in your browser." +msgstr "브라우저에서 로그인 절차를 취소했습니다." + #. Activity log detail line under a deleted sticker, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the sticker, shown as a clickable user chip. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts:100 msgid "The sticker was uploaded by {user}" @@ -35408,6 +35489,11 @@ msgstr "타사" msgid "This account can't be blocked." msgstr "이 계정은 차단할 수 없습니다." +#. Error in the browser when the chosen account belongs to a different server than the app that asked to sign in. accountHost and requestHost are server addresses. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:38 +msgid "This account is on {accountHost}, but the {productName} app is signing in to {requestHost}. Choose an account on {requestHost}." +msgstr "이 계정은 {accountHost}에 있지만, {productName} 앱이 {requestHost}에 로그인하려고 합니다. {requestHost}의 계정을 선택하세요." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:418 msgid "This action cannot be undone. All associated data, including the bot user, will be permanently deleted." msgstr "이 작업은 되돌릴 수 없습니다. 봇 사용자를 포함한 모든 관련 데이터가 영구적으로 삭제됩니다." @@ -35551,11 +35637,6 @@ msgstr "프리미엄 유형, 결제 메타데이터, 재정의 플래그를 포 msgid "This code doesn't exist." msgstr "이 코드는 존재하지 않습니다." -#. Status shown under the browser sign-in code once its countdown reaches zero. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:68 -msgid "This code expired." -msgstr "이 코드는 만료되었습니다." - #. Gift redemption error modal body for an invalid or already used code. #: src/features/gift/commands/GiftCommands.tsx:37 msgid "This code is invalid or already used." @@ -36075,6 +36156,11 @@ msgstr "이 비밀번호 재설정 링크는 만료되었습니다. 링크는 1 msgid "This shows how links appear: {linkPreviewExampleUrl}" msgstr "링크가 이렇게 표시됩니다: {linkPreviewExampleUrl}" +#. Error in the browser when the sign-in request from the desktop app no longer exists, because it expired or the app cancelled it. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:20 +msgid "This sign-in request expired or was cancelled in the {productName} app. Start again from the app." +msgstr "이 로그인 요청은 {productName} 앱에서 만료되었거나 취소되었습니다. 앱에서 다시 시작하세요." + #. Label above the community a sticker comes from in the sticker info card. #: src/features/expressions/components/ExpressionInfoCard.tsx:75 msgid "This sticker is from" @@ -38520,6 +38606,11 @@ msgstr "이미지 URL이 삽입될 위치에 {url}을(를) 사용하세요." msgid "Use a dedicated modal to set a message history threshold date for members who don't have the {readMessageHistoryPermissionLabel} permission." msgstr "{readMessageHistoryPermissionLabel} 권한이 없는 멤버를 위한 메시지 기록 기준일을 별도 창에서 설정하세요." +#. Text button on the browser approval page that goes back to choosing which account signs in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:149 +msgid "Use a different account" +msgstr "다른 계정 사용" + #: src/features/auth/flow/instance_selector/InstancePickerRows.tsx:267 msgid "Use a self-hosted instance URL" msgstr "직접 호스팅한 인스턴스 URL 사용" @@ -39296,10 +39387,6 @@ msgstr "{premiumProductFullName}을(를) 구매하려면 이메일을 인증하 msgid "Verify your email to start DMs." msgstr "DM을 시작하려면 이메일을 인증하세요." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:142 -msgid "Verifying code…" -msgstr "코드 확인 중…" - #: src/features/auth/components/pages/ResetPasswordPage.tsx:145 msgid "Verifying your reset link…" msgstr "재설정 링크 확인 중…" @@ -40073,10 +40160,6 @@ msgstr "메시지를 더 삭제하기 전에 잠시 기다려 주세요." msgid "Wait between messages. Members with \"{bypassSlowmodePermissionLabel}\" can bypass this." msgstr "메시지를 보낸 후 다음 메시지까지 기다려야 합니다. \"{bypassSlowmodePermissionLabel}\" 권한이 있는 멤버는 이 제한을 건너뛸 수 있습니다." -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:445 -msgid "Waiting for browser approval." -msgstr "브라우저 승인을 기다리는 중입니다." - #. Tooltip explaining that video / screen share controls are gated while the voice connection is not yet ready. #: src/features/voice/components/voice_connection_status/LocalParticipantControls.tsx:45 msgid "Waiting for connection..." @@ -40118,10 +40201,6 @@ msgstr "절전 해제" msgid "Warning" msgstr "경고" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:158 -msgid "Was this you?" -msgstr "본인 활동이 맞나요?" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:243 msgctxt "us-state" @@ -40959,10 +41038,6 @@ msgstr "이미 {premiumProductName} 평생 이용권을 보유하고 있습니 msgid "You already have this connection." msgstr "이미 연결된 계정입니다." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:87 -msgid "You are about to authorize an app to sign in to your account. Only continue if you initiated this request from a device you control." -msgstr "계정에 로그인하도록 앱을 승인하려고 합니다. 직접 제어하는 기기에서 이 요청을 시작한 경우에만 계속하세요." - #. External link warning title. productName is the Fluxer product name. #: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:22 msgid "You are about to leave {productName}" @@ -41732,6 +41807,11 @@ msgstr "기존 요금제를 사용 중입니다. 현재 이 플랜의 가격은 msgid "You're sending messages too quickly" msgstr "메시지를 너무 빨리 보내고 있습니다" +#. Title of the browser page after the user approved signing in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:282 +msgid "You're signed in" +msgstr "로그인되었습니다" + #. Status text on the screen-share hover popout shown to the local streamer. Lightly playful tone. #: src/features/voice/components/StreamWatchHoverPopout.tsx:43 msgid "You're streaming!" diff --git a/fluxer_app/src/features/i18n/locales/lt/messages.po b/fluxer_app/src/features/i18n/locales/lt/messages.po index ff3d07596..99b421c15 100644 --- a/fluxer_app/src/features/i18n/locales/lt/messages.po +++ b/fluxer_app/src/features/i18n/locales/lt/messages.po @@ -1573,7 +1573,7 @@ msgid "{imageCount, plural, one {# image} other {# images}}, {videoCount, plural msgstr "{imageCount, plural, one {# vaizdas} few {# vaizdai} many {# vaizdo} other {# vaizdų}}, {videoCount, plural, one {# vaizdo įrašas} few {# vaizdo įrašai} many {# vaizdo įrašo} other {# vaizdo įrašų}}" #. Explanation shown when the selected instance advertises no web app endpoint. Instance name is interpolated. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:76 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:61 msgid "{instanceName} does not publish a web address, so sign-in cannot be handed to a browser." msgstr "{instanceName} neskelbia žiniatinklio adreso, todėl prisijungimo negalima perduoti naršyklei." @@ -2777,14 +2777,6 @@ msgstr "raiškusis įterptasis elementas arba nuorodos peržiūra (ne įkeltas f msgid "A separate profile for each community" msgstr "Atskiras profilis kiekvienai bendruomenei" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:164 -msgid "A sign-in request was made for your account. Only approve if you initiated it." -msgstr "Buvo pateikta prisijungimo užklausa jūsų paskyrai. Patvirtinkite tik tuo atveju, jei ją inicijavote." - -#: src/features/auth/flow/HandoffApprovalFlow.tsx:162 -msgid "A sign-in request was made from the following device. Only approve if you recognize it." -msgstr "Prisijungimo užklausa gauta iš šio įrenginio. Patvirtinkite tik tuo atveju, jei jį atpažįstate." - #. Description for has:sticker. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:51 msgid "a sticker" @@ -4811,10 +4803,6 @@ msgstr "Taikyti visoms bendruomenėms" msgid "Approval required" msgstr "Reikalingas patvirtinimas" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:206 -msgid "Approve" -msgstr "Patvirtinti" - #. Hint under the sign-in option on fluxer.com that pairs a newly installed app with the old installed app. productName is the app name. #: src/features/auth/flow/AuthLoginLayout.tsx:101 msgid "Approve this app from the {productName} app you already use. No password needed." @@ -7873,6 +7861,11 @@ msgstr "Tikrinama prieiga..." msgid "Checking screen recording permission..." msgstr "Tikrinamas ekrano įrašymo leidimas…" +#. Title while the browser looks up the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:224 +msgid "Checking the sign-in request…" +msgstr "Tikrinamas prisijungimo prašymas…" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -8847,6 +8840,11 @@ msgstr "Kodo blokai" msgid "Code expired" msgstr "Kodas baigė galioti" +#. Label of the field in the browser where the user types the 12-character code shown in the desktop or mobile app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:28 +msgid "Code from the {productName} app" +msgstr "Kodas iš „{productName}“ programėlės" + #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 @@ -9348,7 +9346,6 @@ msgstr "Visiškai paslėpti savo {premiumProductName} ženklelį nuo kitų naudo #: src/features/auth/components/pages/SsoCallbackPage.tsx:256 #: src/features/auth/components/pages/SsoCallbackPage.tsx:322 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:216 msgid "Completing sign-in…" msgstr "Prisijungiama…" @@ -9782,7 +9779,6 @@ msgstr "Kontekstiniai meniu atidaromi kairiuoju pelės mygtuku (ant mygtukų) ar #: src/features/auth/components/modals/DeviceRevokeModal.tsx:77 #: src/features/auth/components/modals/PasskeyPinModal.tsx:111 #: src/features/auth/components/pages/oauth_authorize_page/OAuthAccountStep.tsx:36 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/connection/components/modals/AddConnectionModal.tsx:384 #: src/features/i18n/utils/CommonMessageDescriptors.ts:726 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:413 @@ -9790,6 +9786,11 @@ msgstr "Kontekstiniai meniu atidaromi kairiuoju pelės mygtuku (ant mygtukų) ar msgid "Continue" msgstr "Tęsti" +#. Title in the desktop app while it waits for the user to sign in on the browser page it opened. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:177 +msgid "Continue in your browser" +msgstr "Tęsti naršyklėje" + #. Button in the gift time confirmation that proceeds to subscription checkout. #: src/features/app/components/dialogs/components/plutonium/hooks/useCheckoutActions.tsx:145 msgid "Continue to checkout" @@ -10437,7 +10438,7 @@ msgid "Couldn't close DM" msgstr "Nepavyko uždaryti tiesioginio pokalbio" #. Desktop handoff flow error shown when finalizing the sign-in fails after a valid code. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:21 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:34 msgid "Couldn't complete sign-in. Try again." msgstr "Nepavyko prisijungti. Bandykite dar kartą." @@ -10831,6 +10832,11 @@ msgstr "Nepavyko pradėti „{blueskyProviderName}“ autorizavimo" msgid "Couldn't start checkout" msgstr "Nepavyko pradėti atsiskaitymo" +#. Shown in the desktop app when the browser sign-in request could not be created. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:66 +msgid "Couldn't start signing in with your browser." +msgstr "Nepavyko pradėti prisijungimo per naršyklę." + #. Toast error shown when creating a new account connection fails. #: src/features/connection/commands/ConnectionCommands.ts:27 msgid "Couldn't start the connection" @@ -10942,7 +10948,7 @@ msgid "Couldn't upload banner" msgstr "Nepavyko įkelti reklamjuostės" #. Desktop handoff flow error shown when verifying the pairing code fails for an unexpected reason. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:17 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:30 msgid "Couldn't verify that code. Try again." msgstr "Nepavyko patvirtinti kodo. Bandykite dar kartą." @@ -12503,7 +12509,6 @@ msgstr "Tankus išdėstymas" #. Short label in the settings dialog permission components. Keep the tone plain and specific. #: src/features/app/components/dialogs/shared/PermissionComponents.tsx:16 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:203 msgid "Deny" msgstr "Neleisti" @@ -14910,15 +14915,16 @@ msgstr "Įveskite {digitCount} skaitmenų kodą iš autentifikavimo programėlė msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Įveskite {digitCount} skaitmenų kodą iš savo autentifikavimo programėlės." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:108 -msgid "Enter the code" -msgstr "Įveskite kodą" - #. Inline validation error on the verification step of the DSA report flow when the code field is empty. #: src/features/moderation/components/pages/ReportPage.tsx:74 msgid "Enter the code before continuing." msgstr "Įveskite kodą prieš tęsdami." +#. Title of the browser page where the user types the 12-character code the app shows under Signing in on another device. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +msgid "Enter the code from the {PRODUCT_NAME} app" +msgstr "Įveskite kodą iš „{PRODUCT_NAME}“ programėlės" + #. Body text in the authentication sudo verification modal. Keep the tone plain and specific. #: src/features/auth/components/modals/SudoVerificationModal.tsx:56 msgid "Enter the code from your authenticator app." @@ -14933,10 +14939,6 @@ msgstr "Įveskite kodą, išsiųstą jūsų dabartiniu el. paštu." msgid "Enter the code sent to your email address." msgstr "Įveskite į el. paštą išsiųstą kodą." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:111 -msgid "Enter the code shown in the app to continue." -msgstr "Norėdami tęsti, įveskite programėlėje rodomą kodą." - #: src/features/user/components/modals/BouncedEmailChangeModal.tsx:157 #: src/features/user/components/modals/EmailChangeModal.tsx:244 msgid "Enter the code we emailed to your new address." @@ -14959,6 +14961,11 @@ msgstr "Įveskite naują el. pašto adresą, kurį norite naudoti. Ten atsiųsim msgid "Enter the PIN for your security key to continue." msgstr "Įveskite savo saugos rakto PIN kodą, kad tęstumėte." +#. Title in the desktop app above the code the user types into a browser on another device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:228 +msgid "Enter this code in your browser" +msgstr "Įveskite šį kodą savo naršyklėje" + #: src/features/auth/flow/HandoffCodeDisplay.tsx:132 msgid "Enter this code in your browser to complete sign-in." msgstr "Įveskite šį kodą naršyklėje, kad prisijungtumėte." @@ -15362,7 +15369,7 @@ msgstr "Baigia galioti tarp {earliest} ir {latest}" msgid "Expires in {remaining}s" msgstr "Baigs galioti po {remaining} s" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:374 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:250 msgid "Expires in {remainingSeconds}s" msgstr "Baigiasi po {remainingSeconds}s" @@ -16165,7 +16172,7 @@ msgid "Fluxer" msgstr "Fluxer" #. Status shown when browser sign-in status polling gives up after repeated failures. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:72 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:57 msgid "Fluxer stopped checking whether the browser approved this sign-in. It didn't lose your code." msgstr "Fluxer nustojo tikrinti, ar naršyklė patvirtino šį prisijungimą. Ji neprarado jūsų kodo." @@ -16952,8 +16959,6 @@ msgstr "Sugeneruokite bendrinamą nuorodą arba nukopijuokite sujungtą tinkint msgid "Generate invite link" msgstr "Generuoti kvietimo nuorodą" -#. Button label that replaces an expired browser sign-in code with a fresh one. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:64 #: src/features/auth/flow/HandoffCodeDisplay.tsx:117 msgid "Generate new code" msgstr "Generuoti naują kodą" @@ -17348,6 +17353,16 @@ msgstr "Grįžkite ir įveskite galiojantį el. pašto adresą." msgid "Go back to {productName} to continue." msgstr "Grįžkite į {productName}, kad tęstumėte." +#. Shown after approving a sign-in for an app on another device, which signs in by itself shortly. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:292 +msgid "Go back to the {PRODUCT_NAME} app. It finishes signing in on its own." +msgstr "Grįžkite į {PRODUCT_NAME} programėlę. Ji baigs prisijungti pati." + +#. Shown after approving, when the browser has already handed the sign-in back to the desktop app. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:288 +msgid "Go back to the {PRODUCT_NAME} app. You can close this tab." +msgstr "Grįžkite į „{PRODUCT_NAME}“ programėlę. Galite uždaryti šią kortelę." + #. Accessible label for the community row of an expression info card, which opens a community the viewer is already a member of. {communityName} is the community name. #: src/features/expressions/components/ExpressionInfoCard.tsx:89 msgid "Go to {communityName}" @@ -19296,11 +19311,6 @@ msgstr "Neteisingas JSON. Įklijuokite visą atsakymą iš aukščiau esančio U msgid "Invalid or expired code" msgstr "Neteisingas arba pasibaigęs kodas" -#. Desktop handoff flow error shown when the entered pairing code is invalid or expired. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:13 -msgid "Invalid or expired code. Try again." -msgstr "Neteisingas arba pasibaigęs kodas. Bandykite dar kartą." - #. Short label in the authentication authorize flow. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/state/useAuthorizeFlow.ts:82 msgid "Invalid redirect_uri" @@ -20877,7 +20887,7 @@ msgstr "Vietinis laiko formatas" msgid "Localization" msgstr "Lokalizacija" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:192 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:109 #: src/features/user/components/modals/tabs/DevicesTab.tsx:152 msgid "Location" msgstr "Vieta" @@ -21035,6 +21045,11 @@ msgstr "Padaryti {userName} grupės savininku? Prarasite savininko teises." msgid "Make group owner" msgstr "Padaryti grupės savininku" +#. Shown above the code on the browser approval page when the app cannot be signed in automatically. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:253 +msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." +msgstr "Įsitikinkite, kad šis kodas sutampa su kodu programėlėje {PRODUCT_NAME}." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" @@ -24669,6 +24684,11 @@ msgstr "Nuo <0>{listPriceEffectiveDate} jūsų prenumeratos kaina pasikeis i msgid "On click" msgstr "Spustelėjus" +#. One line explanation in the desktop app above the code. signInAddress is the web address of the sign-in page, such as web.fluxer.app/login?handoff=1. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:236 +msgid "On your other device, sign in at {signInAddress} and enter this code when asked." +msgstr "Kitame įrenginyje prisijunkite adresu {signInAddress} ir įveskite šį kodą, kai būsite paprašyti." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:715 msgid "Once deleted, the application and its credentials are permanently removed." msgstr "Ištrynus programą, ji ir jos prisijungimo duomenys bus visam laikui pašalinti." @@ -24734,6 +24754,11 @@ msgstr "Tik @paminėjimai" msgid "Only applies on wide screens." msgstr "Taikoma tik plačiuose ekranuose." +#. Warning under the title of the browser approval page, so people do not approve a sign-in someone else started. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:245 +msgid "Only continue if you started this sign-in on a device you control." +msgstr "Tęskite tik tuo atveju, jei šį prisijungimą pradėjote valdydami savo įrenginį." + #. Body copy in the mature content check modal. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:32 msgid "Only credit cards are accepted. Debit and prepaid cards cannot be used for the mature content check." @@ -24922,6 +24947,11 @@ msgstr "Atidaryti „{landmarkName}“" msgid "Open {premiumProductFullName}" msgstr "Atidarykite {premiumProductFullName}" +#. Button on the browser page after approving that opens the desktop app again if it did not come to the front. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:304 +msgid "Open {PRODUCT_NAME}" +msgstr "Atidarykite {PRODUCT_NAME}" + #. Button label that opens the desktop app. productName is the app name. #. Button that hands SSO sign-in back to the mobile app. productName is the app name. #: src/features/auth/components/pages/SsoCallbackPage.tsx:47 @@ -25012,12 +25042,15 @@ msgstr "Atidaryti reklamjuostės parinktis" msgid "Open bookmarks" msgstr "Atidaryti žymes" -#. Button label that opens the browser sign-in handoff page. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:56 #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:184 msgid "Open browser" msgstr "Atidaryti naršyklę" +#. Button in the desktop app that reopens the browser sign-in page while the app waits for the browser. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:53 +msgid "Open browser again" +msgstr "Atidaryti naršyklę iš naujo" + #. Primary button in the screen-share picker on web. Hands off to the browser's native getDisplayMedia picker. #: src/features/voice/components/modals/ScreenSharePickerModal.tsx:209 msgid "Open browser picker" @@ -25393,10 +25426,6 @@ msgstr "Atidaryti balso ir vaizdo nustatymus" msgid "Open with {accountName} on {instanceName}" msgstr "Atidaryti su {accountName} per {instanceName}" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:414 -msgid "Open your browser to finish signing in." -msgstr "Atidarykite naršyklę, kad užbaigtumėte prisijungimą." - #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:137 msgid "Open your browser, sign in, then enter the code below to link your account." msgstr "Atidarykite naršyklę, prisijunkite, tada įveskite toliau pateiktą kodą, kad susietumėte paskyrą." @@ -25422,7 +25451,7 @@ msgstr "Atidaro narių puslapį. Paspauskite tarpą arba Enter, kad atidarytumė #. Short label in the language tab. Keep it concise. #. Spellcheck engine option in the textarea spellcheck submenu. Uses the host operating system spellchecker. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:79 #: src/features/user/components/modals/tabs/LanguageTab.tsx:110 msgid "Operating system" @@ -26440,7 +26469,7 @@ msgstr "Planas" msgid "Plans, perks, gifts and your subscription all live on one page." msgstr "Planai, privilegijos, dovanos ir jūsų prenumerata – viskas vienoje vietoje." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:172 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:89 msgid "Platform" msgstr "Platforma" @@ -31860,11 +31889,6 @@ msgstr "Rodyti pokalbį" msgid "Show chat with {count, plural, one {# unread message} other {# unread messages}}" msgstr "Rodyti pokalbį (yra {count, plural, one {# neperskaityta žinutė} few {# neperskaitytos žinutės} other {# neperskaitytų žinučių}})" -#. Button label that opens the manual browser handoff code fallback. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:60 -msgid "Show code" -msgstr "Rodyti kodą" - #. Developer voice status menu option for displaying the voice connection identifier. #: src/features/voice/components/voice_connection_status/VoiceConnectionStatusInner.tsx:76 msgid "Show connection ID" @@ -32307,7 +32331,9 @@ msgstr "Reklamjuostė rodoma atskiroje skiltyje po bendruomenės antrašte." msgid "Sidebar" msgstr "Šoninė juosta" +#. Button in the browser that approves signing in to the desktop or mobile app that asked for it. #. Generic authentication action label. Use for buttons, links, page titles, and accessible labels. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:33 #: src/features/i18n/utils/CommonMessageDescriptors.ts:79 msgid "Sign in" msgstr "Prisijungti" @@ -32322,10 +32348,35 @@ msgstr "Prisijungti iš naujo" msgid "Sign in again as {accountLabel}" msgstr "Prisijunkite dar kartą kaip {accountLabel}" +#. Shown in the desktop app while it waits for the browser. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:193 +msgid "Sign in to {instanceName} in your browser and confirm. This app finishes signing in on its own." +msgstr "Prisijunkite prie {instanceName} naršyklėje ir patvirtinkite. Ši programa baigs prisijungimą pati." + +#. Shown in the desktop app above the code when the browser cannot return the sign-in automatically. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:189 +msgid "Sign in to {instanceName} in your browser, and check that it shows this code:" +msgstr "Prisijunkite prie {instanceName} savo naršyklėje ir patikrinkite, ar rodomas šis kodas:" + #: src/features/auth/flow/GiftHeader.tsx:33 msgid "Sign in to claim your gift" msgstr "Prisijunkite, kad atsiimtumėte dovaną" +#. Title of the browser page where the user approves signing in to an app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:71 +msgid "Sign in to the {PRODUCT_NAME} app" +msgstr "Prisijunkite prie {PRODUCT_NAME} programėlės" + +#. Title of the browser page where the user approves signing in to the desktop app that opened it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:58 +msgid "Sign in to the {PRODUCT_NAME} desktop app" +msgstr "Prisijunkite prie „{PRODUCT_NAME}“ darbalaukio programos" + +#. Title of the browser page where the user approves signing in to the mobile app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:65 +msgid "Sign in to the {PRODUCT_NAME} mobile app" +msgstr "Prisijunkite prie „{PRODUCT_NAME}“ mobiliosios programėlės" + #. Action label that starts passkey authentication. #: src/features/auth/AuthMessageDescriptors.ts:13 msgid "Sign in with a passkey" @@ -32404,14 +32455,10 @@ msgstr "Atsijungti nuo kitų įrenginių" msgid "Sign out?" msgstr "Atsijungti?" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:234 -msgid "Sign-in approved" -msgstr "Prisijungimas patvirtintas" - -#. Short label in the authentication handoff approval flow. Keep the tone plain and specific. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:26 -msgid "Sign-in code" -msgstr "Prisijungimo kodas" +#. Title of the browser page after the user cancelled the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:322 +msgid "Sign-in cancelled" +msgstr "Prisijungimas atšauktas" #. Section title for email address and password controls in the account security tab. Keep it concise. #: src/features/user/components/modals/tabs/account_security_tab/AccountSecuritySections.tsx:23 @@ -32434,10 +32481,6 @@ msgstr "Prisijungimo eiga" msgid "Sign-in method" msgstr "Prisijungimo būdas" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:84 -msgid "Sign-in request" -msgstr "Prisijungimo užklausa" - #. Aria label on the signal-strength icon shown while the first latency sample is still pending. #: src/features/voice/components/SignalStrengthIcon.tsx:16 msgid "Signal strength loading" @@ -32454,6 +32497,21 @@ msgstr "Prisijungta" msgid "Signed-in devices" msgstr "Prisijungę įrenginiai" +#. Shown on the browser approval page above the buttons. name is the display name of the account that will be signed in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:137 +msgid "Signing in as {name}" +msgstr "Prisijungiama kaip {name}" + +#. Text button in the desktop app that shows a code to type into a browser on a different device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:207 +msgid "Signing in on another device?" +msgstr "Prisijungiate kitame įrenginyje?" + +#. Title while the browser approves the sign-in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:228 +msgid "Signing in…" +msgstr "Prisijungiama…" + #. Label for Bluesky OAuth signing key ID input. #: src/features/app/components/setup/SetupWizardSteps.tsx:1161 msgid "Signing key ID" @@ -33505,6 +33563,8 @@ msgstr "Pradėti mikrofono testą" msgid "Start minimized" msgstr "Pradėti sumažintą" +#. Button on the browser page after cancelling that goes back to choosing an account. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:337 #: src/features/moderation/components/report/ReportStepDetails.tsx:326 #: src/features/moderation/components/report/ReportStepEmail.tsx:97 #: src/features/moderation/components/report/ReportStepVerification.tsx:134 @@ -34911,6 +34971,11 @@ msgstr "tajų" msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Dėkojame, kad padedate užtikrinti „{productName}“ saugumą. Jūsų pranešimą peržiūrėsime kuo greičiau." +#. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 +msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." +msgstr "Šis kodas netinkamas {instanceHost}. Patikrinkite kodą programėlėje {productName} ir bandykite dar kartą." + #. Body of the passkey page after the passkey prompt failed or was dismissed. Keep plain. #: src/features/auth/passkey_migration/PasskeyBridgePage.tsx:36 msgid "That didn't work. Try again or cancel." @@ -34954,11 +35019,6 @@ msgstr "Nepavyko ištrinti žinutės" msgid "That message is gone, or you lost access to the conversation." msgstr "Ši žinutė dingo arba praradote prieigą prie pokalbio." -#. Error shown when a browser sign-in handoff code expires before it is approved. -#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 -msgid "That sign-in code expired. Try again." -msgstr "Tas prisijungimo kodas baigėsi. Pabandykite dar kartą." - #. End-of-list line in the saved messages popout after every bookmark has been shown. #. End-of-list line on the saved messages page after every bookmark has been shown. #: src/features/messaging/components/pages/SavedMessagesPage.tsx:35 @@ -34966,6 +35026,21 @@ msgstr "Tas prisijungimo kodas baigėsi. Pabandykite dar kartą." msgid "That's all of them." msgstr "Tai viskas." +#. Warning on the browser approval page when the app asked for a different account than the one chosen. requestedIdentifier is the email or username the app asked for, name is the chosen account's display name. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:131 +msgid "The {PRODUCT_NAME} app asked to sign in as {requestedIdentifier}, but you chose {name}." +msgstr "„{PRODUCT_NAME}“ programa paprašė prisijungti kaip {requestedIdentifier}, bet pasirinkote {name}." + +#. Explains where the code comes from, under the title of the browser page where it is typed. Signing in on another device is the label of a button in the app and must match its translation. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:187 +msgid "The {PRODUCT_NAME} app on your other device shows it under Signing in on another device. Only enter a code from a device you control." +msgstr "„{PRODUCT_NAME}“ programa jūsų kitame įrenginyje rodoma skiltyje „Prisijungimas kitu įrenginiu“. Įveskite kodą tik iš įrenginio, kurį kontroliuojate." + +#. Shown after the user cancelled the sign-in request in the browser. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:327 +msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." +msgstr "„{PRODUCT_NAME}“ programa nebuvo prisijungta. Galite uždaryti šią skirtuką." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -34984,10 +35059,6 @@ msgstr "Programa nulūžo" msgid "The app has crashed. Checking for updates that might fix this issue…" msgstr "Programa nulūžo. Tikrinama, ar yra naujinimų, kurie galėtų išspręsti šią problemą…" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:237 -msgid "The app should now be signed in to your account." -msgstr "Dabar turėtumėte būti prisijungę prie savo paskyros programėlėje." - #. Activity log detail line under a lifted ban, for a temporary ban that had already ended on its own before it was lifted. A ban is the community ban, not the feature that blocks a user. {date} is when the ban ended, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:55 msgid "The ban had already expired on {date}" @@ -35185,6 +35256,16 @@ msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "Ekrano bendrinimo šaltinis nustojo siųsti vaizdą, todėl ekrano bendrinimas buvo sustabdytas." +#. Error shown in the desktop app when a browser sign-in request expires before it is approved in the browser. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 +msgid "The sign-in request expired before your browser approved it." +msgstr "Prašymas prisijungti baigėsi, kol jūsų naršyklė jo nepatvirtino." + +#. Error shown in the desktop app when the user pressed Cancel on the browser sign-in page. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:14 +msgid "The sign-in was cancelled in your browser." +msgstr "Prisijungimas jūsų naršyklėje buvo atšauktas." + #. Activity log detail line under a deleted sticker, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the sticker, shown as a clickable user chip. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts:100 msgid "The sticker was uploaded by {user}" @@ -35409,6 +35490,11 @@ msgstr "Trečioji šalis" msgid "This account can't be blocked." msgstr "Šios paskyros negalima užblokuoti." +#. Error in the browser when the chosen account belongs to a different server than the app that asked to sign in. accountHost and requestHost are server addresses. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:38 +msgid "This account is on {accountHost}, but the {productName} app is signing in to {requestHost}. Choose an account on {requestHost}." +msgstr "Ši paskyra yra serveryje {accountHost}, bet programa {productName} jungiasi prie {requestHost}. Pasirinkite paskyrą iš serverio {requestHost}." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:418 msgid "This action cannot be undone. All associated data, including the bot user, will be permanently deleted." msgstr "Šio veiksmo anuliuoti negalima. Visi susiję duomenys, įskaitant boto naudotoją, bus visam laikui ištrinti." @@ -35552,11 +35638,6 @@ msgstr "Tai visiškai išvalo jūsų premium būseną serveryje, įskaitant prem msgid "This code doesn't exist." msgstr "Šio kodo nėra." -#. Status shown under the browser sign-in code once its countdown reaches zero. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:68 -msgid "This code expired." -msgstr "Šis kodas nebegalioja." - #. Gift redemption error modal body for an invalid or already used code. #: src/features/gift/commands/GiftCommands.tsx:37 msgid "This code is invalid or already used." @@ -36076,6 +36157,11 @@ msgstr "Ši naujo slaptažodžio nuoroda nebegalioja. Nuorodos galioja 1 valand msgid "This shows how links appear: {linkPreviewExampleUrl}" msgstr "Taip atrodo nuorodos: {linkPreviewExampleUrl}" +#. Error in the browser when the sign-in request from the desktop app no longer exists, because it expired or the app cancelled it. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:20 +msgid "This sign-in request expired or was cancelled in the {productName} app. Start again from the app." +msgstr "Šis prisijungimo prašymas baigėsi arba buvo atšauktas programėlėje {productName}. Pabandykite dar kartą iš programėlės." + #. Label above the community a sticker comes from in the sticker info card. #: src/features/expressions/components/ExpressionInfoCard.tsx:75 msgid "This sticker is from" @@ -38521,6 +38607,11 @@ msgstr "Naudokite {url} ten, kur turėtų būti įterptas paveikslėlio URL." msgid "Use a dedicated modal to set a message history threshold date for members who don't have the {readMessageHistoryPermissionLabel} permission." msgstr "Atskirame lange nustatykite žinučių istorijos ribinę datą nariams, kurie neturi {readMessageHistoryPermissionLabel} leidimo." +#. Text button on the browser approval page that goes back to choosing which account signs in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:149 +msgid "Use a different account" +msgstr "Naudoti kitą paskyrą" + #: src/features/auth/flow/instance_selector/InstancePickerRows.tsx:267 msgid "Use a self-hosted instance URL" msgstr "Naudokite savo prieglobos instancijos URL" @@ -39297,10 +39388,6 @@ msgstr "Patvirtinkite savo el. pašto adresą, kad įsigytumėte {premiumProduct msgid "Verify your email to start DMs." msgstr "Patvirtinkite el. paštą, kad galėtumėte pradėti tiesioginius pokalbius." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:142 -msgid "Verifying code…" -msgstr "Tikrinamas kodas…" - #: src/features/auth/components/pages/ResetPasswordPage.tsx:145 msgid "Verifying your reset link…" msgstr "Tikrinama nuoroda slaptažodžiui nustatyti iš naujo…" @@ -40074,10 +40161,6 @@ msgstr "Palaukite akimirką, prieš trindami daugiau žinučių." msgid "Wait between messages. Members with \"{bypassSlowmodePermissionLabel}\" can bypass this." msgstr "Laikas tarp žinučių. Nariai, turintys leidimą „{bypassSlowmodePermissionLabel}“, gali jį apeiti." -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:445 -msgid "Waiting for browser approval." -msgstr "Laukiama naršyklės patvirtinimo." - #. Tooltip explaining that video / screen share controls are gated while the voice connection is not yet ready. #: src/features/voice/components/voice_connection_status/LocalParticipantControls.tsx:45 msgid "Waiting for connection..." @@ -40119,10 +40202,6 @@ msgstr "Pažadinti" msgid "Warning" msgstr "Įspėjimas" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:158 -msgid "Was this you?" -msgstr "Ar tai buvote jūs?" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:243 msgctxt "us-state" @@ -40960,10 +41039,6 @@ msgstr "Jau turite {premiumProductName} visam laikui" msgid "You already have this connection." msgstr "Jau turite šį ryšį." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:87 -msgid "You are about to authorize an app to sign in to your account. Only continue if you initiated this request from a device you control." -msgstr "Ketinate suteikti programėlei leidimą prisijungti prie jūsų paskyros. Tęskite tik tuo atveju, jei šį prašymą inicijavote iš įrenginio, kurį valdote." - #. External link warning title. productName is the Fluxer product name. #: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:22 msgid "You are about to leave {productName}" @@ -41733,6 +41808,11 @@ msgstr "Jums taikomas senas tarifas. Dabartinė šio plano kaina yra {currentSub msgid "You're sending messages too quickly" msgstr "Žinutes siunčiate per greitai" +#. Title of the browser page after the user approved signing in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:282 +msgid "You're signed in" +msgstr "Esate prisijungę" + #. Status text on the screen-share hover popout shown to the local streamer. Lightly playful tone. #: src/features/voice/components/StreamWatchHoverPopout.tsx:43 msgid "You're streaming!" diff --git a/fluxer_app/src/features/i18n/locales/nl/messages.po b/fluxer_app/src/features/i18n/locales/nl/messages.po index 93ee042ff..ff3b7a230 100644 --- a/fluxer_app/src/features/i18n/locales/nl/messages.po +++ b/fluxer_app/src/features/i18n/locales/nl/messages.po @@ -1573,7 +1573,7 @@ msgid "{imageCount, plural, one {# image} other {# images}}, {videoCount, plural msgstr "{imageCount, plural, one {# afbeelding} other {# afbeeldingen}}, {videoCount, plural, one {# video} other {# video's}}" #. Explanation shown when the selected instance advertises no web app endpoint. Instance name is interpolated. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:76 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:61 msgid "{instanceName} does not publish a web address, so sign-in cannot be handed to a browser." msgstr "{instanceName} publiceert geen webadres, dus aanmelden kan niet via een browser worden afgehandeld." @@ -2777,14 +2777,6 @@ msgstr "een uitgebreide embed of linkvoorbeeld (geen geüpload bestand)" msgid "A separate profile for each community" msgstr "Een apart profiel voor elke community" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:164 -msgid "A sign-in request was made for your account. Only approve if you initiated it." -msgstr "Er is een aanmeldingsverzoek gedaan voor je account. Keur dit alleen goed als je het zelf hebt gestart." - -#: src/features/auth/flow/HandoffApprovalFlow.tsx:162 -msgid "A sign-in request was made from the following device. Only approve if you recognize it." -msgstr "Er is een aanmeldingsverzoek gedaan vanaf het volgende apparaat. Keur alleen goed als je het herkent." - #. Description for has:sticker. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:51 msgid "a sticker" @@ -4811,10 +4803,6 @@ msgstr "Toepassen op alle communities" msgid "Approval required" msgstr "Goedkeuring vereist" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:206 -msgid "Approve" -msgstr "Goedkeuren" - #. Hint under the sign-in option on fluxer.com that pairs a newly installed app with the old installed app. productName is the app name. #: src/features/auth/flow/AuthLoginLayout.tsx:101 msgid "Approve this app from the {productName} app you already use. No password needed." @@ -7873,6 +7861,11 @@ msgstr "Toegang controleren..." msgid "Checking screen recording permission..." msgstr "Toestemming voor schermopname controleren..." +#. Title while the browser looks up the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:224 +msgid "Checking the sign-in request…" +msgstr "De inlogaanvraag wordt gecontroleerd…" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -8847,6 +8840,11 @@ msgstr "Codeblokken" msgid "Code expired" msgstr "Code verlopen" +#. Label of the field in the browser where the user types the 12-character code shown in the desktop or mobile app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:28 +msgid "Code from the {productName} app" +msgstr "Code van de {productName}-app" + #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 @@ -9348,7 +9346,6 @@ msgstr "Verberg je {premiumProductName}-badge volledig voor andere gebruikers" #: src/features/auth/components/pages/SsoCallbackPage.tsx:256 #: src/features/auth/components/pages/SsoCallbackPage.tsx:322 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:216 msgid "Completing sign-in…" msgstr "Aanmelden afronden…" @@ -9782,7 +9779,6 @@ msgstr "Contextmenu's kunnen worden geopend met een linkermuisklik (op knoppen) #: src/features/auth/components/modals/DeviceRevokeModal.tsx:77 #: src/features/auth/components/modals/PasskeyPinModal.tsx:111 #: src/features/auth/components/pages/oauth_authorize_page/OAuthAccountStep.tsx:36 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/connection/components/modals/AddConnectionModal.tsx:384 #: src/features/i18n/utils/CommonMessageDescriptors.ts:726 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:413 @@ -9790,6 +9786,11 @@ msgstr "Contextmenu's kunnen worden geopend met een linkermuisklik (op knoppen) msgid "Continue" msgstr "Doorgaan" +#. Title in the desktop app while it waits for the user to sign in on the browser page it opened. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:177 +msgid "Continue in your browser" +msgstr "Doorgaan in je browser" + #. Button in the gift time confirmation that proceeds to subscription checkout. #: src/features/app/components/dialogs/components/plutonium/hooks/useCheckoutActions.tsx:145 msgid "Continue to checkout" @@ -10437,7 +10438,7 @@ msgid "Couldn't close DM" msgstr "DM kon niet worden gesloten" #. Desktop handoff flow error shown when finalizing the sign-in fails after a valid code. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:21 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:34 msgid "Couldn't complete sign-in. Try again." msgstr "Aanmelden is mislukt. Probeer het opnieuw." @@ -10831,6 +10832,11 @@ msgstr "Autorisatie van {blueskyProviderName} kon niet worden gestart" msgid "Couldn't start checkout" msgstr "Afrekenen kon niet worden gestart" +#. Shown in the desktop app when the browser sign-in request could not be created. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:66 +msgid "Couldn't start signing in with your browser." +msgstr "Kon het aanmelden via je browser niet starten." + #. Toast error shown when creating a new account connection fails. #: src/features/connection/commands/ConnectionCommands.ts:27 msgid "Couldn't start the connection" @@ -10942,7 +10948,7 @@ msgid "Couldn't upload banner" msgstr "Banner kon niet worden geüpload" #. Desktop handoff flow error shown when verifying the pairing code fails for an unexpected reason. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:17 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:30 msgid "Couldn't verify that code. Try again." msgstr "Code kon niet worden geverifieerd. Probeer het opnieuw." @@ -12503,7 +12509,6 @@ msgstr "Compacte weergave" #. Short label in the settings dialog permission components. Keep the tone plain and specific. #: src/features/app/components/dialogs/shared/PermissionComponents.tsx:16 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:203 msgid "Deny" msgstr "Weigeren" @@ -14910,15 +14915,16 @@ msgstr "Voer de code van {digitCount} cijfers uit je authenticator-app of een va msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Voer de code van {digitCount} cijfers uit je authenticator-app in." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:108 -msgid "Enter the code" -msgstr "Voer de code in" - #. Inline validation error on the verification step of the DSA report flow when the code field is empty. #: src/features/moderation/components/pages/ReportPage.tsx:74 msgid "Enter the code before continuing." msgstr "Voer de code in voordat je verdergaat." +#. Title of the browser page where the user types the 12-character code the app shows under Signing in on another device. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +msgid "Enter the code from the {PRODUCT_NAME} app" +msgstr "Voer de code uit de {PRODUCT_NAME}-app in" + #. Body text in the authentication sudo verification modal. Keep the tone plain and specific. #: src/features/auth/components/modals/SudoVerificationModal.tsx:56 msgid "Enter the code from your authenticator app." @@ -14933,10 +14939,6 @@ msgstr "Voer de code in die is verzonden naar je huidige e-mailadres." msgid "Enter the code sent to your email address." msgstr "Voer de code in die naar je e-mailadres is gestuurd." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:111 -msgid "Enter the code shown in the app to continue." -msgstr "Voer de code in die in de app wordt weergegeven om door te gaan." - #: src/features/user/components/modals/BouncedEmailChangeModal.tsx:157 #: src/features/user/components/modals/EmailChangeModal.tsx:244 msgid "Enter the code we emailed to your new address." @@ -14959,6 +14961,11 @@ msgstr "Voer het nieuwe e-mailadres in dat je wilt gebruiken. We sturen hierna e msgid "Enter the PIN for your security key to continue." msgstr "Voer de pincode van je beveiligingssleutel in om verder te gaan." +#. Title in the desktop app above the code the user types into a browser on another device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:228 +msgid "Enter this code in your browser" +msgstr "Voer deze code in je browser in" + #: src/features/auth/flow/HandoffCodeDisplay.tsx:132 msgid "Enter this code in your browser to complete sign-in." msgstr "Voer deze code in je browser in om het aanmelden te voltooien." @@ -15362,7 +15369,7 @@ msgstr "Verloopt tussen {earliest} en {latest}" msgid "Expires in {remaining}s" msgstr "Verloopt over {remaining}s" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:374 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:250 msgid "Expires in {remainingSeconds}s" msgstr "Vervalt over {remainingSeconds}s" @@ -16165,7 +16172,7 @@ msgid "Fluxer" msgstr "Fluxer" #. Status shown when browser sign-in status polling gives up after repeated failures. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:72 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:57 msgid "Fluxer stopped checking whether the browser approved this sign-in. It didn't lose your code." msgstr "Fluxer is gestopt met controleren of de browser deze aanmelding goedkeurde. Je code is niet verloren gegaan." @@ -16952,8 +16959,6 @@ msgstr "Genereer een deelbare link of kopieer je gecombineerde aangepaste CSS." msgid "Generate invite link" msgstr "Uitnodigingslink genereren" -#. Button label that replaces an expired browser sign-in code with a fresh one. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:64 #: src/features/auth/flow/HandoffCodeDisplay.tsx:117 msgid "Generate new code" msgstr "Nieuwe code genereren" @@ -17348,6 +17353,16 @@ msgstr "Ga terug en voer een geldig e-mailadres in." msgid "Go back to {productName} to continue." msgstr "Ga terug naar {productName} om verder te gaan." +#. Shown after approving a sign-in for an app on another device, which signs in by itself shortly. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:292 +msgid "Go back to the {PRODUCT_NAME} app. It finishes signing in on its own." +msgstr "Ga terug naar de {PRODUCT_NAME}-app. Het voltooit het aanmelden vanzelf." + +#. Shown after approving, when the browser has already handed the sign-in back to the desktop app. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:288 +msgid "Go back to the {PRODUCT_NAME} app. You can close this tab." +msgstr "Ga terug naar de {PRODUCT_NAME}-app. Je kunt dit tabblad sluiten." + #. Accessible label for the community row of an expression info card, which opens a community the viewer is already a member of. {communityName} is the community name. #: src/features/expressions/components/ExpressionInfoCard.tsx:89 msgid "Go to {communityName}" @@ -19295,11 +19310,6 @@ msgstr "Ongeldige JSON. Plak het volledige antwoord van de bovenstaande URL." msgid "Invalid or expired code" msgstr "Ongeldige of verlopen code" -#. Desktop handoff flow error shown when the entered pairing code is invalid or expired. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:13 -msgid "Invalid or expired code. Try again." -msgstr "Ongeldige of verlopen code. Probeer het opnieuw." - #. Short label in the authentication authorize flow. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/state/useAuthorizeFlow.ts:82 msgid "Invalid redirect_uri" @@ -20876,7 +20886,7 @@ msgstr "Tijdnotatie" msgid "Localization" msgstr "Taal en regio" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:192 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:109 #: src/features/user/components/modals/tabs/DevicesTab.tsx:152 msgid "Location" msgstr "Locatie" @@ -21034,6 +21044,11 @@ msgstr "Wil je {userName} de groepseigenaar maken? Je verliest dan je eigenaarsr msgid "Make group owner" msgstr "Groepseigenaar maken" +#. Shown above the code on the browser approval page when the app cannot be signed in automatically. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:253 +msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." +msgstr "Zorg ervoor dat deze code overeenkomt met die in de {PRODUCT_NAME} app." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" @@ -24668,6 +24683,11 @@ msgstr "Op <0>{listPriceEffectiveDate} gaat je abonnement van {listPriceCurr msgid "On click" msgstr "Bij klikken" +#. One line explanation in the desktop app above the code. signInAddress is the web address of the sign-in page, such as web.fluxer.app/login?handoff=1. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:236 +msgid "On your other device, sign in at {signInAddress} and enter this code when asked." +msgstr "Meld je op je andere apparaat aan via {signInAddress} en voer deze code in wanneer daarom wordt gevraagd." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:715 msgid "Once deleted, the application and its credentials are permanently removed." msgstr "Na verwijdering zijn de app en de bijbehorende toegangsgegevens definitief gewist." @@ -24733,6 +24753,11 @@ msgstr "Alleen @vermeldingen" msgid "Only applies on wide screens." msgstr "Alleen van toepassing op brede schermen." +#. Warning under the title of the browser approval page, so people do not approve a sign-in someone else started. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:245 +msgid "Only continue if you started this sign-in on a device you control." +msgstr "Ga alleen door als je dit aanmelden op een apparaat bent gestart dat je beheert." + #. Body copy in the mature content check modal. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:32 msgid "Only credit cards are accepted. Debit and prepaid cards cannot be used for the mature content check." @@ -24921,6 +24946,11 @@ msgstr "Open {landmarkName}" msgid "Open {premiumProductFullName}" msgstr "Open {premiumProductFullName}" +#. Button on the browser page after approving that opens the desktop app again if it did not come to the front. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:304 +msgid "Open {PRODUCT_NAME}" +msgstr "Open {PRODUCT_NAME}" + #. Button label that opens the desktop app. productName is the app name. #. Button that hands SSO sign-in back to the mobile app. productName is the app name. #: src/features/auth/components/pages/SsoCallbackPage.tsx:47 @@ -25011,12 +25041,15 @@ msgstr "Banneropties openen" msgid "Open bookmarks" msgstr "Opgeslagen berichten openen" -#. Button label that opens the browser sign-in handoff page. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:56 #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:184 msgid "Open browser" msgstr "Browser openen" +#. Button in the desktop app that reopens the browser sign-in page while the app waits for the browser. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:53 +msgid "Open browser again" +msgstr "Open browser opnieuw" + #. Primary button in the screen-share picker on web. Hands off to the browser's native getDisplayMedia picker. #: src/features/voice/components/modals/ScreenSharePickerModal.tsx:209 msgid "Open browser picker" @@ -25392,10 +25425,6 @@ msgstr "Audio- en video-instellingen openen" msgid "Open with {accountName} on {instanceName}" msgstr "Openen met {accountName} op {instanceName}" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:414 -msgid "Open your browser to finish signing in." -msgstr "Open je browser om het inloggen te voltooien." - #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:137 msgid "Open your browser, sign in, then enter the code below to link your account." msgstr "Open je browser, meld je aan en voer de onderstaande code in om je account te koppelen." @@ -25421,7 +25450,7 @@ msgstr "Opent de pagina Leden. Druk op Spatie of Enter om te openen." #. Short label in the language tab. Keep it concise. #. Spellcheck engine option in the textarea spellcheck submenu. Uses the host operating system spellchecker. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:79 #: src/features/user/components/modals/tabs/LanguageTab.tsx:110 msgid "Operating system" @@ -26439,7 +26468,7 @@ msgstr "Abonnement" msgid "Plans, perks, gifts and your subscription all live on one page." msgstr "Abonnementen, voordelen, cadeaus en je abonnement vind je allemaal op één pagina." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:172 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:89 msgid "Platform" msgstr "Platform" @@ -31859,11 +31888,6 @@ msgstr "Chat weergeven" msgid "Show chat with {count, plural, one {# unread message} other {# unread messages}}" msgstr "Toon chat met {count, plural, one {# ongelezen bericht} other {# ongelezen berichten}}" -#. Button label that opens the manual browser handoff code fallback. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:60 -msgid "Show code" -msgstr "Toon code" - #. Developer voice status menu option for displaying the voice connection identifier. #: src/features/voice/components/voice_connection_status/VoiceConnectionStatusInner.tsx:76 msgid "Show connection ID" @@ -32306,7 +32330,9 @@ msgstr "Toont de banner in een eigen sectie onder de communityheader." msgid "Sidebar" msgstr "Zijbalk" +#. Button in the browser that approves signing in to the desktop or mobile app that asked for it. #. Generic authentication action label. Use for buttons, links, page titles, and accessible labels. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:33 #: src/features/i18n/utils/CommonMessageDescriptors.ts:79 msgid "Sign in" msgstr "Inloggen" @@ -32321,10 +32347,35 @@ msgstr "Opnieuw inloggen" msgid "Sign in again as {accountLabel}" msgstr "Log opnieuw in als {accountLabel}" +#. Shown in the desktop app while it waits for the browser. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:193 +msgid "Sign in to {instanceName} in your browser and confirm. This app finishes signing in on its own." +msgstr "Log in bij {instanceName} in je browser en bevestig. Deze app voltooit het inloggen vanzelf." + +#. Shown in the desktop app above the code when the browser cannot return the sign-in automatically. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:189 +msgid "Sign in to {instanceName} in your browser, and check that it shows this code:" +msgstr "Meld je aan bij {instanceName} in je browser en controleer of deze code wordt weergegeven:" + #: src/features/auth/flow/GiftHeader.tsx:33 msgid "Sign in to claim your gift" msgstr "Log in om je cadeau in te wisselen" +#. Title of the browser page where the user approves signing in to an app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:71 +msgid "Sign in to the {PRODUCT_NAME} app" +msgstr "Meld je aan bij de app {PRODUCT_NAME}" + +#. Title of the browser page where the user approves signing in to the desktop app that opened it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:58 +msgid "Sign in to the {PRODUCT_NAME} desktop app" +msgstr "Meld je aan bij de {PRODUCT_NAME} desktop-app" + +#. Title of the browser page where the user approves signing in to the mobile app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:65 +msgid "Sign in to the {PRODUCT_NAME} mobile app" +msgstr "Meld je aan bij de mobiele app van {PRODUCT_NAME}" + #. Action label that starts passkey authentication. #: src/features/auth/AuthMessageDescriptors.ts:13 msgid "Sign in with a passkey" @@ -32403,14 +32454,10 @@ msgstr "Afmelden op andere apparaten" msgid "Sign out?" msgstr "Uitloggen?" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:234 -msgid "Sign-in approved" -msgstr "Aanmelden goedgekeurd" - -#. Short label in the authentication handoff approval flow. Keep the tone plain and specific. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:26 -msgid "Sign-in code" -msgstr "Inlogcode" +#. Title of the browser page after the user cancelled the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:322 +msgid "Sign-in cancelled" +msgstr "Aanmelden geannuleerd" #. Section title for email address and password controls in the account security tab. Keep it concise. #: src/features/user/components/modals/tabs/account_security_tab/AccountSecuritySections.tsx:23 @@ -32433,10 +32480,6 @@ msgstr "Aanmeldingsproces" msgid "Sign-in method" msgstr "Aanmeldmethode" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:84 -msgid "Sign-in request" -msgstr "Aanmeldingsverzoek" - #. Aria label on the signal-strength icon shown while the first latency sample is still pending. #: src/features/voice/components/SignalStrengthIcon.tsx:16 msgid "Signal strength loading" @@ -32453,6 +32496,21 @@ msgstr "Aangemeld" msgid "Signed-in devices" msgstr "Ingelogde apparaten" +#. Shown on the browser approval page above the buttons. name is the display name of the account that will be signed in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:137 +msgid "Signing in as {name}" +msgstr "Inloggen als {name}" + +#. Text button in the desktop app that shows a code to type into a browser on a different device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:207 +msgid "Signing in on another device?" +msgstr "Inloggen op een ander apparaat?" + +#. Title while the browser approves the sign-in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:228 +msgid "Signing in…" +msgstr "Aanmelden…" + #. Label for Bluesky OAuth signing key ID input. #: src/features/app/components/setup/SetupWizardSteps.tsx:1161 msgid "Signing key ID" @@ -33504,6 +33562,8 @@ msgstr "Microfoontest starten" msgid "Start minimized" msgstr "Starten geminimaliseerd" +#. Button on the browser page after cancelling that goes back to choosing an account. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:337 #: src/features/moderation/components/report/ReportStepDetails.tsx:326 #: src/features/moderation/components/report/ReportStepEmail.tsx:97 #: src/features/moderation/components/report/ReportStepVerification.tsx:134 @@ -34910,6 +34970,11 @@ msgstr "Thais" msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Bedankt dat je helpt om {productName} veilig te houden. We bekijken je melding zo snel mogelijk." +#. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 +msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." +msgstr "Die code is niet geldig op {instanceHost}. Controleer de code in de {productName}-app en probeer het opnieuw." + #. Body of the passkey page after the passkey prompt failed or was dismissed. Keep plain. #: src/features/auth/passkey_migration/PasskeyBridgePage.tsx:36 msgid "That didn't work. Try again or cancel." @@ -34953,11 +35018,6 @@ msgstr "Dat bericht is niet verwijderd" msgid "That message is gone, or you lost access to the conversation." msgstr "Dat bericht is verdwenen, of je hebt geen toegang meer tot het gesprek." -#. Error shown when a browser sign-in handoff code expires before it is approved. -#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 -msgid "That sign-in code expired. Try again." -msgstr "Die inlogcode is verlopen. Probeer het opnieuw." - #. End-of-list line in the saved messages popout after every bookmark has been shown. #. End-of-list line on the saved messages page after every bookmark has been shown. #: src/features/messaging/components/pages/SavedMessagesPage.tsx:35 @@ -34965,6 +35025,21 @@ msgstr "Die inlogcode is verlopen. Probeer het opnieuw." msgid "That's all of them." msgstr "Dat waren ze allemaal." +#. Warning on the browser approval page when the app asked for a different account than the one chosen. requestedIdentifier is the email or username the app asked for, name is the chosen account's display name. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:131 +msgid "The {PRODUCT_NAME} app asked to sign in as {requestedIdentifier}, but you chose {name}." +msgstr "De app {PRODUCT_NAME} vroeg om in te loggen als {requestedIdentifier}, maar je koos {name}." + +#. Explains where the code comes from, under the title of the browser page where it is typed. Signing in on another device is the label of a button in the app and must match its translation. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:187 +msgid "The {PRODUCT_NAME} app on your other device shows it under Signing in on another device. Only enter a code from a device you control." +msgstr "De {PRODUCT_NAME}-app op je andere apparaat toont dit onder 'Inloggen op een ander apparaat'. Voer alleen een code in van een apparaat dat je beheert." + +#. Shown after the user cancelled the sign-in request in the browser. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:327 +msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." +msgstr "De app {PRODUCT_NAME} was niet aangemeld. Je kunt dit tabblad sluiten." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -34983,10 +35058,6 @@ msgstr "De app is gecrasht" msgid "The app has crashed. Checking for updates that might fix this issue…" msgstr "De app is vastgelopen. We zoeken naar updates die dit probleem mogelijk kunnen oplossen…" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:237 -msgid "The app should now be signed in to your account." -msgstr "De app zou nu moeten zijn aangemeld bij je account." - #. Activity log detail line under a lifted ban, for a temporary ban that had already ended on its own before it was lifted. A ban is the community ban, not the feature that blocks a user. {date} is when the ban ended, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:55 msgid "The ban had already expired on {date}" @@ -35184,6 +35255,16 @@ msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "De bron van het gedeelde scherm verstuurde geen video meer. Daarom is het schermdelen gestopt." +#. Error shown in the desktop app when a browser sign-in request expires before it is approved in the browser. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 +msgid "The sign-in request expired before your browser approved it." +msgstr "De inlogpoging is verlopen voordat je browser deze goedkeurde." + +#. Error shown in the desktop app when the user pressed Cancel on the browser sign-in page. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:14 +msgid "The sign-in was cancelled in your browser." +msgstr "De aanmelding is geannuleerd in je browser." + #. Activity log detail line under a deleted sticker, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the sticker, shown as a clickable user chip. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts:100 msgid "The sticker was uploaded by {user}" @@ -35408,6 +35489,11 @@ msgstr "Derden" msgid "This account can't be blocked." msgstr "Dit account kan niet worden geblokkeerd." +#. Error in the browser when the chosen account belongs to a different server than the app that asked to sign in. accountHost and requestHost are server addresses. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:38 +msgid "This account is on {accountHost}, but the {productName} app is signing in to {requestHost}. Choose an account on {requestHost}." +msgstr "Dit account bevindt zich op {accountHost}, maar de app {productName} probeert in te loggen op {requestHost}. Kies een account op {requestHost}." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:418 msgid "This action cannot be undone. All associated data, including the bot user, will be permanently deleted." msgstr "Deze actie kan niet ongedaan worden gemaakt. Alle bijbehorende gegevens, inclusief de botgebruiker, worden permanent verwijderd." @@ -35551,11 +35637,6 @@ msgstr "Hiermee wordt je Premiumstatus in de backend volledig gewist, inclusief msgid "This code doesn't exist." msgstr "Deze code bestaat niet." -#. Status shown under the browser sign-in code once its countdown reaches zero. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:68 -msgid "This code expired." -msgstr "Deze code is verlopen." - #. Gift redemption error modal body for an invalid or already used code. #: src/features/gift/commands/GiftCommands.tsx:37 msgid "This code is invalid or already used." @@ -36075,6 +36156,11 @@ msgstr "Deze resetlink is verlopen. Resetlinks zijn 1 uur geldig. Vraag een nieu msgid "This shows how links appear: {linkPreviewExampleUrl}" msgstr "Dit is hoe links worden weergegeven: {linkPreviewExampleUrl}" +#. Error in the browser when the sign-in request from the desktop app no longer exists, because it expired or the app cancelled it. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:20 +msgid "This sign-in request expired or was cancelled in the {productName} app. Start again from the app." +msgstr "Dit aanmeldingsverzoek is verlopen of is geannuleerd in de app {productName}. Start opnieuw vanuit de app." + #. Label above the community a sticker comes from in the sticker info card. #: src/features/expressions/components/ExpressionInfoCard.tsx:75 msgid "This sticker is from" @@ -38520,6 +38606,11 @@ msgstr "Gebruik {url} op de plek waar de afbeeldings-URL moet worden ingevoegd." msgid "Use a dedicated modal to set a message history threshold date for members who don't have the {readMessageHistoryPermissionLabel} permission." msgstr "Gebruik een apart venster om een drempeldatum voor de berichtgeschiedenis in te stellen voor leden zonder de machtiging {readMessageHistoryPermissionLabel}." +#. Text button on the browser approval page that goes back to choosing which account signs in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:149 +msgid "Use a different account" +msgstr "Gebruik een ander account" + #: src/features/auth/flow/instance_selector/InstancePickerRows.tsx:267 msgid "Use a self-hosted instance URL" msgstr "Gebruik een zelf-gehoste instantie-URL" @@ -39296,10 +39387,6 @@ msgstr "Verifieer je e-mailadres om {premiumProductFullName} te kopen." msgid "Verify your email to start DMs." msgstr "Verifieer je e-mailadres om DM's te starten." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:142 -msgid "Verifying code…" -msgstr "Code verifiëren…" - #: src/features/auth/components/pages/ResetPasswordPage.tsx:145 msgid "Verifying your reset link…" msgstr "Je resetlink wordt geverifieerd…" @@ -40073,10 +40160,6 @@ msgstr "Wacht even voordat je meer berichten verwijdert." msgid "Wait between messages. Members with \"{bypassSlowmodePermissionLabel}\" can bypass this." msgstr "Wacht tussen berichten. Leden met de machtiging \"{bypassSlowmodePermissionLabel}\" kunnen deze wachttijd omzeilen." -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:445 -msgid "Waiting for browser approval." -msgstr "Wachten op goedkeuring van de browser." - #. Tooltip explaining that video / screen share controls are gated while the voice connection is not yet ready. #: src/features/voice/components/voice_connection_status/LocalParticipantControls.tsx:45 msgid "Waiting for connection..." @@ -40118,10 +40201,6 @@ msgstr "Uit slaapstand halen" msgid "Warning" msgstr "Waarschuwing" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:158 -msgid "Was this you?" -msgstr "Was jij dit?" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:243 msgctxt "us-state" @@ -40959,10 +41038,6 @@ msgstr "Je hebt al levenslang {premiumProductName}" msgid "You already have this connection." msgstr "Je hebt deze verbinding al." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:87 -msgid "You are about to authorize an app to sign in to your account. Only continue if you initiated this request from a device you control." -msgstr "Je staat op het punt een app te autoriseren om in te loggen op je account. Ga alleen door als je dit verzoek hebt gestart vanaf een apparaat dat je beheert." - #. External link warning title. productName is the Fluxer product name. #: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:22 msgid "You are about to leave {productName}" @@ -41732,6 +41807,11 @@ msgstr "Je hebt een oud tarief. De huidige prijs voor dit abonnement is {current msgid "You're sending messages too quickly" msgstr "Je verstuurt te snel berichten" +#. Title of the browser page after the user approved signing in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:282 +msgid "You're signed in" +msgstr "Je bent aangemeld" + #. Status text on the screen-share hover popout shown to the local streamer. Lightly playful tone. #: src/features/voice/components/StreamWatchHoverPopout.tsx:43 msgid "You're streaming!" diff --git a/fluxer_app/src/features/i18n/locales/no/messages.po b/fluxer_app/src/features/i18n/locales/no/messages.po index b64d30e91..311cfd7bf 100644 --- a/fluxer_app/src/features/i18n/locales/no/messages.po +++ b/fluxer_app/src/features/i18n/locales/no/messages.po @@ -1573,7 +1573,7 @@ msgid "{imageCount, plural, one {# image} other {# images}}, {videoCount, plural msgstr "{imageCount, plural, one {# bilde} other {# bilder}}, {videoCount, plural, one {# video} other {# videoer}}" #. Explanation shown when the selected instance advertises no web app endpoint. Instance name is interpolated. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:76 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:61 msgid "{instanceName} does not publish a web address, so sign-in cannot be handed to a browser." msgstr "{instanceName} publiserer ingen nettadresse, så innlogging kan ikke sendes til en nettleser." @@ -2777,14 +2777,6 @@ msgstr "et innebygd element eller en forhåndsvisning av en lenke (ikke en oppla msgid "A separate profile for each community" msgstr "En egen profil for hvert fellesskap" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:164 -msgid "A sign-in request was made for your account. Only approve if you initiated it." -msgstr "Det ble sendt en påloggingsforespørsel for kontoen din. Godkjenn kun hvis du selv har startet den." - -#: src/features/auth/flow/HandoffApprovalFlow.tsx:162 -msgid "A sign-in request was made from the following device. Only approve if you recognize it." -msgstr "En påloggingsforespørsel ble sendt fra følgende enhet. Godkjenn kun hvis du kjenner den igjen." - #. Description for has:sticker. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:51 msgid "a sticker" @@ -4811,10 +4803,6 @@ msgstr "Bruk på alle fellesskap" msgid "Approval required" msgstr "Krever godkjenning" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:206 -msgid "Approve" -msgstr "Godkjenn" - #. Hint under the sign-in option on fluxer.com that pairs a newly installed app with the old installed app. productName is the app name. #: src/features/auth/flow/AuthLoginLayout.tsx:101 msgid "Approve this app from the {productName} app you already use. No password needed." @@ -7873,6 +7861,11 @@ msgstr "Sjekker tilgang …" msgid "Checking screen recording permission..." msgstr "Sjekker tillatelse for skjermopptak …" +#. Title while the browser looks up the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:224 +msgid "Checking the sign-in request…" +msgstr "Sjekker innloggingsforespørselen…" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -8847,6 +8840,11 @@ msgstr "Kodeblokker" msgid "Code expired" msgstr "Koden er utløpt" +#. Label of the field in the browser where the user types the 12-character code shown in the desktop or mobile app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:28 +msgid "Code from the {productName} app" +msgstr "Kode fra {productName}-appen" + #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 @@ -9348,7 +9346,6 @@ msgstr "Skjul {premiumProductName}-merket ditt fullstendig for andre brukere" #: src/features/auth/components/pages/SsoCallbackPage.tsx:256 #: src/features/auth/components/pages/SsoCallbackPage.tsx:322 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:216 msgid "Completing sign-in…" msgstr "Fullfører pålogging …" @@ -9782,7 +9779,6 @@ msgstr "Du kan åpne kontekstmenyer med venstreklikk (på knapper) eller høyrek #: src/features/auth/components/modals/DeviceRevokeModal.tsx:77 #: src/features/auth/components/modals/PasskeyPinModal.tsx:111 #: src/features/auth/components/pages/oauth_authorize_page/OAuthAccountStep.tsx:36 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/connection/components/modals/AddConnectionModal.tsx:384 #: src/features/i18n/utils/CommonMessageDescriptors.ts:726 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:413 @@ -9790,6 +9786,11 @@ msgstr "Du kan åpne kontekstmenyer med venstreklikk (på knapper) eller høyrek msgid "Continue" msgstr "Fortsett" +#. Title in the desktop app while it waits for the user to sign in on the browser page it opened. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:177 +msgid "Continue in your browser" +msgstr "Fortsett i nettleseren din" + #. Button in the gift time confirmation that proceeds to subscription checkout. #: src/features/app/components/dialogs/components/plutonium/hooks/useCheckoutActions.tsx:145 msgid "Continue to checkout" @@ -10437,7 +10438,7 @@ msgid "Couldn't close DM" msgstr "Kunne ikke lukke direktemeldingssamtalen" #. Desktop handoff flow error shown when finalizing the sign-in fails after a valid code. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:21 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:34 msgid "Couldn't complete sign-in. Try again." msgstr "Kunne ikke fullføre pålogging. Prøv igjen." @@ -10831,6 +10832,11 @@ msgstr "Kunne ikke starte autorisering for {blueskyProviderName}" msgid "Couldn't start checkout" msgstr "Kunne ikke starte betaling" +#. Shown in the desktop app when the browser sign-in request could not be created. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:66 +msgid "Couldn't start signing in with your browser." +msgstr "Kunne ikke starte innlogging med nettleseren din." + #. Toast error shown when creating a new account connection fails. #: src/features/connection/commands/ConnectionCommands.ts:27 msgid "Couldn't start the connection" @@ -10942,7 +10948,7 @@ msgid "Couldn't upload banner" msgstr "Kunne ikke laste opp banner" #. Desktop handoff flow error shown when verifying the pairing code fails for an unexpected reason. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:17 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:30 msgid "Couldn't verify that code. Try again." msgstr "Kunne ikke bekrefte koden. Prøv igjen." @@ -12503,7 +12509,6 @@ msgstr "Kompakt visning" #. Short label in the settings dialog permission components. Keep the tone plain and specific. #: src/features/app/components/dialogs/shared/PermissionComponents.tsx:16 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:203 msgid "Deny" msgstr "Nekt" @@ -14910,15 +14915,16 @@ msgstr "Skriv inn den {digitCount}-sifrede koden fra autentiseringsappen din ell msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Skriv inn den {digitCount}-sifrede koden fra autentiseringsappen din." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:108 -msgid "Enter the code" -msgstr "Skriv inn koden" - #. Inline validation error on the verification step of the DSA report flow when the code field is empty. #: src/features/moderation/components/pages/ReportPage.tsx:74 msgid "Enter the code before continuing." msgstr "Skriv inn koden før du fortsetter." +#. Title of the browser page where the user types the 12-character code the app shows under Signing in on another device. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +msgid "Enter the code from the {PRODUCT_NAME} app" +msgstr "Skriv inn koden fra {PRODUCT_NAME}-appen" + #. Body text in the authentication sudo verification modal. Keep the tone plain and specific. #: src/features/auth/components/modals/SudoVerificationModal.tsx:56 msgid "Enter the code from your authenticator app." @@ -14933,10 +14939,6 @@ msgstr "Skriv inn koden som ble sendt til din nåværende e-postadresse." msgid "Enter the code sent to your email address." msgstr "Skriv inn koden som ble sendt til e-postadressen din." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:111 -msgid "Enter the code shown in the app to continue." -msgstr "Skriv inn koden som vises i appen, for å fortsette." - #: src/features/user/components/modals/BouncedEmailChangeModal.tsx:157 #: src/features/user/components/modals/EmailChangeModal.tsx:244 msgid "Enter the code we emailed to your new address." @@ -14959,6 +14961,11 @@ msgstr "Skriv inn den nye e-postadressen du vil bruke. Deretter sender vi en kod msgid "Enter the PIN for your security key to continue." msgstr "Skriv inn PIN-koden for sikkerhetsnøkkelen din for å fortsette." +#. Title in the desktop app above the code the user types into a browser on another device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:228 +msgid "Enter this code in your browser" +msgstr "Skriv inn denne koden i nettleseren din" + #: src/features/auth/flow/HandoffCodeDisplay.tsx:132 msgid "Enter this code in your browser to complete sign-in." msgstr "Skriv inn denne koden i nettleseren din for å fullføre påloggingen." @@ -15362,7 +15369,7 @@ msgstr "Utløper mellom {earliest} og {latest}" msgid "Expires in {remaining}s" msgstr "Utløper om {remaining} s" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:374 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:250 msgid "Expires in {remainingSeconds}s" msgstr "Utløper om {remainingSeconds}s" @@ -16165,7 +16172,7 @@ msgid "Fluxer" msgstr "Fluxer" #. Status shown when browser sign-in status polling gives up after repeated failures. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:72 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:57 msgid "Fluxer stopped checking whether the browser approved this sign-in. It didn't lose your code." msgstr "Fluxer sluttet å sjekke om nettleseren godkjente denne påloggingen. Den mistet ikke koden din." @@ -16952,8 +16959,6 @@ msgstr "Generer en delbar lenke eller kopier din kombinerte egendefinerte CSS." msgid "Generate invite link" msgstr "Generer invitasjonslenke" -#. Button label that replaces an expired browser sign-in code with a fresh one. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:64 #: src/features/auth/flow/HandoffCodeDisplay.tsx:117 msgid "Generate new code" msgstr "Generer ny kode" @@ -17348,6 +17353,16 @@ msgstr "Gå tilbake og skriv inn en gyldig e-postadresse." msgid "Go back to {productName} to continue." msgstr "Gå tilbake til {productName} for å fortsette." +#. Shown after approving a sign-in for an app on another device, which signs in by itself shortly. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:292 +msgid "Go back to the {PRODUCT_NAME} app. It finishes signing in on its own." +msgstr "Gå tilbake til {PRODUCT_NAME}-appen. Den fullfører innloggingen av seg selv." + +#. Shown after approving, when the browser has already handed the sign-in back to the desktop app. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:288 +msgid "Go back to the {PRODUCT_NAME} app. You can close this tab." +msgstr "Gå tilbake til {PRODUCT_NAME}-appen. Du kan lukke denne fanen." + #. Accessible label for the community row of an expression info card, which opens a community the viewer is already a member of. {communityName} is the community name. #: src/features/expressions/components/ExpressionInfoCard.tsx:89 msgid "Go to {communityName}" @@ -19295,11 +19310,6 @@ msgstr "Ugyldig JSON. Lim inn hele svaret fra URL-en ovenfor." msgid "Invalid or expired code" msgstr "Ugyldig eller utløpt kode" -#. Desktop handoff flow error shown when the entered pairing code is invalid or expired. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:13 -msgid "Invalid or expired code. Try again." -msgstr "Ugyldig eller utløpt kode. Prøv igjen." - #. Short label in the authentication authorize flow. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/state/useAuthorizeFlow.ts:82 msgid "Invalid redirect_uri" @@ -20876,7 +20886,7 @@ msgstr "Tidsformat for språk og region" msgid "Localization" msgstr "Lokalisering" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:192 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:109 #: src/features/user/components/modals/tabs/DevicesTab.tsx:152 msgid "Location" msgstr "Sted" @@ -21034,6 +21044,11 @@ msgstr "Gjøre {userName} til gruppeeier? Du mister eierrettighetene dine." msgid "Make group owner" msgstr "Gjør til gruppeeier" +#. Shown above the code on the browser approval page when the app cannot be signed in automatically. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:253 +msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." +msgstr "Sørg for at denne koden samsvarer med den i {PRODUCT_NAME}-appen." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" @@ -24668,6 +24683,11 @@ msgstr "Fra <0>{listPriceEffectiveDate} går abonnementet ditt fra {listPric msgid "On click" msgstr "Ved klikk" +#. One line explanation in the desktop app above the code. signInAddress is the web address of the sign-in page, such as web.fluxer.app/login?handoff=1. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:236 +msgid "On your other device, sign in at {signInAddress} and enter this code when asked." +msgstr "På den andre enheten, logg inn på {signInAddress} og oppgi denne koden når du blir bedt om det." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:715 msgid "Once deleted, the application and its credentials are permanently removed." msgstr "Når appen slettes, fjernes den og tilgangsopplysningene permanent." @@ -24733,6 +24753,11 @@ msgstr "Kun @omtaler" msgid "Only applies on wide screens." msgstr "Gjelder bare på brede skjermer." +#. Warning under the title of the browser approval page, so people do not approve a sign-in someone else started. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:245 +msgid "Only continue if you started this sign-in on a device you control." +msgstr "Fortsett bare hvis du startet denne påloggingen på en enhet du kontrollerer." + #. Body copy in the mature content check modal. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:32 msgid "Only credit cards are accepted. Debit and prepaid cards cannot be used for the mature content check." @@ -24921,6 +24946,11 @@ msgstr "Åpne {landmarkName}" msgid "Open {premiumProductFullName}" msgstr "Åpne {premiumProductFullName}" +#. Button on the browser page after approving that opens the desktop app again if it did not come to the front. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:304 +msgid "Open {PRODUCT_NAME}" +msgstr "Åpne {PRODUCT_NAME}" + #. Button label that opens the desktop app. productName is the app name. #. Button that hands SSO sign-in back to the mobile app. productName is the app name. #: src/features/auth/components/pages/SsoCallbackPage.tsx:47 @@ -25011,12 +25041,15 @@ msgstr "Åpne bannermenyen" msgid "Open bookmarks" msgstr "Åpne lagrede meldinger" -#. Button label that opens the browser sign-in handoff page. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:56 #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:184 msgid "Open browser" msgstr "Åpne nettleser" +#. Button in the desktop app that reopens the browser sign-in page while the app waits for the browser. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:53 +msgid "Open browser again" +msgstr "Åpne nettleseren igjen" + #. Primary button in the screen-share picker on web. Hands off to the browser's native getDisplayMedia picker. #: src/features/voice/components/modals/ScreenSharePickerModal.tsx:209 msgid "Open browser picker" @@ -25392,10 +25425,6 @@ msgstr "Åpne innstillinger for tale og video" msgid "Open with {accountName} on {instanceName}" msgstr "Åpne med {accountName} på {instanceName}" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:414 -msgid "Open your browser to finish signing in." -msgstr "Åpne nettleseren din for å fullføre innloggingen." - #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:137 msgid "Open your browser, sign in, then enter the code below to link your account." msgstr "Åpne nettleseren din, logg på, og skriv inn koden nedenfor for å koble til kontoen din." @@ -25421,7 +25450,7 @@ msgstr "Åpner siden Medlemmer. Trykk mellomrom eller Enter for å åpne." #. Short label in the language tab. Keep it concise. #. Spellcheck engine option in the textarea spellcheck submenu. Uses the host operating system spellchecker. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:79 #: src/features/user/components/modals/tabs/LanguageTab.tsx:110 msgid "Operating system" @@ -26439,7 +26468,7 @@ msgstr "Abonnement" msgid "Plans, perks, gifts and your subscription all live on one page." msgstr "Planer, fordeler, gaver og abonnementet ditt finner du alt på én side." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:172 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:89 msgid "Platform" msgstr "Plattform" @@ -31859,11 +31888,6 @@ msgstr "Vis chat" msgid "Show chat with {count, plural, one {# unread message} other {# unread messages}}" msgstr "Vis chat med {count, plural, one {# ulest melding} other {# uleste meldinger}}" -#. Button label that opens the manual browser handoff code fallback. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:60 -msgid "Show code" -msgstr "Vis kode" - #. Developer voice status menu option for displaying the voice connection identifier. #: src/features/voice/components/voice_connection_status/VoiceConnectionStatusInner.tsx:76 msgid "Show connection ID" @@ -32306,7 +32330,9 @@ msgstr "Viser banneret i sin egen seksjon under fellesskapets topptekst." msgid "Sidebar" msgstr "Sidefelt" +#. Button in the browser that approves signing in to the desktop or mobile app that asked for it. #. Generic authentication action label. Use for buttons, links, page titles, and accessible labels. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:33 #: src/features/i18n/utils/CommonMessageDescriptors.ts:79 msgid "Sign in" msgstr "Logg på" @@ -32321,10 +32347,35 @@ msgstr "Logg på igjen" msgid "Sign in again as {accountLabel}" msgstr "Logg inn igjen som {accountLabel}" +#. Shown in the desktop app while it waits for the browser. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:193 +msgid "Sign in to {instanceName} in your browser and confirm. This app finishes signing in on its own." +msgstr "Logg inn på {instanceName} i nettleseren din og bekreft. Denne appen fullfører innloggingen av seg selv." + +#. Shown in the desktop app above the code when the browser cannot return the sign-in automatically. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:189 +msgid "Sign in to {instanceName} in your browser, and check that it shows this code:" +msgstr "Logg inn på {instanceName} i nettleseren din, og sjekk at den viser denne koden:" + #: src/features/auth/flow/GiftHeader.tsx:33 msgid "Sign in to claim your gift" msgstr "Logg på for å hente gaven din" +#. Title of the browser page where the user approves signing in to an app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:71 +msgid "Sign in to the {PRODUCT_NAME} app" +msgstr "Logg inn på {PRODUCT_NAME}-appen" + +#. Title of the browser page where the user approves signing in to the desktop app that opened it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:58 +msgid "Sign in to the {PRODUCT_NAME} desktop app" +msgstr "Logg inn på {PRODUCT_NAME} skrivebordsapp" + +#. Title of the browser page where the user approves signing in to the mobile app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:65 +msgid "Sign in to the {PRODUCT_NAME} mobile app" +msgstr "Logg inn på {PRODUCT_NAME}-mobilappen" + #. Action label that starts passkey authentication. #: src/features/auth/AuthMessageDescriptors.ts:13 msgid "Sign in with a passkey" @@ -32403,14 +32454,10 @@ msgstr "Logg ut andre enheter fra kontoen din" msgid "Sign out?" msgstr "Logge ut?" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:234 -msgid "Sign-in approved" -msgstr "Pålogging godkjent" - -#. Short label in the authentication handoff approval flow. Keep the tone plain and specific. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:26 -msgid "Sign-in code" -msgstr "Påloggingskode" +#. Title of the browser page after the user cancelled the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:322 +msgid "Sign-in cancelled" +msgstr "Innlogging avbrutt" #. Section title for email address and password controls in the account security tab. Keep it concise. #: src/features/user/components/modals/tabs/account_security_tab/AccountSecuritySections.tsx:23 @@ -32433,10 +32480,6 @@ msgstr "Påloggingsflyt" msgid "Sign-in method" msgstr "Innloggingsmetode" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:84 -msgid "Sign-in request" -msgstr "Påloggingsforespørsel" - #. Aria label on the signal-strength icon shown while the first latency sample is still pending. #: src/features/voice/components/SignalStrengthIcon.tsx:16 msgid "Signal strength loading" @@ -32453,6 +32496,21 @@ msgstr "Logget på" msgid "Signed-in devices" msgstr "Påloggede enheter" +#. Shown on the browser approval page above the buttons. name is the display name of the account that will be signed in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:137 +msgid "Signing in as {name}" +msgstr "Logger inn som {name}" + +#. Text button in the desktop app that shows a code to type into a browser on a different device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:207 +msgid "Signing in on another device?" +msgstr "Logger du inn på en annen enhet?" + +#. Title while the browser approves the sign-in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:228 +msgid "Signing in…" +msgstr "Logger inn…" + #. Label for Bluesky OAuth signing key ID input. #: src/features/app/components/setup/SetupWizardSteps.tsx:1161 msgid "Signing key ID" @@ -33504,6 +33562,8 @@ msgstr "Start mikrofontest" msgid "Start minimized" msgstr "Start minimert" +#. Button on the browser page after cancelling that goes back to choosing an account. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:337 #: src/features/moderation/components/report/ReportStepDetails.tsx:326 #: src/features/moderation/components/report/ReportStepEmail.tsx:97 #: src/features/moderation/components/report/ReportStepVerification.tsx:134 @@ -34910,6 +34970,11 @@ msgstr "Thai" msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Takk for at du hjelper oss med å holde {productName} trygt. Vi vil gjennomgå rapporten din så snart som mulig." +#. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 +msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." +msgstr "Den koden er ikke gyldig på {instanceHost}. Sjekk koden i {productName}-appen og prøv igjen." + #. Body of the passkey page after the passkey prompt failed or was dismissed. Keep plain. #: src/features/auth/passkey_migration/PasskeyBridgePage.tsx:36 msgid "That didn't work. Try again or cancel." @@ -34953,11 +35018,6 @@ msgstr "Meldingen ble ikke slettet" msgid "That message is gone, or you lost access to the conversation." msgstr "Den meldingen er borte, eller du mistet tilgangen til samtalen." -#. Error shown when a browser sign-in handoff code expires before it is approved. -#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 -msgid "That sign-in code expired. Try again." -msgstr "Den påloggingskoden utløp. Prøv igjen." - #. End-of-list line in the saved messages popout after every bookmark has been shown. #. End-of-list line on the saved messages page after every bookmark has been shown. #: src/features/messaging/components/pages/SavedMessagesPage.tsx:35 @@ -34965,6 +35025,21 @@ msgstr "Den påloggingskoden utløp. Prøv igjen." msgid "That's all of them." msgstr "Det var alle." +#. Warning on the browser approval page when the app asked for a different account than the one chosen. requestedIdentifier is the email or username the app asked for, name is the chosen account's display name. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:131 +msgid "The {PRODUCT_NAME} app asked to sign in as {requestedIdentifier}, but you chose {name}." +msgstr "Appen {PRODUCT_NAME} ba om å logge inn som {requestedIdentifier}, men du valgte {name}." + +#. Explains where the code comes from, under the title of the browser page where it is typed. Signing in on another device is the label of a button in the app and must match its translation. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:187 +msgid "The {PRODUCT_NAME} app on your other device shows it under Signing in on another device. Only enter a code from a device you control." +msgstr "Appen {PRODUCT_NAME} på den andre enheten din viser det under «Logger inn på en annen enhet». Skriv kun inn en kode fra en enhet du kontrollerer." + +#. Shown after the user cancelled the sign-in request in the browser. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:327 +msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." +msgstr "Appen {PRODUCT_NAME} ble ikke logget inn. Du kan lukke denne fanen." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -34983,10 +35058,6 @@ msgstr "Appen krasjet" msgid "The app has crashed. Checking for updates that might fix this issue…" msgstr "Appen har krasjet. Ser etter oppdateringer som kan løse problemet …" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:237 -msgid "The app should now be signed in to your account." -msgstr "Du skal nå være logget på kontoen din i appen." - #. Activity log detail line under a lifted ban, for a temporary ban that had already ended on its own before it was lifted. A ban is the community ban, not the feature that blocks a user. {date} is when the ban ended, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:55 msgid "The ban had already expired on {date}" @@ -35184,6 +35255,16 @@ msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "Kilden for skjermdelingen sluttet å sende video, så skjermdelingen ble stoppet." +#. Error shown in the desktop app when a browser sign-in request expires before it is approved in the browser. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 +msgid "The sign-in request expired before your browser approved it." +msgstr "Forespørselen om innlogging utløp før nettleseren din godkjente den." + +#. Error shown in the desktop app when the user pressed Cancel on the browser sign-in page. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:14 +msgid "The sign-in was cancelled in your browser." +msgstr "Påloggingen ble avbrutt i nettleseren din." + #. Activity log detail line under a deleted sticker, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the sticker, shown as a clickable user chip. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts:100 msgid "The sticker was uploaded by {user}" @@ -35408,6 +35489,11 @@ msgstr "Tredjepart" msgid "This account can't be blocked." msgstr "Denne kontoen kan ikke blokkeres." +#. Error in the browser when the chosen account belongs to a different server than the app that asked to sign in. accountHost and requestHost are server addresses. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:38 +msgid "This account is on {accountHost}, but the {productName} app is signing in to {requestHost}. Choose an account on {requestHost}." +msgstr "Denne kontoen er på {accountHost}, men {productName}-appen logger inn på {requestHost}. Velg en konto på {requestHost}." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:418 msgid "This action cannot be undone. All associated data, including the bot user, will be permanently deleted." msgstr "Denne handlingen kan ikke angres. Alle tilknyttede data, inkludert bot-brukeren, blir slettet permanent." @@ -35551,11 +35637,6 @@ msgstr "Dette sletter hele Premium-statusen din på serveren, inkludert Premium- msgid "This code doesn't exist." msgstr "Denne koden finnes ikke." -#. Status shown under the browser sign-in code once its countdown reaches zero. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:68 -msgid "This code expired." -msgstr "Denne koden utløp." - #. Gift redemption error modal body for an invalid or already used code. #: src/features/gift/commands/GiftCommands.tsx:37 msgid "This code is invalid or already used." @@ -36075,6 +36156,11 @@ msgstr "Denne tilbakestillingslenken har utløpt. Tilbakestillingslenker varer i msgid "This shows how links appear: {linkPreviewExampleUrl}" msgstr "Slik vises lenker: {linkPreviewExampleUrl}" +#. Error in the browser when the sign-in request from the desktop app no longer exists, because it expired or the app cancelled it. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:20 +msgid "This sign-in request expired or was cancelled in the {productName} app. Start again from the app." +msgstr "Denne påloggingsforespørselen utløp eller ble kansellert i {productName}-appen. Start på nytt fra appen." + #. Label above the community a sticker comes from in the sticker info card. #: src/features/expressions/components/ExpressionInfoCard.tsx:75 msgid "This sticker is from" @@ -38520,6 +38606,11 @@ msgstr "Bruk {url} der bilde-URL-en skal settes inn." msgid "Use a dedicated modal to set a message history threshold date for members who don't have the {readMessageHistoryPermissionLabel} permission." msgstr "Bruk et eget dialogvindu for å angi en grensedato for meldingshistorikken til medlemmer som ikke har tillatelsen «{readMessageHistoryPermissionLabel}»." +#. Text button on the browser approval page that goes back to choosing which account signs in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:149 +msgid "Use a different account" +msgstr "Bruk en annen konto" + #: src/features/auth/flow/instance_selector/InstancePickerRows.tsx:267 msgid "Use a self-hosted instance URL" msgstr "Bruk en selv-hostet instans-URL" @@ -39296,10 +39387,6 @@ msgstr "Bekreft e-postadressen din for å kjøpe {premiumProductFullName}." msgid "Verify your email to start DMs." msgstr "Bekreft e-postadressen din for å starte direktemeldingssamtaler." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:142 -msgid "Verifying code…" -msgstr "Bekrefter koden …" - #: src/features/auth/components/pages/ResetPasswordPage.tsx:145 msgid "Verifying your reset link…" msgstr "Kontrollerer tilbakestillingslenken …" @@ -40073,10 +40160,6 @@ msgstr "Vent litt før du sletter flere meldinger." msgid "Wait between messages. Members with \"{bypassSlowmodePermissionLabel}\" can bypass this." msgstr "Ventetid mellom meldinger. Medlemmer med «{bypassSlowmodePermissionLabel}» kan omgå dette." -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:445 -msgid "Waiting for browser approval." -msgstr "Venter på godkjenning fra nettleseren." - #. Tooltip explaining that video / screen share controls are gated while the voice connection is not yet ready. #: src/features/voice/components/voice_connection_status/LocalParticipantControls.tsx:45 msgid "Waiting for connection..." @@ -40118,10 +40201,6 @@ msgstr "Vekk fra hvilemodus" msgid "Warning" msgstr "Advarsel" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:158 -msgid "Was this you?" -msgstr "Var dette deg?" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:243 msgctxt "us-state" @@ -40959,10 +41038,6 @@ msgstr "Du har allerede livstidstilgang til {premiumProductName}" msgid "You already have this connection." msgstr "Du har allerede denne tilkoblingen." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:87 -msgid "You are about to authorize an app to sign in to your account. Only continue if you initiated this request from a device you control." -msgstr "Du er i ferd med å gi en app tillatelse til å logge på kontoen din. Fortsett bare hvis du startet denne forespørselen fra en enhet du kontrollerer." - #. External link warning title. productName is the Fluxer product name. #: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:22 msgid "You are about to leave {productName}" @@ -41732,6 +41807,11 @@ msgstr "Du har en eldre pris. Gjeldende pris for denne planen er {currentSubscri msgid "You're sending messages too quickly" msgstr "Du sender meldinger for raskt" +#. Title of the browser page after the user approved signing in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:282 +msgid "You're signed in" +msgstr "Du er logget inn" + #. Status text on the screen-share hover popout shown to the local streamer. Lightly playful tone. #: src/features/voice/components/StreamWatchHoverPopout.tsx:43 msgid "You're streaming!" diff --git a/fluxer_app/src/features/i18n/locales/pl/messages.po b/fluxer_app/src/features/i18n/locales/pl/messages.po index 265b93c37..35af3085c 100644 --- a/fluxer_app/src/features/i18n/locales/pl/messages.po +++ b/fluxer_app/src/features/i18n/locales/pl/messages.po @@ -1573,7 +1573,7 @@ msgid "{imageCount, plural, one {# image} other {# images}}, {videoCount, plural msgstr "{imageCount, plural, one {# obraz} few {# obrazy} many {# obrazów} other {# obrazu}}, {videoCount, plural, one {# film} few {# filmy} many {# filmów} other {# filmu}}" #. Explanation shown when the selected instance advertises no web app endpoint. Instance name is interpolated. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:76 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:61 msgid "{instanceName} does not publish a web address, so sign-in cannot be handed to a browser." msgstr "{instanceName} nie publikuje adresu internetowego, więc nie można przekazać logowania do przeglądarki." @@ -2777,14 +2777,6 @@ msgstr "rozbudowana osadzona treść lub podgląd linku (nie przesłany plik)" msgid "A separate profile for each community" msgstr "Osobny profil dla każdej społeczności" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:164 -msgid "A sign-in request was made for your account. Only approve if you initiated it." -msgstr "Wykryto próbę logowania na Twoje konto. Zatwierdź ją tylko wtedy, gdy pochodzi od Ciebie." - -#: src/features/auth/flow/HandoffApprovalFlow.tsx:162 -msgid "A sign-in request was made from the following device. Only approve if you recognize it." -msgstr "Wysłano prośbę o zalogowanie z następującego urządzenia. Zatwierdź tylko, jeśli je rozpoznajesz." - #. Description for has:sticker. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:51 msgid "a sticker" @@ -4811,10 +4803,6 @@ msgstr "Zastosuj do wszystkich społeczności" msgid "Approval required" msgstr "Wymagana akceptacja" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:206 -msgid "Approve" -msgstr "Zatwierdź" - #. Hint under the sign-in option on fluxer.com that pairs a newly installed app with the old installed app. productName is the app name. #: src/features/auth/flow/AuthLoginLayout.tsx:101 msgid "Approve this app from the {productName} app you already use. No password needed." @@ -7873,6 +7861,11 @@ msgstr "Sprawdzanie dostępu..." msgid "Checking screen recording permission..." msgstr "Sprawdzanie uprawnień do nagrywania ekranu…" +#. Title while the browser looks up the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:224 +msgid "Checking the sign-in request…" +msgstr "Sprawdzanie prośby o zalogowanie…" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -8847,6 +8840,11 @@ msgstr "Bloki kodu" msgid "Code expired" msgstr "Kod wygasł" +#. Label of the field in the browser where the user types the 12-character code shown in the desktop or mobile app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:28 +msgid "Code from the {productName} app" +msgstr "Kod z aplikacji {productName}" + #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 @@ -9348,7 +9346,6 @@ msgstr "Całkowicie ukryj swoją odznakę {premiumProductName} przed innymi uży #: src/features/auth/components/pages/SsoCallbackPage.tsx:256 #: src/features/auth/components/pages/SsoCallbackPage.tsx:322 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:216 msgid "Completing sign-in…" msgstr "Kończenie logowania…" @@ -9782,7 +9779,6 @@ msgstr "Menu kontekstowe można otworzyć lewym przyciskiem myszy (na przyciskac #: src/features/auth/components/modals/DeviceRevokeModal.tsx:77 #: src/features/auth/components/modals/PasskeyPinModal.tsx:111 #: src/features/auth/components/pages/oauth_authorize_page/OAuthAccountStep.tsx:36 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/connection/components/modals/AddConnectionModal.tsx:384 #: src/features/i18n/utils/CommonMessageDescriptors.ts:726 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:413 @@ -9790,6 +9786,11 @@ msgstr "Menu kontekstowe można otworzyć lewym przyciskiem myszy (na przyciskac msgid "Continue" msgstr "Dalej" +#. Title in the desktop app while it waits for the user to sign in on the browser page it opened. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:177 +msgid "Continue in your browser" +msgstr "Kontynuuj w przeglądarce" + #. Button in the gift time confirmation that proceeds to subscription checkout. #: src/features/app/components/dialogs/components/plutonium/hooks/useCheckoutActions.tsx:145 msgid "Continue to checkout" @@ -10437,7 +10438,7 @@ msgid "Couldn't close DM" msgstr "Nie udało się zamknąć rozmowy prywatnej" #. Desktop handoff flow error shown when finalizing the sign-in fails after a valid code. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:21 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:34 msgid "Couldn't complete sign-in. Try again." msgstr "Nie udało się dokończyć logowania. Spróbuj ponownie." @@ -10831,6 +10832,11 @@ msgstr "Nie udało się rozpocząć autoryzacji {blueskyProviderName}" msgid "Couldn't start checkout" msgstr "Nie udało się rozpocząć płatności" +#. Shown in the desktop app when the browser sign-in request could not be created. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:66 +msgid "Couldn't start signing in with your browser." +msgstr "Nie udało się rozpocząć logowania przez przeglądarkę." + #. Toast error shown when creating a new account connection fails. #: src/features/connection/commands/ConnectionCommands.ts:27 msgid "Couldn't start the connection" @@ -10942,7 +10948,7 @@ msgid "Couldn't upload banner" msgstr "Nie udało się przesłać banera" #. Desktop handoff flow error shown when verifying the pairing code fails for an unexpected reason. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:17 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:30 msgid "Couldn't verify that code. Try again." msgstr "Nie udało się zweryfikować kodu. Spróbuj ponownie." @@ -12503,7 +12509,6 @@ msgstr "Zwarty układ" #. Short label in the settings dialog permission components. Keep the tone plain and specific. #: src/features/app/components/dialogs/shared/PermissionComponents.tsx:16 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:203 msgid "Deny" msgstr "Odmów" @@ -14910,15 +14915,16 @@ msgstr "Wpisz {digitCount}-cyfrowy kod z aplikacji uwierzytelniającej lub jeden msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Wprowadź {digitCount}-cyfrowy kod z aplikacji uwierzytelniającej." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:108 -msgid "Enter the code" -msgstr "Wpisz kod" - #. Inline validation error on the verification step of the DSA report flow when the code field is empty. #: src/features/moderation/components/pages/ReportPage.tsx:74 msgid "Enter the code before continuing." msgstr "Wpisz kod, aby kontynuować." +#. Title of the browser page where the user types the 12-character code the app shows under Signing in on another device. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +msgid "Enter the code from the {PRODUCT_NAME} app" +msgstr "Wpisz kod z aplikacji {PRODUCT_NAME}" + #. Body text in the authentication sudo verification modal. Keep the tone plain and specific. #: src/features/auth/components/modals/SudoVerificationModal.tsx:56 msgid "Enter the code from your authenticator app." @@ -14933,10 +14939,6 @@ msgstr "Wpisz kod wysłany na Twój obecny adres e-mail." msgid "Enter the code sent to your email address." msgstr "Wpisz kod wysłany na Twój adres e-mail." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:111 -msgid "Enter the code shown in the app to continue." -msgstr "Wpisz kod wyświetlony w aplikacji, aby kontynuować." - #: src/features/user/components/modals/BouncedEmailChangeModal.tsx:157 #: src/features/user/components/modals/EmailChangeModal.tsx:244 msgid "Enter the code we emailed to your new address." @@ -14959,6 +14961,11 @@ msgstr "Wpisz nowy adres e-mail, którego chcesz użyć. Wyślemy na niego kod." msgid "Enter the PIN for your security key to continue." msgstr "Wprowadź kod PIN swojego klucza bezpieczeństwa, aby kontynuować." +#. Title in the desktop app above the code the user types into a browser on another device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:228 +msgid "Enter this code in your browser" +msgstr "Wpisz ten kod w przeglądarce" + #: src/features/auth/flow/HandoffCodeDisplay.tsx:132 msgid "Enter this code in your browser to complete sign-in." msgstr "Wpisz ten kod w przeglądarce, aby dokończyć logowanie." @@ -15362,7 +15369,7 @@ msgstr "Wygasa między {earliest} a {latest}" msgid "Expires in {remaining}s" msgstr "Wygasa za {remaining} s" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:374 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:250 msgid "Expires in {remainingSeconds}s" msgstr "Wygasa za {remainingSeconds} s" @@ -16165,7 +16172,7 @@ msgid "Fluxer" msgstr "Fluxer" #. Status shown when browser sign-in status polling gives up after repeated failures. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:72 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:57 msgid "Fluxer stopped checking whether the browser approved this sign-in. It didn't lose your code." msgstr "Fluxer przestał sprawdzać, czy przeglądarka zatwierdziła to logowanie. Nie stracił Twojego kodu." @@ -16952,8 +16959,6 @@ msgstr "Wygeneruj link do udostępnienia lub skopiuj swój połączony niestanda msgid "Generate invite link" msgstr "Wygeneruj link z zaproszeniem" -#. Button label that replaces an expired browser sign-in code with a fresh one. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:64 #: src/features/auth/flow/HandoffCodeDisplay.tsx:117 msgid "Generate new code" msgstr "Wygeneruj nowy kod" @@ -17348,6 +17353,16 @@ msgstr "Wróć i wprowadź prawidłowy adres e-mail." msgid "Go back to {productName} to continue." msgstr "Wróć do {productName}, aby kontynuować." +#. Shown after approving a sign-in for an app on another device, which signs in by itself shortly. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:292 +msgid "Go back to the {PRODUCT_NAME} app. It finishes signing in on its own." +msgstr "Wróć do aplikacji {PRODUCT_NAME}. Zaloguje się samodzielnie." + +#. Shown after approving, when the browser has already handed the sign-in back to the desktop app. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:288 +msgid "Go back to the {PRODUCT_NAME} app. You can close this tab." +msgstr "Wróć do aplikacji {PRODUCT_NAME}. Możesz zamknąć tę kartę." + #. Accessible label for the community row of an expression info card, which opens a community the viewer is already a member of. {communityName} is the community name. #: src/features/expressions/components/ExpressionInfoCard.tsx:89 msgid "Go to {communityName}" @@ -19295,11 +19310,6 @@ msgstr "Nieprawidłowy JSON. Wklej pełną odpowiedź z powyższego adresu URL." msgid "Invalid or expired code" msgstr "Nieprawidłowy lub wygasły kod" -#. Desktop handoff flow error shown when the entered pairing code is invalid or expired. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:13 -msgid "Invalid or expired code. Try again." -msgstr "Nieprawidłowy lub wygasły kod. Spróbuj ponownie." - #. Short label in the authentication authorize flow. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/state/useAuthorizeFlow.ts:82 msgid "Invalid redirect_uri" @@ -20876,7 +20886,7 @@ msgstr "Format czasu (ustawienia regionalne)" msgid "Localization" msgstr "Lokalizacja" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:192 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:109 #: src/features/user/components/modals/tabs/DevicesTab.tsx:152 msgid "Location" msgstr "Lokalizacja" @@ -21034,6 +21044,11 @@ msgstr "Ustawić {userName} jako właściciela grupy? Stracisz uprawnienia wła msgid "Make group owner" msgstr "Ustaw jako właściciela grupy" +#. Shown above the code on the browser approval page when the app cannot be signed in automatically. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:253 +msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." +msgstr "Upewnij się, że ten kod pasuje do kodu w aplikacji {PRODUCT_NAME}." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" @@ -24668,6 +24683,11 @@ msgstr "Od <0>{listPriceEffectiveDate} cena Twojej subskrypcji zmieni się z msgid "On click" msgstr "Po kliknięciu" +#. One line explanation in the desktop app above the code. signInAddress is the web address of the sign-in page, such as web.fluxer.app/login?handoff=1. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:236 +msgid "On your other device, sign in at {signInAddress} and enter this code when asked." +msgstr "Na drugim urządzeniu zaloguj się na {signInAddress} i wpisz ten kod, gdy zostaniesz o to poproszony." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:715 msgid "Once deleted, the application and its credentials are permanently removed." msgstr "Po usunięciu aplikacja i jej dane uwierzytelniające zostaną trwale usunięte." @@ -24733,6 +24753,11 @@ msgstr "Tylko wzmianki @" msgid "Only applies on wide screens." msgstr "Dotyczy tylko szerokich ekranów." +#. Warning under the title of the browser approval page, so people do not approve a sign-in someone else started. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:245 +msgid "Only continue if you started this sign-in on a device you control." +msgstr "Kontynuuj tylko wtedy, gdy rozpocząłeś to logowanie na urządzeniu, nad którym masz kontrolę." + #. Body copy in the mature content check modal. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:32 msgid "Only credit cards are accepted. Debit and prepaid cards cannot be used for the mature content check." @@ -24921,6 +24946,11 @@ msgstr "Otwórz {landmarkName}" msgid "Open {premiumProductFullName}" msgstr "Otwórz {premiumProductFullName}" +#. Button on the browser page after approving that opens the desktop app again if it did not come to the front. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:304 +msgid "Open {PRODUCT_NAME}" +msgstr "Otwórz {PRODUCT_NAME}" + #. Button label that opens the desktop app. productName is the app name. #. Button that hands SSO sign-in back to the mobile app. productName is the app name. #: src/features/auth/components/pages/SsoCallbackPage.tsx:47 @@ -25011,12 +25041,15 @@ msgstr "Otwórz opcje banera" msgid "Open bookmarks" msgstr "Otwórz zakładki" -#. Button label that opens the browser sign-in handoff page. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:56 #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:184 msgid "Open browser" msgstr "Otwórz przeglądarkę" +#. Button in the desktop app that reopens the browser sign-in page while the app waits for the browser. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:53 +msgid "Open browser again" +msgstr "Otwórz przeglądarkę ponownie" + #. Primary button in the screen-share picker on web. Hands off to the browser's native getDisplayMedia picker. #: src/features/voice/components/modals/ScreenSharePickerModal.tsx:209 msgid "Open browser picker" @@ -25392,10 +25425,6 @@ msgstr "Otwórz ustawienia głosu i wideo" msgid "Open with {accountName} on {instanceName}" msgstr "Otwórz z {accountName} na {instanceName}" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:414 -msgid "Open your browser to finish signing in." -msgstr "Otwórz przeglądarkę, aby dokończyć logowanie." - #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:137 msgid "Open your browser, sign in, then enter the code below to link your account." msgstr "Otwórz przeglądarkę, zaloguj się, a następnie wprowadź poniższy kod, aby połączyć swoje konto." @@ -25421,7 +25450,7 @@ msgstr "Otwiera stronę Członkowie. Naciśnij Spację lub Enter, aby otworzyć. #. Short label in the language tab. Keep it concise. #. Spellcheck engine option in the textarea spellcheck submenu. Uses the host operating system spellchecker. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:79 #: src/features/user/components/modals/tabs/LanguageTab.tsx:110 msgid "Operating system" @@ -26439,7 +26468,7 @@ msgstr "Plan" msgid "Plans, perks, gifts and your subscription all live on one page." msgstr "Plany, korzyści, prezenty i Twoja subskrypcja – wszystko znajduje się na jednej stronie." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:172 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:89 msgid "Platform" msgstr "Platforma" @@ -31859,11 +31888,6 @@ msgstr "Pokaż czat" msgid "Show chat with {count, plural, one {# unread message} other {# unread messages}}" msgstr "Pokaż czat ({count, plural, one {# nieprzeczytana wiadomość} few {# nieprzeczytane wiadomości} many {# nieprzeczytanych wiadomości} other {# nieprzeczytanych wiadomości}})" -#. Button label that opens the manual browser handoff code fallback. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:60 -msgid "Show code" -msgstr "Pokaż kod" - #. Developer voice status menu option for displaying the voice connection identifier. #: src/features/voice/components/voice_connection_status/VoiceConnectionStatusInner.tsx:76 msgid "Show connection ID" @@ -32306,7 +32330,9 @@ msgstr "Wyświetla baner w osobnej sekcji pod nagłówkiem społeczności." msgid "Sidebar" msgstr "Pasek boczny" +#. Button in the browser that approves signing in to the desktop or mobile app that asked for it. #. Generic authentication action label. Use for buttons, links, page titles, and accessible labels. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:33 #: src/features/i18n/utils/CommonMessageDescriptors.ts:79 msgid "Sign in" msgstr "Zaloguj się" @@ -32321,10 +32347,35 @@ msgstr "Zaloguj się ponownie" msgid "Sign in again as {accountLabel}" msgstr "Zaloguj się ponownie jako {accountLabel}" +#. Shown in the desktop app while it waits for the browser. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:193 +msgid "Sign in to {instanceName} in your browser and confirm. This app finishes signing in on its own." +msgstr "Zaloguj się do {instanceName} w przeglądarce i potwierdź. Ta aplikacja sama zakończy logowanie." + +#. Shown in the desktop app above the code when the browser cannot return the sign-in automatically. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:189 +msgid "Sign in to {instanceName} in your browser, and check that it shows this code:" +msgstr "Zaloguj się do {instanceName} w przeglądarce i sprawdź, czy wyświetla ten kod:" + #: src/features/auth/flow/GiftHeader.tsx:33 msgid "Sign in to claim your gift" msgstr "Zaloguj się, aby odebrać prezent" +#. Title of the browser page where the user approves signing in to an app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:71 +msgid "Sign in to the {PRODUCT_NAME} app" +msgstr "Zaloguj się do aplikacji {PRODUCT_NAME}" + +#. Title of the browser page where the user approves signing in to the desktop app that opened it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:58 +msgid "Sign in to the {PRODUCT_NAME} desktop app" +msgstr "Zaloguj się do aplikacji komputerowej {PRODUCT_NAME}" + +#. Title of the browser page where the user approves signing in to the mobile app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:65 +msgid "Sign in to the {PRODUCT_NAME} mobile app" +msgstr "Zaloguj się do aplikacji mobilnej {PRODUCT_NAME}" + #. Action label that starts passkey authentication. #: src/features/auth/AuthMessageDescriptors.ts:13 msgid "Sign in with a passkey" @@ -32403,14 +32454,10 @@ msgstr "Wyloguj inne urządzenia ze swojego konta" msgid "Sign out?" msgstr "Wylogować się?" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:234 -msgid "Sign-in approved" -msgstr "Logowanie zatwierdzone" - -#. Short label in the authentication handoff approval flow. Keep the tone plain and specific. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:26 -msgid "Sign-in code" -msgstr "Kod logowania" +#. Title of the browser page after the user cancelled the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:322 +msgid "Sign-in cancelled" +msgstr "Anulowano logowanie" #. Section title for email address and password controls in the account security tab. Keep it concise. #: src/features/user/components/modals/tabs/account_security_tab/AccountSecuritySections.tsx:23 @@ -32433,10 +32480,6 @@ msgstr "Proces logowania" msgid "Sign-in method" msgstr "Metoda logowania" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:84 -msgid "Sign-in request" -msgstr "Prośba o zalogowanie" - #. Aria label on the signal-strength icon shown while the first latency sample is still pending. #: src/features/voice/components/SignalStrengthIcon.tsx:16 msgid "Signal strength loading" @@ -32453,6 +32496,21 @@ msgstr "Zalogowano" msgid "Signed-in devices" msgstr "Zalogowane urządzenia" +#. Shown on the browser approval page above the buttons. name is the display name of the account that will be signed in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:137 +msgid "Signing in as {name}" +msgstr "Logowanie jako {name}" + +#. Text button in the desktop app that shows a code to type into a browser on a different device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:207 +msgid "Signing in on another device?" +msgstr "Logowanie na innym urządzeniu?" + +#. Title while the browser approves the sign-in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:228 +msgid "Signing in…" +msgstr "Logowanie…" + #. Label for Bluesky OAuth signing key ID input. #: src/features/app/components/setup/SetupWizardSteps.tsx:1161 msgid "Signing key ID" @@ -33504,6 +33562,8 @@ msgstr "Rozpocznij test mikrofonu" msgid "Start minimized" msgstr "Zminimalizuj przy starcie" +#. Button on the browser page after cancelling that goes back to choosing an account. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:337 #: src/features/moderation/components/report/ReportStepDetails.tsx:326 #: src/features/moderation/components/report/ReportStepEmail.tsx:97 #: src/features/moderation/components/report/ReportStepVerification.tsx:134 @@ -34910,6 +34970,11 @@ msgstr "Tajski" msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Dziękujemy za pomoc w dbaniu o bezpieczeństwo w {productName}. Rozpatrzymy Twoje zgłoszenie tak szybko, jak to możliwe." +#. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 +msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." +msgstr "Ten kod nie jest prawidłowy w witrynie {instanceHost}. Sprawdź kod w aplikacji {productName} i spróbuj ponownie." + #. Body of the passkey page after the passkey prompt failed or was dismissed. Keep plain. #: src/features/auth/passkey_migration/PasskeyBridgePage.tsx:36 msgid "That didn't work. Try again or cancel." @@ -34953,11 +35018,6 @@ msgstr "Nie udało się usunąć wiadomości" msgid "That message is gone, or you lost access to the conversation." msgstr "Ta wiadomość nie jest już dostępna lub nie masz już dostępu do rozmowy." -#. Error shown when a browser sign-in handoff code expires before it is approved. -#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 -msgid "That sign-in code expired. Try again." -msgstr "Ten kod logowania wygasł. Spróbuj ponownie." - #. End-of-list line in the saved messages popout after every bookmark has been shown. #. End-of-list line on the saved messages page after every bookmark has been shown. #: src/features/messaging/components/pages/SavedMessagesPage.tsx:35 @@ -34965,6 +35025,21 @@ msgstr "Ten kod logowania wygasł. Spróbuj ponownie." msgid "That's all of them." msgstr "To już wszystkie." +#. Warning on the browser approval page when the app asked for a different account than the one chosen. requestedIdentifier is the email or username the app asked for, name is the chosen account's display name. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:131 +msgid "The {PRODUCT_NAME} app asked to sign in as {requestedIdentifier}, but you chose {name}." +msgstr "Aplikacja {PRODUCT_NAME} poprosiła o zalogowanie się jako {requestedIdentifier}, ale wybrałeś {name}." + +#. Explains where the code comes from, under the title of the browser page where it is typed. Signing in on another device is the label of a button in the app and must match its translation. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:187 +msgid "The {PRODUCT_NAME} app on your other device shows it under Signing in on another device. Only enter a code from a device you control." +msgstr "Aplikacja {PRODUCT_NAME} na Twoim drugim urządzeniu wyświetla ją w sekcji „Logowanie na innym urządzeniu”. Wpisuj kody tylko z urządzeń, które kontrolujesz." + +#. Shown after the user cancelled the sign-in request in the browser. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:327 +msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." +msgstr "Aplikacja {PRODUCT_NAME} nie została zalogowana. Możesz zamknąć tę kartę." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -34983,10 +35058,6 @@ msgstr "Aplikacja uległa awarii" msgid "The app has crashed. Checking for updates that might fix this issue…" msgstr "Sprawdzanie dostępności aktualizacji, które mogą rozwiązać ten problem…" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:237 -msgid "The app should now be signed in to your account." -msgstr "Aplikacja powinna być teraz zalogowana na Twoje konto." - #. Activity log detail line under a lifted ban, for a temporary ban that had already ended on its own before it was lifted. A ban is the community ban, not the feature that blocks a user. {date} is when the ban ended, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:55 msgid "The ban had already expired on {date}" @@ -35184,6 +35255,16 @@ msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "Źródło udostępniania ekranu przestało wysyłać wideo, więc udostępnianie ekranu zostało zatrzymane." +#. Error shown in the desktop app when a browser sign-in request expires before it is approved in the browser. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 +msgid "The sign-in request expired before your browser approved it." +msgstr "Żądanie logowania wygasło, zanim przeglądarka je zatwierdziła." + +#. Error shown in the desktop app when the user pressed Cancel on the browser sign-in page. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:14 +msgid "The sign-in was cancelled in your browser." +msgstr "Podpisanie zostało anulowane w przeglądarce." + #. Activity log detail line under a deleted sticker, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the sticker, shown as a clickable user chip. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts:100 msgid "The sticker was uploaded by {user}" @@ -35408,6 +35489,11 @@ msgstr "Inne firmy" msgid "This account can't be blocked." msgstr "Tego konta nie można zablokować." +#. Error in the browser when the chosen account belongs to a different server than the app that asked to sign in. accountHost and requestHost are server addresses. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:38 +msgid "This account is on {accountHost}, but the {productName} app is signing in to {requestHost}. Choose an account on {requestHost}." +msgstr "To konto znajduje się na serwerze {accountHost}, ale aplikacja {productName} próbuje zalogować się na serwerze {requestHost}. Wybierz konto z serwera {requestHost}." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:418 msgid "This action cannot be undone. All associated data, including the bot user, will be permanently deleted." msgstr "Tej czynności nie można cofnąć. Wszystkie powiązane dane, w tym konto bota, zostaną trwale usunięte." @@ -35551,11 +35637,6 @@ msgstr "Spowoduje to całkowite wyczyszczenie Twojego stanu Premium po stronie s msgid "This code doesn't exist." msgstr "Ten kod nie istnieje." -#. Status shown under the browser sign-in code once its countdown reaches zero. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:68 -msgid "This code expired." -msgstr "Ten kod wygasł." - #. Gift redemption error modal body for an invalid or already used code. #: src/features/gift/commands/GiftCommands.tsx:37 msgid "This code is invalid or already used." @@ -36075,6 +36156,11 @@ msgstr "Ten link do resetowania wygasł. Linki do resetowania są ważne przez 1 msgid "This shows how links appear: {linkPreviewExampleUrl}" msgstr "Tak wyglądają linki: {linkPreviewExampleUrl}" +#. Error in the browser when the sign-in request from the desktop app no longer exists, because it expired or the app cancelled it. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:20 +msgid "This sign-in request expired or was cancelled in the {productName} app. Start again from the app." +msgstr "Ten monit o zalogowanie wygasł lub został anulowany w aplikacji {productName}. Spróbuj ponownie z poziomu aplikacji." + #. Label above the community a sticker comes from in the sticker info card. #: src/features/expressions/components/ExpressionInfoCard.tsx:75 msgid "This sticker is from" @@ -38520,6 +38606,11 @@ msgstr "Użyj {url} w miejscu, w którym ma zostać wstawiony adres URL obrazu." msgid "Use a dedicated modal to set a message history threshold date for members who don't have the {readMessageHistoryPermissionLabel} permission." msgstr "Użyj osobnego okna, aby ustawić datę graniczną historii wiadomości dla członków bez uprawnienia „{readMessageHistoryPermissionLabel}”." +#. Text button on the browser approval page that goes back to choosing which account signs in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:149 +msgid "Use a different account" +msgstr "Użyj innego konta" + #: src/features/auth/flow/instance_selector/InstancePickerRows.tsx:267 msgid "Use a self-hosted instance URL" msgstr "Użyj adresu URL instancji hostowanej samodzielnie" @@ -39296,10 +39387,6 @@ msgstr "Zweryfikuj swój adres e-mail, aby kupić {premiumProductFullName}." msgid "Verify your email to start DMs." msgstr "Zweryfikuj swój adres e-mail, aby rozpoczynać rozmowy prywatne." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:142 -msgid "Verifying code…" -msgstr "Weryfikowanie kodu…" - #: src/features/auth/components/pages/ResetPasswordPage.tsx:145 msgid "Verifying your reset link…" msgstr "Weryfikujemy link do resetowania…" @@ -40073,10 +40160,6 @@ msgstr "Poczekaj chwilę, zanim usuniesz więcej wiadomości." msgid "Wait between messages. Members with \"{bypassSlowmodePermissionLabel}\" can bypass this." msgstr "Odstęp między wiadomościami. Użytkownicy z uprawnieniem „{bypassSlowmodePermissionLabel}” mogą go obejść." -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:445 -msgid "Waiting for browser approval." -msgstr "Oczekiwanie na zatwierdzenie przez przeglądarkę." - #. Tooltip explaining that video / screen share controls are gated while the voice connection is not yet ready. #: src/features/voice/components/voice_connection_status/LocalParticipantControls.tsx:45 msgid "Waiting for connection..." @@ -40118,10 +40201,6 @@ msgstr "Wybudzenie" msgid "Warning" msgstr "Ostrzeżenie" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:158 -msgid "Was this you?" -msgstr "Czy to Ty?" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:243 msgctxt "us-state" @@ -40959,10 +41038,6 @@ msgstr "Masz już dożywotni dostęp do {premiumProductName}" msgid "You already have this connection." msgstr "Masz już to połączenie." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:87 -msgid "You are about to authorize an app to sign in to your account. Only continue if you initiated this request from a device you control." -msgstr "Za chwilę zezwolisz aplikacji na zalogowanie się do Twojego konta. Kontynuuj tylko wtedy, gdy żądanie pochodzi od Ciebie i zostało wysłane z urządzenia, nad którym masz kontrolę." - #. External link warning title. productName is the Fluxer product name. #: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:22 msgid "You are about to leave {productName}" @@ -41732,6 +41807,11 @@ msgstr "Korzystasz ze starszej stawki. Obecna cena tego planu to {currentSubscri msgid "You're sending messages too quickly" msgstr "Wysyłasz wiadomości zbyt szybko" +#. Title of the browser page after the user approved signing in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:282 +msgid "You're signed in" +msgstr "Zalogowano Cię" + #. Status text on the screen-share hover popout shown to the local streamer. Lightly playful tone. #: src/features/voice/components/StreamWatchHoverPopout.tsx:43 msgid "You're streaming!" 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 2a0fe2a84..84a1e506f 100644 --- a/fluxer_app/src/features/i18n/locales/pt-BR/messages.po +++ b/fluxer_app/src/features/i18n/locales/pt-BR/messages.po @@ -1573,7 +1573,7 @@ msgid "{imageCount, plural, one {# image} other {# images}}, {videoCount, plural msgstr "{imageCount, plural, one {# imagem} other {# imagens}}, {videoCount, plural, one {# vídeo} other {# vídeos}}" #. Explanation shown when the selected instance advertises no web app endpoint. Instance name is interpolated. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:76 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:61 msgid "{instanceName} does not publish a web address, so sign-in cannot be handed to a browser." msgstr "{instanceName} não publica um endereço da web, então o login não pode ser encaminhado para um navegador." @@ -2777,14 +2777,6 @@ msgstr "um conteúdo incorporado ou uma prévia de link (não um arquivo enviado msgid "A separate profile for each community" msgstr "Um perfil separado para cada comunidade" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:164 -msgid "A sign-in request was made for your account. Only approve if you initiated it." -msgstr "Foi feita uma solicitação de login para sua conta. Só aprove se você a iniciou." - -#: src/features/auth/flow/HandoffApprovalFlow.tsx:162 -msgid "A sign-in request was made from the following device. Only approve if you recognize it." -msgstr "Foi feita uma solicitação de login do dispositivo abaixo. Só aprove se você o reconhecer." - #. Description for has:sticker. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:51 msgid "a sticker" @@ -4811,10 +4803,6 @@ msgstr "Aplicar a todas as comunidades" msgid "Approval required" msgstr "Aprovação necessária" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:206 -msgid "Approve" -msgstr "Aprovar" - #. Hint under the sign-in option on fluxer.com that pairs a newly installed app with the old installed app. productName is the app name. #: src/features/auth/flow/AuthLoginLayout.tsx:101 msgid "Approve this app from the {productName} app you already use. No password needed." @@ -7873,6 +7861,11 @@ msgstr "Verificando acesso..." msgid "Checking screen recording permission..." msgstr "Verificando a permissão de gravação de tela..." +#. Title while the browser looks up the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:224 +msgid "Checking the sign-in request…" +msgstr "Verificando a solicitação de login…" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -8847,6 +8840,11 @@ msgstr "Blocos de código" msgid "Code expired" msgstr "Código expirado" +#. Label of the field in the browser where the user types the 12-character code shown in the desktop or mobile app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:28 +msgid "Code from the {productName} app" +msgstr "Código do app {productName}" + #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 @@ -9348,7 +9346,6 @@ msgstr "Ocultar completamente seu selo {premiumProductName} de outros usuários" #: src/features/auth/components/pages/SsoCallbackPage.tsx:256 #: src/features/auth/components/pages/SsoCallbackPage.tsx:322 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:216 msgid "Completing sign-in…" msgstr "Concluindo login…" @@ -9782,7 +9779,6 @@ msgstr "Os menus de contexto podem ser abertos com um clique esquerdo (em botõe #: src/features/auth/components/modals/DeviceRevokeModal.tsx:77 #: src/features/auth/components/modals/PasskeyPinModal.tsx:111 #: src/features/auth/components/pages/oauth_authorize_page/OAuthAccountStep.tsx:36 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/connection/components/modals/AddConnectionModal.tsx:384 #: src/features/i18n/utils/CommonMessageDescriptors.ts:726 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:413 @@ -9790,6 +9786,11 @@ msgstr "Os menus de contexto podem ser abertos com um clique esquerdo (em botõe msgid "Continue" msgstr "Continuar" +#. Title in the desktop app while it waits for the user to sign in on the browser page it opened. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:177 +msgid "Continue in your browser" +msgstr "Continuar no seu navegador" + #. Button in the gift time confirmation that proceeds to subscription checkout. #: src/features/app/components/dialogs/components/plutonium/hooks/useCheckoutActions.tsx:145 msgid "Continue to checkout" @@ -10437,7 +10438,7 @@ msgid "Couldn't close DM" msgstr "Não foi possível fechar a conversa por mensagem direta" #. Desktop handoff flow error shown when finalizing the sign-in fails after a valid code. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:21 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:34 msgid "Couldn't complete sign-in. Try again." msgstr "Não foi possível concluir o login. Tente novamente." @@ -10831,6 +10832,11 @@ msgstr "Não foi possível iniciar a autorização de {blueskyProviderName}" msgid "Couldn't start checkout" msgstr "Não foi possível iniciar a compra" +#. Shown in the desktop app when the browser sign-in request could not be created. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:66 +msgid "Couldn't start signing in with your browser." +msgstr "Não foi possível iniciar o login pelo navegador." + #. Toast error shown when creating a new account connection fails. #: src/features/connection/commands/ConnectionCommands.ts:27 msgid "Couldn't start the connection" @@ -10942,7 +10948,7 @@ msgid "Couldn't upload banner" msgstr "Não foi possível enviar o banner" #. Desktop handoff flow error shown when verifying the pairing code fails for an unexpected reason. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:17 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:30 msgid "Couldn't verify that code. Try again." msgstr "Não foi possível verificar o código. Tente novamente." @@ -12503,7 +12509,6 @@ msgstr "Layout denso" #. Short label in the settings dialog permission components. Keep the tone plain and specific. #: src/features/app/components/dialogs/shared/PermissionComponents.tsx:16 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:203 msgid "Deny" msgstr "Negar" @@ -14910,15 +14915,16 @@ msgstr "Insira o código de {digitCount} dígitos do seu aplicativo autenticador msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Insira o código de {digitCount} dígitos do seu aplicativo autenticador." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:108 -msgid "Enter the code" -msgstr "Insira o código" - #. Inline validation error on the verification step of the DSA report flow when the code field is empty. #: src/features/moderation/components/pages/ReportPage.tsx:74 msgid "Enter the code before continuing." msgstr "Insira o código antes de continuar." +#. Title of the browser page where the user types the 12-character code the app shows under Signing in on another device. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +msgid "Enter the code from the {PRODUCT_NAME} app" +msgstr "Digite o código do app {PRODUCT_NAME}" + #. Body text in the authentication sudo verification modal. Keep the tone plain and specific. #: src/features/auth/components/modals/SudoVerificationModal.tsx:56 msgid "Enter the code from your authenticator app." @@ -14933,10 +14939,6 @@ msgstr "Insira o código enviado para seu e-mail atual." msgid "Enter the code sent to your email address." msgstr "Digite o código enviado para o seu e-mail." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:111 -msgid "Enter the code shown in the app to continue." -msgstr "Insira o código exibido no aplicativo para continuar." - #: src/features/user/components/modals/BouncedEmailChangeModal.tsx:157 #: src/features/user/components/modals/EmailChangeModal.tsx:244 msgid "Enter the code we emailed to your new address." @@ -14959,6 +14961,11 @@ msgstr "Insira o novo e-mail que você quer usar. Enviaremos um código para lá msgid "Enter the PIN for your security key to continue." msgstr "Digite o PIN da sua chave de segurança para continuar." +#. Title in the desktop app above the code the user types into a browser on another device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:228 +msgid "Enter this code in your browser" +msgstr "Digite este código no seu navegador" + #: src/features/auth/flow/HandoffCodeDisplay.tsx:132 msgid "Enter this code in your browser to complete sign-in." msgstr "Insira este código no seu navegador para concluir o login." @@ -15362,7 +15369,7 @@ msgstr "Expira entre {earliest} e {latest}" msgid "Expires in {remaining}s" msgstr "Expira em {remaining}s" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:374 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:250 msgid "Expires in {remainingSeconds}s" msgstr "Expira em {remainingSeconds}s" @@ -16165,7 +16172,7 @@ msgid "Fluxer" msgstr "Fluxer" #. Status shown when browser sign-in status polling gives up after repeated failures. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:72 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:57 msgid "Fluxer stopped checking whether the browser approved this sign-in. It didn't lose your code." msgstr "O Fluxer parou de verificar se o navegador aprovou este login. Ele não perdeu seu código." @@ -16952,8 +16959,6 @@ msgstr "Gerar um link compartilhável ou copiar seu CSS personalizado combinado. msgid "Generate invite link" msgstr "Gerar link de convite" -#. Button label that replaces an expired browser sign-in code with a fresh one. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:64 #: src/features/auth/flow/HandoffCodeDisplay.tsx:117 msgid "Generate new code" msgstr "Gerar novo código" @@ -17348,6 +17353,16 @@ msgstr "Volte e insira um e-mail válido." msgid "Go back to {productName} to continue." msgstr "Volte ao {productName} para continuar." +#. Shown after approving a sign-in for an app on another device, which signs in by itself shortly. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:292 +msgid "Go back to the {PRODUCT_NAME} app. It finishes signing in on its own." +msgstr "Voltar para o app {PRODUCT_NAME}. Ele termina o login sozinho." + +#. Shown after approving, when the browser has already handed the sign-in back to the desktop app. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:288 +msgid "Go back to the {PRODUCT_NAME} app. You can close this tab." +msgstr "Voltar para o app {PRODUCT_NAME}. Você pode fechar esta aba." + #. Accessible label for the community row of an expression info card, which opens a community the viewer is already a member of. {communityName} is the community name. #: src/features/expressions/components/ExpressionInfoCard.tsx:89 msgid "Go to {communityName}" @@ -19295,11 +19310,6 @@ msgstr "JSON inválido. Cole a resposta completa da URL acima." msgid "Invalid or expired code" msgstr "Código inválido ou expirado" -#. Desktop handoff flow error shown when the entered pairing code is invalid or expired. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:13 -msgid "Invalid or expired code. Try again." -msgstr "Código inválido ou expirado. Tente novamente." - #. Short label in the authentication authorize flow. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/state/useAuthorizeFlow.ts:82 msgid "Invalid redirect_uri" @@ -20876,7 +20886,7 @@ msgstr "Formato de horário regional" msgid "Localization" msgstr "Localização do aplicativo" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:192 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:109 #: src/features/user/components/modals/tabs/DevicesTab.tsx:152 msgid "Location" msgstr "Localização" @@ -21034,6 +21044,11 @@ msgstr "Tornar {userName} o proprietário do grupo? Você perderá os privilégi msgid "Make group owner" msgstr "Tornar proprietário do grupo" +#. Shown above the code on the browser approval page when the app cannot be signed in automatically. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:253 +msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." +msgstr "Certifique-se de que este código corresponda ao do app {PRODUCT_NAME}." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" @@ -24668,6 +24683,11 @@ msgstr "Em <0>{listPriceEffectiveDate} sua assinatura muda de {listPriceCurr msgid "On click" msgstr "Ao clicar" +#. One line explanation in the desktop app above the code. signInAddress is the web address of the sign-in page, such as web.fluxer.app/login?handoff=1. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:236 +msgid "On your other device, sign in at {signInAddress} and enter this code when asked." +msgstr "No seu outro dispositivo, faça login em {signInAddress} e insira este código quando solicitado." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:715 msgid "Once deleted, the application and its credentials are permanently removed." msgstr "Depois de excluído, o aplicativo e as credenciais são removidos permanentemente." @@ -24733,6 +24753,11 @@ msgstr "Somente menções @" msgid "Only applies on wide screens." msgstr "Aplica-se apenas a telas largas." +#. Warning under the title of the browser approval page, so people do not approve a sign-in someone else started. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:245 +msgid "Only continue if you started this sign-in on a device you control." +msgstr "Continue somente se você iniciou esta entrada em um dispositivo que você controla." + #. Body copy in the mature content check modal. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:32 msgid "Only credit cards are accepted. Debit and prepaid cards cannot be used for the mature content check." @@ -24921,6 +24946,11 @@ msgstr "Abrir {landmarkName}" msgid "Open {premiumProductFullName}" msgstr "Abrir {premiumProductFullName}" +#. Button on the browser page after approving that opens the desktop app again if it did not come to the front. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:304 +msgid "Open {PRODUCT_NAME}" +msgstr "Abrir {PRODUCT_NAME}" + #. Button label that opens the desktop app. productName is the app name. #. Button that hands SSO sign-in back to the mobile app. productName is the app name. #: src/features/auth/components/pages/SsoCallbackPage.tsx:47 @@ -25011,12 +25041,15 @@ msgstr "Abrir opções do banner" msgid "Open bookmarks" msgstr "Abrir mensagens salvas" -#. Button label that opens the browser sign-in handoff page. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:56 #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:184 msgid "Open browser" msgstr "Abrir navegador" +#. Button in the desktop app that reopens the browser sign-in page while the app waits for the browser. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:53 +msgid "Open browser again" +msgstr "Abrir navegador novamente" + #. Primary button in the screen-share picker on web. Hands off to the browser's native getDisplayMedia picker. #: src/features/voice/components/modals/ScreenSharePickerModal.tsx:209 msgid "Open browser picker" @@ -25392,10 +25425,6 @@ msgstr "Abrir configurações de voz e vídeo" msgid "Open with {accountName} on {instanceName}" msgstr "Abrir com {accountName} em {instanceName}" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:414 -msgid "Open your browser to finish signing in." -msgstr "Abra seu navegador para terminar de entrar." - #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:137 msgid "Open your browser, sign in, then enter the code below to link your account." msgstr "Abra seu navegador, faça login e insira o código abaixo para vincular sua conta." @@ -25421,7 +25450,7 @@ msgstr "Abre a página de Membros. Pressione Espaço ou Enter para abrir." #. Short label in the language tab. Keep it concise. #. Spellcheck engine option in the textarea spellcheck submenu. Uses the host operating system spellchecker. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:79 #: src/features/user/components/modals/tabs/LanguageTab.tsx:110 msgid "Operating system" @@ -26439,7 +26468,7 @@ msgstr "Plano" msgid "Plans, perks, gifts and your subscription all live on one page." msgstr "Planos, vantagens, presentes e sua assinatura ficam todos em uma página." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:172 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:89 msgid "Platform" msgstr "Plataforma" @@ -31859,11 +31888,6 @@ msgstr "Mostrar chat" msgid "Show chat with {count, plural, one {# unread message} other {# unread messages}}" msgstr "Mostrar chat com {count, plural, =0 {# mensagens não lidas} one {# mensagem não lida} other {# mensagens não lidas}}" -#. Button label that opens the manual browser handoff code fallback. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:60 -msgid "Show code" -msgstr "Mostrar código" - #. Developer voice status menu option for displaying the voice connection identifier. #: src/features/voice/components/voice_connection_status/VoiceConnectionStatusInner.tsx:76 msgid "Show connection ID" @@ -32306,7 +32330,9 @@ msgstr "Exibe o banner em uma seção própria abaixo do cabeçalho da comunidad msgid "Sidebar" msgstr "Barra lateral" +#. Button in the browser that approves signing in to the desktop or mobile app that asked for it. #. Generic authentication action label. Use for buttons, links, page titles, and accessible labels. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:33 #: src/features/i18n/utils/CommonMessageDescriptors.ts:79 msgid "Sign in" msgstr "Entrar" @@ -32321,10 +32347,35 @@ msgstr "Entrar novamente" msgid "Sign in again as {accountLabel}" msgstr "Faça login novamente como {accountLabel}" +#. Shown in the desktop app while it waits for the browser. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:193 +msgid "Sign in to {instanceName} in your browser and confirm. This app finishes signing in on its own." +msgstr "Faça login no {instanceName} no seu navegador e confirme. Este app finaliza o login sozinho." + +#. Shown in the desktop app above the code when the browser cannot return the sign-in automatically. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:189 +msgid "Sign in to {instanceName} in your browser, and check that it shows this code:" +msgstr "Faça login no {instanceName} no seu navegador e verifique se ele mostra este código:" + #: src/features/auth/flow/GiftHeader.tsx:33 msgid "Sign in to claim your gift" msgstr "Faça login para resgatar seu presente" +#. Title of the browser page where the user approves signing in to an app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:71 +msgid "Sign in to the {PRODUCT_NAME} app" +msgstr "Entrar no aplicativo {PRODUCT_NAME}" + +#. Title of the browser page where the user approves signing in to the desktop app that opened it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:58 +msgid "Sign in to the {PRODUCT_NAME} desktop app" +msgstr "Faça login no aplicativo para desktop {PRODUCT_NAME}" + +#. Title of the browser page where the user approves signing in to the mobile app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:65 +msgid "Sign in to the {PRODUCT_NAME} mobile app" +msgstr "Faça login no app móvel {PRODUCT_NAME}" + #. Action label that starts passkey authentication. #: src/features/auth/AuthMessageDescriptors.ts:13 msgid "Sign in with a passkey" @@ -32403,14 +32454,10 @@ msgstr "Sair da sua conta em outros dispositivos" msgid "Sign out?" msgstr "Sair?" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:234 -msgid "Sign-in approved" -msgstr "Login aprovado" - -#. Short label in the authentication handoff approval flow. Keep the tone plain and specific. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:26 -msgid "Sign-in code" -msgstr "Código de acesso" +#. Title of the browser page after the user cancelled the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:322 +msgid "Sign-in cancelled" +msgstr "Login cancelado" #. Section title for email address and password controls in the account security tab. Keep it concise. #: src/features/user/components/modals/tabs/account_security_tab/AccountSecuritySections.tsx:23 @@ -32433,10 +32480,6 @@ msgstr "Fluxo de login" msgid "Sign-in method" msgstr "Método de entrada" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:84 -msgid "Sign-in request" -msgstr "Solicitação de login" - #. Aria label on the signal-strength icon shown while the first latency sample is still pending. #: src/features/voice/components/SignalStrengthIcon.tsx:16 msgid "Signal strength loading" @@ -32453,6 +32496,21 @@ msgstr "Sessão iniciada" msgid "Signed-in devices" msgstr "Dispositivos conectados" +#. Shown on the browser approval page above the buttons. name is the display name of the account that will be signed in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:137 +msgid "Signing in as {name}" +msgstr "Entrando como {name}" + +#. Text button in the desktop app that shows a code to type into a browser on a different device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:207 +msgid "Signing in on another device?" +msgstr "Fazendo login em outro dispositivo?" + +#. Title while the browser approves the sign-in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:228 +msgid "Signing in…" +msgstr "Entrando…" + #. Label for Bluesky OAuth signing key ID input. #: src/features/app/components/setup/SetupWizardSteps.tsx:1161 msgid "Signing key ID" @@ -33504,6 +33562,8 @@ msgstr "Iniciar teste do microfone" msgid "Start minimized" msgstr "Iniciar minimizado" +#. Button on the browser page after cancelling that goes back to choosing an account. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:337 #: src/features/moderation/components/report/ReportStepDetails.tsx:326 #: src/features/moderation/components/report/ReportStepEmail.tsx:97 #: src/features/moderation/components/report/ReportStepVerification.tsx:134 @@ -34910,6 +34970,11 @@ msgstr "Tailandês" msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Obrigado por ajudar a manter o {productName} seguro. Analisaremos sua denúncia o mais rápido possível." +#. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 +msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." +msgstr "Esse código não é válido em {instanceHost}. Verifique o código no app {productName} e tente novamente." + #. Body of the passkey page after the passkey prompt failed or was dismissed. Keep plain. #: src/features/auth/passkey_migration/PasskeyBridgePage.tsx:36 msgid "That didn't work. Try again or cancel." @@ -34953,11 +35018,6 @@ msgstr "Não foi possível excluir a mensagem" msgid "That message is gone, or you lost access to the conversation." msgstr "Essa mensagem sumiu ou você perdeu o acesso à conversa." -#. Error shown when a browser sign-in handoff code expires before it is approved. -#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 -msgid "That sign-in code expired. Try again." -msgstr "Esse código de login expirou. Tente novamente." - #. End-of-list line in the saved messages popout after every bookmark has been shown. #. End-of-list line on the saved messages page after every bookmark has been shown. #: src/features/messaging/components/pages/SavedMessagesPage.tsx:35 @@ -34965,6 +35025,21 @@ msgstr "Esse código de login expirou. Tente novamente." msgid "That's all of them." msgstr "É tudo." +#. Warning on the browser approval page when the app asked for a different account than the one chosen. requestedIdentifier is the email or username the app asked for, name is the chosen account's display name. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:131 +msgid "The {PRODUCT_NAME} app asked to sign in as {requestedIdentifier}, but you chose {name}." +msgstr "O app {PRODUCT_NAME} pediu para entrar como {requestedIdentifier}, mas você escolheu {name}." + +#. Explains where the code comes from, under the title of the browser page where it is typed. Signing in on another device is the label of a button in the app and must match its translation. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:187 +msgid "The {PRODUCT_NAME} app on your other device shows it under Signing in on another device. Only enter a code from a device you control." +msgstr "O app {PRODUCT_NAME} no seu outro dispositivo mostra isso em \"Fazendo login em outro dispositivo\". Insira um código apenas de um dispositivo que você controla." + +#. Shown after the user cancelled the sign-in request in the browser. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:327 +msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." +msgstr "O app {PRODUCT_NAME} não foi conectado. Você pode fechar esta aba." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -34983,10 +35058,6 @@ msgstr "O app travou" msgid "The app has crashed. Checking for updates that might fix this issue…" msgstr "O app travou. Verificando se há atualizações que possam resolver o problema…" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:237 -msgid "The app should now be signed in to your account." -msgstr "O aplicativo deve estar conectado à sua conta agora." - #. Activity log detail line under a lifted ban, for a temporary ban that had already ended on its own before it was lifted. A ban is the community ban, not the feature that blocks a user. {date} is when the ban ended, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:55 msgid "The ban had already expired on {date}" @@ -35184,6 +35255,16 @@ msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "A fonte de compartilhamento de tela parou de enviar vídeo, então o seu compartilhamento de tela foi interrompido." +#. Error shown in the desktop app when a browser sign-in request expires before it is approved in the browser. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 +msgid "The sign-in request expired before your browser approved it." +msgstr "A solicitação de login expirou antes que seu navegador a aprovasse." + +#. Error shown in the desktop app when the user pressed Cancel on the browser sign-in page. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:14 +msgid "The sign-in was cancelled in your browser." +msgstr "O login foi cancelado no seu navegador." + #. Activity log detail line under a deleted sticker, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the sticker, shown as a clickable user chip. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts:100 msgid "The sticker was uploaded by {user}" @@ -35408,6 +35489,11 @@ msgstr "Terceiros" msgid "This account can't be blocked." msgstr "Não é possível bloquear esta conta." +#. Error in the browser when the chosen account belongs to a different server than the app that asked to sign in. accountHost and requestHost are server addresses. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:38 +msgid "This account is on {accountHost}, but the {productName} app is signing in to {requestHost}. Choose an account on {requestHost}." +msgstr "Esta conta está em {accountHost}, mas o app {productName} está fazendo login em {requestHost}. Escolha uma conta em {requestHost}." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:418 msgid "This action cannot be undone. All associated data, including the bot user, will be permanently deleted." msgstr "Esta ação não poderá ser desfeita. Todos os dados associados, incluindo o bot, serão excluídos permanentemente." @@ -35551,11 +35637,6 @@ msgstr "Isso limpa completamente seu status premium no backend, incluindo tipo d msgid "This code doesn't exist." msgstr "Este código não existe." -#. Status shown under the browser sign-in code once its countdown reaches zero. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:68 -msgid "This code expired." -msgstr "Este código expirou." - #. Gift redemption error modal body for an invalid or already used code. #: src/features/gift/commands/GiftCommands.tsx:37 msgid "This code is invalid or already used." @@ -36075,6 +36156,11 @@ msgstr "Este link de redefinição expirou. Links de redefinição duram 1 hora. msgid "This shows how links appear: {linkPreviewExampleUrl}" msgstr "Isto mostra como os links aparecem: {linkPreviewExampleUrl}" +#. Error in the browser when the sign-in request from the desktop app no longer exists, because it expired or the app cancelled it. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:20 +msgid "This sign-in request expired or was cancelled in the {productName} app. Start again from the app." +msgstr "Esta solicitação de login expirou ou foi cancelada no app {productName}. Tente novamente pelo app." + #. Label above the community a sticker comes from in the sticker info card. #: src/features/expressions/components/ExpressionInfoCard.tsx:75 msgid "This sticker is from" @@ -38520,6 +38606,11 @@ msgstr "Use {url} onde o URL da imagem deve ser inserido." msgid "Use a dedicated modal to set a message history threshold date for members who don't have the {readMessageHistoryPermissionLabel} permission." msgstr "Use uma janela específica para definir a data de corte do histórico de mensagens para membros que não têm a permissão {readMessageHistoryPermissionLabel}." +#. Text button on the browser approval page that goes back to choosing which account signs in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:149 +msgid "Use a different account" +msgstr "Usar outra conta" + #: src/features/auth/flow/instance_selector/InstancePickerRows.tsx:267 msgid "Use a self-hosted instance URL" msgstr "Use um URL de instância auto-hospedada" @@ -39296,10 +39387,6 @@ msgstr "Verifique seu e-mail para comprar o {premiumProductFullName}." msgid "Verify your email to start DMs." msgstr "Verifique seu e-mail para iniciar conversas por mensagem direta." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:142 -msgid "Verifying code…" -msgstr "Verificando código…" - #: src/features/auth/components/pages/ResetPasswordPage.tsx:145 msgid "Verifying your reset link…" msgstr "Verificando seu link de redefinição…" @@ -40073,10 +40160,6 @@ msgstr "Aguarde um momento antes de excluir mais mensagens." msgid "Wait between messages. Members with \"{bypassSlowmodePermissionLabel}\" can bypass this." msgstr "Intervalo entre mensagens. Membros com a permissão \"{bypassSlowmodePermissionLabel}\" podem ignorá-lo." -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:445 -msgid "Waiting for browser approval." -msgstr "Aguardando aprovação do navegador." - #. Tooltip explaining that video / screen share controls are gated while the voice connection is not yet ready. #: src/features/voice/components/voice_connection_status/LocalParticipantControls.tsx:45 msgid "Waiting for connection..." @@ -40118,10 +40201,6 @@ msgstr "Reativar" msgid "Warning" msgstr "Aviso" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:158 -msgid "Was this you?" -msgstr "Foi você?" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:243 msgctxt "us-state" @@ -40959,10 +41038,6 @@ msgstr "Você já tem o {premiumProductName} vitalício" msgid "You already have this connection." msgstr "Você já tem esta conexão." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:87 -msgid "You are about to authorize an app to sign in to your account. Only continue if you initiated this request from a device you control." -msgstr "Você está prestes a autorizar um aplicativo a entrar na sua conta. Só continue se você iniciou esta solicitação de um dispositivo que você controla." - #. External link warning title. productName is the Fluxer product name. #: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:22 msgid "You are about to leave {productName}" @@ -41732,6 +41807,11 @@ msgstr "Você está em um plano com preço antigo. O preço atual para este plan msgid "You're sending messages too quickly" msgstr "Você está enviando mensagens muito rápido" +#. Title of the browser page after the user approved signing in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:282 +msgid "You're signed in" +msgstr "Você está conectado" + #. Status text on the screen-share hover popout shown to the local streamer. Lightly playful tone. #: src/features/voice/components/StreamWatchHoverPopout.tsx:43 msgid "You're streaming!" diff --git a/fluxer_app/src/features/i18n/locales/ro/messages.po b/fluxer_app/src/features/i18n/locales/ro/messages.po index e26eeeffc..8f9722729 100644 --- a/fluxer_app/src/features/i18n/locales/ro/messages.po +++ b/fluxer_app/src/features/i18n/locales/ro/messages.po @@ -1573,7 +1573,7 @@ msgid "{imageCount, plural, one {# image} other {# images}}, {videoCount, plural msgstr "{imageCount, plural, one {# imagine} few {# imagini} other {# de imagini}}, {videoCount, plural, one {# videoclip} few {# videoclipuri} other {# de videoclipuri}}" #. Explanation shown when the selected instance advertises no web app endpoint. Instance name is interpolated. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:76 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:61 msgid "{instanceName} does not publish a web address, so sign-in cannot be handed to a browser." msgstr "{instanceName} nu publică o adresă web, prin urmare autentificarea nu poate fi transferată către un browser." @@ -2777,14 +2777,6 @@ msgstr "o încorporare complexă sau o previzualizare a linkului (nu un fișier msgid "A separate profile for each community" msgstr "Un profil separat pentru fiecare comunitate" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:164 -msgid "A sign-in request was made for your account. Only approve if you initiated it." -msgstr "A fost făcută o solicitare de conectare pentru contul tău. Aprobă doar dacă tu ai inițiat-o." - -#: src/features/auth/flow/HandoffApprovalFlow.tsx:162 -msgid "A sign-in request was made from the following device. Only approve if you recognize it." -msgstr "O solicitare de conectare a fost făcută de pe următorul dispozitiv. Aprobă doar dacă îl recunoști." - #. Description for has:sticker. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:51 msgid "a sticker" @@ -4811,10 +4803,6 @@ msgstr "Aplică tuturor comunităților" msgid "Approval required" msgstr "Aprobare necesară" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:206 -msgid "Approve" -msgstr "Aprobă" - #. Hint under the sign-in option on fluxer.com that pairs a newly installed app with the old installed app. productName is the app name. #: src/features/auth/flow/AuthLoginLayout.tsx:101 msgid "Approve this app from the {productName} app you already use. No password needed." @@ -7873,6 +7861,11 @@ msgstr "Se verifică accesul..." msgid "Checking screen recording permission..." msgstr "Se verifică permisiunea de înregistrare a ecranului..." +#. Title while the browser looks up the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:224 +msgid "Checking the sign-in request…" +msgstr "Verificăm solicitarea de conectare…" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -8847,6 +8840,11 @@ msgstr "Blocuri de cod" msgid "Code expired" msgstr "Cod expirat" +#. Label of the field in the browser where the user types the 12-character code shown in the desktop or mobile app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:28 +msgid "Code from the {productName} app" +msgstr "Codul din aplicația {productName}" + #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 @@ -9348,7 +9346,6 @@ msgstr "Ascunde complet insigna {premiumProductName} față de ceilalți utiliza #: src/features/auth/components/pages/SsoCallbackPage.tsx:256 #: src/features/auth/components/pages/SsoCallbackPage.tsx:322 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:216 msgid "Completing sign-in…" msgstr "Se finalizează conectarea…" @@ -9782,7 +9779,6 @@ msgstr "Meniurile contextuale pot fi deschise cu clic stânga (pe butoane) sau c #: src/features/auth/components/modals/DeviceRevokeModal.tsx:77 #: src/features/auth/components/modals/PasskeyPinModal.tsx:111 #: src/features/auth/components/pages/oauth_authorize_page/OAuthAccountStep.tsx:36 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/connection/components/modals/AddConnectionModal.tsx:384 #: src/features/i18n/utils/CommonMessageDescriptors.ts:726 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:413 @@ -9790,6 +9786,11 @@ msgstr "Meniurile contextuale pot fi deschise cu clic stânga (pe butoane) sau c msgid "Continue" msgstr "Continuă" +#. Title in the desktop app while it waits for the user to sign in on the browser page it opened. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:177 +msgid "Continue in your browser" +msgstr "Continuă în browserul tău" + #. Button in the gift time confirmation that proceeds to subscription checkout. #: src/features/app/components/dialogs/components/plutonium/hooks/useCheckoutActions.tsx:145 msgid "Continue to checkout" @@ -10437,7 +10438,7 @@ msgid "Couldn't close DM" msgstr "Nu s-a putut închide DM-ul" #. Desktop handoff flow error shown when finalizing the sign-in fails after a valid code. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:21 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:34 msgid "Couldn't complete sign-in. Try again." msgstr "Nu s-a putut finaliza autentificarea. Încearcă din nou." @@ -10831,6 +10832,11 @@ msgstr "Nu s-a putut începe autorizarea {blueskyProviderName}" msgid "Couldn't start checkout" msgstr "Nu s-a putut iniția plata" +#. Shown in the desktop app when the browser sign-in request could not be created. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:66 +msgid "Couldn't start signing in with your browser." +msgstr "Nu am putut începe autentificarea prin browser." + #. Toast error shown when creating a new account connection fails. #: src/features/connection/commands/ConnectionCommands.ts:27 msgid "Couldn't start the connection" @@ -10942,7 +10948,7 @@ msgid "Couldn't upload banner" msgstr "Nu s-a putut încărca bannerul" #. Desktop handoff flow error shown when verifying the pairing code fails for an unexpected reason. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:17 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:30 msgid "Couldn't verify that code. Try again." msgstr "Nu s-a putut verifica codul. Încearcă din nou." @@ -12503,7 +12509,6 @@ msgstr "Aspect compact" #. Short label in the settings dialog permission components. Keep the tone plain and specific. #: src/features/app/components/dialogs/shared/PermissionComponents.tsx:16 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:203 msgid "Deny" msgstr "Refuză" @@ -14910,15 +14915,16 @@ msgstr "Introdu codul de {digitCount} cifre din aplicația de autentificare sau msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Introdu codul de {digitCount} cifre din aplicația de autentificare." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:108 -msgid "Enter the code" -msgstr "Introdu codul" - #. Inline validation error on the verification step of the DSA report flow when the code field is empty. #: src/features/moderation/components/pages/ReportPage.tsx:74 msgid "Enter the code before continuing." msgstr "Introdu codul înainte de a continua." +#. Title of the browser page where the user types the 12-character code the app shows under Signing in on another device. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +msgid "Enter the code from the {PRODUCT_NAME} app" +msgstr "Introdu codul din aplicația {PRODUCT_NAME}" + #. Body text in the authentication sudo verification modal. Keep the tone plain and specific. #: src/features/auth/components/modals/SudoVerificationModal.tsx:56 msgid "Enter the code from your authenticator app." @@ -14933,10 +14939,6 @@ msgstr "Introdu codul trimis pe adresa ta de e-mail actuală." msgid "Enter the code sent to your email address." msgstr "Introdu codul trimis pe adresa ta de e-mail." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:111 -msgid "Enter the code shown in the app to continue." -msgstr "Introdu codul afișat în aplicație pentru a continua." - #: src/features/user/components/modals/BouncedEmailChangeModal.tsx:157 #: src/features/user/components/modals/EmailChangeModal.tsx:244 msgid "Enter the code we emailed to your new address." @@ -14959,6 +14961,11 @@ msgstr "Introdu noua adresă de e-mail pe care vrei să o folosești. Îți vom msgid "Enter the PIN for your security key to continue." msgstr "Introdu codul PIN al cheii tale de securitate pentru a continua." +#. Title in the desktop app above the code the user types into a browser on another device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:228 +msgid "Enter this code in your browser" +msgstr "Introdu acest cod în browserul tău" + #: src/features/auth/flow/HandoffCodeDisplay.tsx:132 msgid "Enter this code in your browser to complete sign-in." msgstr "Introdu acest cod în browser pentru a finaliza conectarea." @@ -15362,7 +15369,7 @@ msgstr "Expiră între {earliest} și {latest}" msgid "Expires in {remaining}s" msgstr "Expiră în {remaining}s" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:374 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:250 msgid "Expires in {remainingSeconds}s" msgstr "Expiră în {remainingSeconds}s" @@ -16165,7 +16172,7 @@ msgid "Fluxer" msgstr "Fluxer" #. Status shown when browser sign-in status polling gives up after repeated failures. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:72 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:57 msgid "Fluxer stopped checking whether the browser approved this sign-in. It didn't lose your code." msgstr "Fluxer a încetat să mai verifice dacă browserul a aprobat această autentificare. Nu și-a pierdut codul." @@ -16952,8 +16959,6 @@ msgstr "Generează un link partajabil sau copiază CSS-ul tău personalizat comb msgid "Generate invite link" msgstr "Generează link de invitație" -#. Button label that replaces an expired browser sign-in code with a fresh one. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:64 #: src/features/auth/flow/HandoffCodeDisplay.tsx:117 msgid "Generate new code" msgstr "Generează cod nou" @@ -17348,6 +17353,16 @@ msgstr "Întoarce-te și introdu o adresă de e-mail validă." msgid "Go back to {productName} to continue." msgstr "Revino la {productName} pentru a continua." +#. Shown after approving a sign-in for an app on another device, which signs in by itself shortly. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:292 +msgid "Go back to the {PRODUCT_NAME} app. It finishes signing in on its own." +msgstr "Înapoi la aplicația {PRODUCT_NAME}. Se finalizează autentificarea de la sine." + +#. Shown after approving, when the browser has already handed the sign-in back to the desktop app. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:288 +msgid "Go back to the {PRODUCT_NAME} app. You can close this tab." +msgstr "Înapoi la aplicația {PRODUCT_NAME}. Poți închide această filă." + #. Accessible label for the community row of an expression info card, which opens a community the viewer is already a member of. {communityName} is the community name. #: src/features/expressions/components/ExpressionInfoCard.tsx:89 msgid "Go to {communityName}" @@ -19295,11 +19310,6 @@ msgstr "JSON nevalid. Lipește răspunsul complet de la adresa URL de mai sus." msgid "Invalid or expired code" msgstr "Cod nevalid sau expirat" -#. Desktop handoff flow error shown when the entered pairing code is invalid or expired. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:13 -msgid "Invalid or expired code. Try again." -msgstr "Cod nevalid sau expirat. Încearcă din nou." - #. Short label in the authentication authorize flow. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/state/useAuthorizeFlow.ts:82 msgid "Invalid redirect_uri" @@ -20876,7 +20886,7 @@ msgstr "Format oră locală" msgid "Localization" msgstr "Localizare" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:192 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:109 #: src/features/user/components/modals/tabs/DevicesTab.tsx:152 msgid "Location" msgstr "Locație" @@ -21034,6 +21044,11 @@ msgstr "Faci din {userName} proprietarul grupului? Îți vei pierde privilegiile msgid "Make group owner" msgstr "Numește proprietar al grupului" +#. Shown above the code on the browser approval page when the app cannot be signed in automatically. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:253 +msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." +msgstr "Asigură-te că acest cod corespunde celui din aplicația {PRODUCT_NAME}." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" @@ -24668,6 +24683,11 @@ msgstr "Pe <0>{listPriceEffectiveDate} abonamentul tău trece de la {listPri msgid "On click" msgstr "La clic" +#. One line explanation in the desktop app above the code. signInAddress is the web address of the sign-in page, such as web.fluxer.app/login?handoff=1. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:236 +msgid "On your other device, sign in at {signInAddress} and enter this code when asked." +msgstr "Pe celălalt dispozitiv, conectează-te la {signInAddress} și introdu acest cod când ți se cere." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:715 msgid "Once deleted, the application and its credentials are permanently removed." msgstr "Odată ștearsă, aplicația și credențialele ei sunt eliminate definitiv." @@ -24733,6 +24753,11 @@ msgstr "Doar @mențiuni" msgid "Only applies on wide screens." msgstr "Se aplică doar pe ecrane late." +#. Warning under the title of the browser approval page, so people do not approve a sign-in someone else started. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:245 +msgid "Only continue if you started this sign-in on a device you control." +msgstr "Continuă doar dacă ai început această autentificare pe un dispozitiv pe care îl controlezi." + #. Body copy in the mature content check modal. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:32 msgid "Only credit cards are accepted. Debit and prepaid cards cannot be used for the mature content check." @@ -24921,6 +24946,11 @@ msgstr "Deschide {landmarkName}" msgid "Open {premiumProductFullName}" msgstr "Deschide {premiumProductFullName}" +#. Button on the browser page after approving that opens the desktop app again if it did not come to the front. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:304 +msgid "Open {PRODUCT_NAME}" +msgstr "Deschide {PRODUCT_NAME}" + #. Button label that opens the desktop app. productName is the app name. #. Button that hands SSO sign-in back to the mobile app. productName is the app name. #: src/features/auth/components/pages/SsoCallbackPage.tsx:47 @@ -25011,12 +25041,15 @@ msgstr "Deschide opțiunile bannerului" msgid "Open bookmarks" msgstr "Deschide mesajele salvate" -#. Button label that opens the browser sign-in handoff page. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:56 #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:184 msgid "Open browser" msgstr "Deschide browserul" +#. Button in the desktop app that reopens the browser sign-in page while the app waits for the browser. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:53 +msgid "Open browser again" +msgstr "Redeschide browserul" + #. Primary button in the screen-share picker on web. Hands off to the browser's native getDisplayMedia picker. #: src/features/voice/components/modals/ScreenSharePickerModal.tsx:209 msgid "Open browser picker" @@ -25392,10 +25425,6 @@ msgstr "Deschide setările de voce și video" msgid "Open with {accountName} on {instanceName}" msgstr "Deschide cu {accountName} pe {instanceName}" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:414 -msgid "Open your browser to finish signing in." -msgstr "Deschide browserul pentru a finaliza autentificarea." - #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:137 msgid "Open your browser, sign in, then enter the code below to link your account." msgstr "Deschide browserul, conectează-te, apoi introdu codul de mai jos pentru a-ți asocia contul." @@ -25421,7 +25450,7 @@ msgstr "Deschide pagina Membri. Apasă bara de spațiu sau Enter pentru a deschi #. Short label in the language tab. Keep it concise. #. Spellcheck engine option in the textarea spellcheck submenu. Uses the host operating system spellchecker. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:79 #: src/features/user/components/modals/tabs/LanguageTab.tsx:110 msgid "Operating system" @@ -26439,7 +26468,7 @@ msgstr "Abonament" msgid "Plans, perks, gifts and your subscription all live on one page." msgstr "Planurile, beneficiile, cadourile și abonamentul tău se găsesc pe o singură pagină." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:172 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:89 msgid "Platform" msgstr "Platformă" @@ -31859,11 +31888,6 @@ msgstr "Afișează chatul" msgid "Show chat with {count, plural, one {# unread message} other {# unread messages}}" msgstr "Afișează chatul cu {count, plural, one {# mesaj necitit} few {# mesaje necitite} other {# de mesaje necitite}}" -#. Button label that opens the manual browser handoff code fallback. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:60 -msgid "Show code" -msgstr "Afișează codul" - #. Developer voice status menu option for displaying the voice connection identifier. #: src/features/voice/components/voice_connection_status/VoiceConnectionStatusInner.tsx:76 msgid "Show connection ID" @@ -32306,7 +32330,9 @@ msgstr "Afișează bannerul în propria secțiune, sub antetul comunității." msgid "Sidebar" msgstr "Bară laterală" +#. Button in the browser that approves signing in to the desktop or mobile app that asked for it. #. Generic authentication action label. Use for buttons, links, page titles, and accessible labels. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:33 #: src/features/i18n/utils/CommonMessageDescriptors.ts:79 msgid "Sign in" msgstr "Conectează-te" @@ -32321,10 +32347,35 @@ msgstr "Conectează-te din nou" msgid "Sign in again as {accountLabel}" msgstr "Autentifică-te din nou ca {accountLabel}" +#. Shown in the desktop app while it waits for the browser. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:193 +msgid "Sign in to {instanceName} in your browser and confirm. This app finishes signing in on its own." +msgstr "Conectează-te la {instanceName} în browser și confirmă. Această aplicație finalizează conectarea de la sine." + +#. Shown in the desktop app above the code when the browser cannot return the sign-in automatically. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:189 +msgid "Sign in to {instanceName} in your browser, and check that it shows this code:" +msgstr "Conectează-te la {instanceName} în browser și verifică dacă afișează acest cod:" + #: src/features/auth/flow/GiftHeader.tsx:33 msgid "Sign in to claim your gift" msgstr "Conectează-te pentru a-ți revendica cadoul" +#. Title of the browser page where the user approves signing in to an app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:71 +msgid "Sign in to the {PRODUCT_NAME} app" +msgstr "Autentifică-te în aplicația {PRODUCT_NAME}" + +#. Title of the browser page where the user approves signing in to the desktop app that opened it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:58 +msgid "Sign in to the {PRODUCT_NAME} desktop app" +msgstr "Conectează-te la aplicația desktop {PRODUCT_NAME}" + +#. Title of the browser page where the user approves signing in to the mobile app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:65 +msgid "Sign in to the {PRODUCT_NAME} mobile app" +msgstr "Conectează-te la aplicația mobilă {PRODUCT_NAME}" + #. Action label that starts passkey authentication. #: src/features/auth/AuthMessageDescriptors.ts:13 msgid "Sign in with a passkey" @@ -32403,14 +32454,10 @@ msgstr "Deconectează alte dispozitive de la contul tău" msgid "Sign out?" msgstr "Deconectare?" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:234 -msgid "Sign-in approved" -msgstr "Autentificare aprobată" - -#. Short label in the authentication handoff approval flow. Keep the tone plain and specific. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:26 -msgid "Sign-in code" -msgstr "Cod de conectare" +#. Title of the browser page after the user cancelled the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:322 +msgid "Sign-in cancelled" +msgstr "Autentificare anulată" #. Section title for email address and password controls in the account security tab. Keep it concise. #: src/features/user/components/modals/tabs/account_security_tab/AccountSecuritySections.tsx:23 @@ -32433,10 +32480,6 @@ msgstr "Flux de conectare" msgid "Sign-in method" msgstr "Metodă de conectare" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:84 -msgid "Sign-in request" -msgstr "Solicitare de conectare" - #. Aria label on the signal-strength icon shown while the first latency sample is still pending. #: src/features/voice/components/SignalStrengthIcon.tsx:16 msgid "Signal strength loading" @@ -32453,6 +32496,21 @@ msgstr "Conectat" msgid "Signed-in devices" msgstr "Dispozitive conectate" +#. Shown on the browser approval page above the buttons. name is the display name of the account that will be signed in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:137 +msgid "Signing in as {name}" +msgstr "Autentificare ca {name}" + +#. Text button in the desktop app that shows a code to type into a browser on a different device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:207 +msgid "Signing in on another device?" +msgstr "Te conectezi pe alt dispozitiv?" + +#. Title while the browser approves the sign-in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:228 +msgid "Signing in…" +msgstr "Se conectează…" + #. Label for Bluesky OAuth signing key ID input. #: src/features/app/components/setup/SetupWizardSteps.tsx:1161 msgid "Signing key ID" @@ -33504,6 +33562,8 @@ msgstr "Pornește testul microfonului" msgid "Start minimized" msgstr "Pornește minimizat" +#. Button on the browser page after cancelling that goes back to choosing an account. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:337 #: src/features/moderation/components/report/ReportStepDetails.tsx:326 #: src/features/moderation/components/report/ReportStepEmail.tsx:97 #: src/features/moderation/components/report/ReportStepVerification.tsx:134 @@ -34910,6 +34970,11 @@ msgstr "Thailandeză" msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Îți mulțumim că ne ajuți să păstrăm {productName} în siguranță. Îți vom examina raportul cât mai curând posibil." +#. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 +msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." +msgstr "Acest cod nu este valid pe {instanceHost}. Verifică codul din aplicația {productName} și încearcă din nou." + #. Body of the passkey page after the passkey prompt failed or was dismissed. Keep plain. #: src/features/auth/passkey_migration/PasskeyBridgePage.tsx:36 msgid "That didn't work. Try again or cancel." @@ -34953,11 +35018,6 @@ msgstr "Mesajul nu a putut fi șters" msgid "That message is gone, or you lost access to the conversation." msgstr "Mesajul a dispărut sau ai pierdut accesul la conversație." -#. Error shown when a browser sign-in handoff code expires before it is approved. -#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 -msgid "That sign-in code expired. Try again." -msgstr "Codul de conectare a expirat. Încearcă din nou." - #. End-of-list line in the saved messages popout after every bookmark has been shown. #. End-of-list line on the saved messages page after every bookmark has been shown. #: src/features/messaging/components/pages/SavedMessagesPage.tsx:35 @@ -34965,6 +35025,21 @@ msgstr "Codul de conectare a expirat. Încearcă din nou." msgid "That's all of them." msgstr "Asta-i tot." +#. Warning on the browser approval page when the app asked for a different account than the one chosen. requestedIdentifier is the email or username the app asked for, name is the chosen account's display name. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:131 +msgid "The {PRODUCT_NAME} app asked to sign in as {requestedIdentifier}, but you chose {name}." +msgstr "Aplicația {PRODUCT_NAME} a cerut să te conectezi ca {requestedIdentifier}, dar ai ales {name}." + +#. Explains where the code comes from, under the title of the browser page where it is typed. Signing in on another device is the label of a button in the app and must match its translation. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:187 +msgid "The {PRODUCT_NAME} app on your other device shows it under Signing in on another device. Only enter a code from a device you control." +msgstr "Aplicația {PRODUCT_NAME} de pe celălalt dispozitiv o afișează la „Autentificare pe alt dispozitiv”. Introdu doar un cod de pe un dispozitiv pe care îl controlezi." + +#. Shown after the user cancelled the sign-in request in the browser. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:327 +msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." +msgstr "Aplicația {PRODUCT_NAME} nu a fost autentificată. Poți închide această filă." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -34983,10 +35058,6 @@ msgstr "Aplicația s-a închis neașteptat" msgid "The app has crashed. Checking for updates that might fix this issue…" msgstr "Aplicația s-a închis neașteptat. Căutăm actualizări care ar putea remedia problema…" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:237 -msgid "The app should now be signed in to your account." -msgstr "Acum ar trebui să fii conectat la contul tău în aplicație." - #. Activity log detail line under a lifted ban, for a temporary ban that had already ended on its own before it was lifted. A ban is the community ban, not the feature that blocks a user. {date} is when the ban ended, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:55 msgid "The ban had already expired on {date}" @@ -35184,6 +35255,16 @@ msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "Sursa partajării ecranului a încetat să trimită video, astfel încât partajarea ecranului s-a oprit." +#. Error shown in the desktop app when a browser sign-in request expires before it is approved in the browser. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 +msgid "The sign-in request expired before your browser approved it." +msgstr "Cererea de conectare a expirat înainte ca browserul tău să o aprobe." + +#. Error shown in the desktop app when the user pressed Cancel on the browser sign-in page. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:14 +msgid "The sign-in was cancelled in your browser." +msgstr "Autentificarea a fost anulată în browserul tău." + #. Activity log detail line under a deleted sticker, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the sticker, shown as a clickable user chip. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts:100 msgid "The sticker was uploaded by {user}" @@ -35408,6 +35489,11 @@ msgstr "Terță parte" msgid "This account can't be blocked." msgstr "Acest cont nu poate fi blocat." +#. Error in the browser when the chosen account belongs to a different server than the app that asked to sign in. accountHost and requestHost are server addresses. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:38 +msgid "This account is on {accountHost}, but the {productName} app is signing in to {requestHost}. Choose an account on {requestHost}." +msgstr "Acest cont este pe {accountHost}, dar aplicația {productName} se conectează la {requestHost}. Alege un cont de pe {requestHost}." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:418 msgid "This action cannot be undone. All associated data, including the bot user, will be permanently deleted." msgstr "Această acțiune nu poate fi anulată. Toate datele asociate, inclusiv utilizatorul bot, vor fi șterse definitiv." @@ -35551,11 +35637,6 @@ msgstr "Aceasta șterge complet starea ta premium din backend, inclusiv tipul de msgid "This code doesn't exist." msgstr "Acest cod nu există." -#. Status shown under the browser sign-in code once its countdown reaches zero. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:68 -msgid "This code expired." -msgstr "Acest cod a expirat." - #. Gift redemption error modal body for an invalid or already used code. #: src/features/gift/commands/GiftCommands.tsx:37 msgid "This code is invalid or already used." @@ -36075,6 +36156,11 @@ msgstr "Acest link de resetare a expirat. Linkurile de resetare sunt valabile 1 msgid "This shows how links appear: {linkPreviewExampleUrl}" msgstr "Așa arată previzualizarea linkurilor: {linkPreviewExampleUrl}" +#. Error in the browser when the sign-in request from the desktop app no longer exists, because it expired or the app cancelled it. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:20 +msgid "This sign-in request expired or was cancelled in the {productName} app. Start again from the app." +msgstr "Această cerere de conectare a expirat sau a fost anulată în aplicația {productName}. Încearcă din nou din aplicație." + #. Label above the community a sticker comes from in the sticker info card. #: src/features/expressions/components/ExpressionInfoCard.tsx:75 msgid "This sticker is from" @@ -38520,6 +38606,11 @@ msgstr "Folosește {url} acolo unde ar trebui inserată adresa URL a imaginii." msgid "Use a dedicated modal to set a message history threshold date for members who don't have the {readMessageHistoryPermissionLabel} permission." msgstr "Folosește o fereastră dedicată pentru a seta o dată limită a istoricului mesajelor pentru membrii care nu au permisiunea {readMessageHistoryPermissionLabel}." +#. Text button on the browser approval page that goes back to choosing which account signs in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:149 +msgid "Use a different account" +msgstr "Folosește alt cont" + #: src/features/auth/flow/instance_selector/InstancePickerRows.tsx:267 msgid "Use a self-hosted instance URL" msgstr "Folosește un URL de instanță auto-găzduit" @@ -39296,10 +39387,6 @@ msgstr "Verifică-ți adresa de e-mail pentru a cumpăra {premiumProductFullName msgid "Verify your email to start DMs." msgstr "Verifică-ți adresa de e-mail pentru a începe DM-uri." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:142 -msgid "Verifying code…" -msgstr "Se verifică codul…" - #: src/features/auth/components/pages/ResetPasswordPage.tsx:145 msgid "Verifying your reset link…" msgstr "Se verifică linkul de resetare…" @@ -40073,10 +40160,6 @@ msgstr "Așteaptă un moment înainte să ștergi mai multe mesaje." msgid "Wait between messages. Members with \"{bypassSlowmodePermissionLabel}\" can bypass this." msgstr "Așteaptă între mesaje. Membrii cu permisiunea „{bypassSlowmodePermissionLabel}” pot ocoli această limită." -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:445 -msgid "Waiting for browser approval." -msgstr "Se așteaptă aprobarea browserului." - #. Tooltip explaining that video / screen share controls are gated while the voice connection is not yet ready. #: src/features/voice/components/voice_connection_status/LocalParticipantControls.tsx:45 msgid "Waiting for connection..." @@ -40118,10 +40201,6 @@ msgstr "Reactivare" msgid "Warning" msgstr "Avertisment" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:158 -msgid "Was this you?" -msgstr "Tu ai fost?" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:243 msgctxt "us-state" @@ -40959,10 +41038,6 @@ msgstr "Ai deja {premiumProductName} pe viață" msgid "You already have this connection." msgstr "Ai deja această conexiune." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:87 -msgid "You are about to authorize an app to sign in to your account. Only continue if you initiated this request from a device you control." -msgstr "Ești pe cale să autorizezi o aplicație să se conecteze la contul tău. Continuă doar dacă ai inițiat această solicitare de pe un dispozitiv pe care îl controlezi." - #. External link warning title. productName is the Fluxer product name. #: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:22 msgid "You are about to leave {productName}" @@ -41732,6 +41807,11 @@ msgstr "Beneficiezi de un tarif vechi. Prețul actual pentru acest plan este {cu msgid "You're sending messages too quickly" msgstr "Trimiți mesaje prea repede" +#. Title of the browser page after the user approved signing in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:282 +msgid "You're signed in" +msgstr "Te-ai autentificat" + #. Status text on the screen-share hover popout shown to the local streamer. Lightly playful tone. #: src/features/voice/components/StreamWatchHoverPopout.tsx:43 msgid "You're streaming!" diff --git a/fluxer_app/src/features/i18n/locales/ru/messages.po b/fluxer_app/src/features/i18n/locales/ru/messages.po index 83dc36cf9..855f74929 100644 --- a/fluxer_app/src/features/i18n/locales/ru/messages.po +++ b/fluxer_app/src/features/i18n/locales/ru/messages.po @@ -1573,7 +1573,7 @@ msgid "{imageCount, plural, one {# image} other {# images}}, {videoCount, plural msgstr "{imageCount, plural, one {# изображение} few {# изображения} many {# изображений} other {# изображения}}, {videoCount, plural, one {# видео} few {# видео} many {# видео} other {# видео}}" #. Explanation shown when the selected instance advertises no web app endpoint. Instance name is interpolated. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:76 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:61 msgid "{instanceName} does not publish a web address, so sign-in cannot be handed to a browser." msgstr "{instanceName} не публикует веб-адрес, поэтому вход через браузер невозможен." @@ -2777,14 +2777,6 @@ msgstr "расширенный встраиваемый элемент или п msgid "A separate profile for each community" msgstr "Отдельный профиль для каждого сообщества" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:164 -msgid "A sign-in request was made for your account. Only approve if you initiated it." -msgstr "Выполнен запрос на вход в ваш аккаунт. Подтверждайте, только если вы его инициировали." - -#: src/features/auth/flow/HandoffApprovalFlow.tsx:162 -msgid "A sign-in request was made from the following device. Only approve if you recognize it." -msgstr "Запрос на вход выполнен со следующего устройства. Подтверждайте, только если узнаёте его." - #. Description for has:sticker. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:51 msgid "a sticker" @@ -4811,10 +4803,6 @@ msgstr "Применить ко всем сообществам" msgid "Approval required" msgstr "Требуется одобрение" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:206 -msgid "Approve" -msgstr "Одобрить" - #. Hint under the sign-in option on fluxer.com that pairs a newly installed app with the old installed app. productName is the app name. #: src/features/auth/flow/AuthLoginLayout.tsx:101 msgid "Approve this app from the {productName} app you already use. No password needed." @@ -7873,6 +7861,11 @@ msgstr "Проверка доступа..." msgid "Checking screen recording permission..." msgstr "Проверка разрешения на запись экрана..." +#. Title while the browser looks up the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:224 +msgid "Checking the sign-in request…" +msgstr "Проверка запроса на вход…" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -8847,6 +8840,11 @@ msgstr "Блоки кода" msgid "Code expired" msgstr "Срок действия кода истёк" +#. Label of the field in the browser where the user types the 12-character code shown in the desktop or mobile app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:28 +msgid "Code from the {productName} app" +msgstr "Код из приложения {productName}" + #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 @@ -9348,7 +9346,6 @@ msgstr "Полностью скрыть значок {premiumProductName} от #: src/features/auth/components/pages/SsoCallbackPage.tsx:256 #: src/features/auth/components/pages/SsoCallbackPage.tsx:322 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:216 msgid "Completing sign-in…" msgstr "Завершение входа…" @@ -9782,7 +9779,6 @@ msgstr "Контекстные меню открываются левым кли #: src/features/auth/components/modals/DeviceRevokeModal.tsx:77 #: src/features/auth/components/modals/PasskeyPinModal.tsx:111 #: src/features/auth/components/pages/oauth_authorize_page/OAuthAccountStep.tsx:36 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/connection/components/modals/AddConnectionModal.tsx:384 #: src/features/i18n/utils/CommonMessageDescriptors.ts:726 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:413 @@ -9790,6 +9786,11 @@ msgstr "Контекстные меню открываются левым кли msgid "Continue" msgstr "Продолжить" +#. Title in the desktop app while it waits for the user to sign in on the browser page it opened. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:177 +msgid "Continue in your browser" +msgstr "Продолжить в браузере" + #. Button in the gift time confirmation that proceeds to subscription checkout. #: src/features/app/components/dialogs/components/plutonium/hooks/useCheckoutActions.tsx:145 msgid "Continue to checkout" @@ -10437,7 +10438,7 @@ msgid "Couldn't close DM" msgstr "Не удалось закрыть личный чат" #. Desktop handoff flow error shown when finalizing the sign-in fails after a valid code. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:21 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:34 msgid "Couldn't complete sign-in. Try again." msgstr "Не удалось завершить вход. Повторите попытку." @@ -10831,6 +10832,11 @@ msgstr "Не удалось начать авторизацию {blueskyProvider msgid "Couldn't start checkout" msgstr "Не удалось начать оформление заказа" +#. Shown in the desktop app when the browser sign-in request could not be created. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:66 +msgid "Couldn't start signing in with your browser." +msgstr "Не удалось начать вход через браузер." + #. Toast error shown when creating a new account connection fails. #: src/features/connection/commands/ConnectionCommands.ts:27 msgid "Couldn't start the connection" @@ -10942,7 +10948,7 @@ msgid "Couldn't upload banner" msgstr "Не удалось загрузить баннер" #. Desktop handoff flow error shown when verifying the pairing code fails for an unexpected reason. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:17 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:30 msgid "Couldn't verify that code. Try again." msgstr "Не удалось проверить код. Попробуйте ещё раз." @@ -12503,7 +12509,6 @@ msgstr "Компактный вид" #. Short label in the settings dialog permission components. Keep the tone plain and specific. #: src/features/app/components/dialogs/shared/PermissionComponents.tsx:16 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:203 msgid "Deny" msgstr "Отклонить" @@ -14910,15 +14915,16 @@ msgstr "Введите {digitCount}-значный код из приложен msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Введите {digitCount}-значный код из приложения-аутентификатора." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:108 -msgid "Enter the code" -msgstr "Введите код" - #. Inline validation error on the verification step of the DSA report flow when the code field is empty. #: src/features/moderation/components/pages/ReportPage.tsx:74 msgid "Enter the code before continuing." msgstr "Введите код, чтобы продолжить." +#. Title of the browser page where the user types the 12-character code the app shows under Signing in on another device. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +msgid "Enter the code from the {PRODUCT_NAME} app" +msgstr "Введите код из приложения {PRODUCT_NAME}" + #. Body text in the authentication sudo verification modal. Keep the tone plain and specific. #: src/features/auth/components/modals/SudoVerificationModal.tsx:56 msgid "Enter the code from your authenticator app." @@ -14933,10 +14939,6 @@ msgstr "Введите код, отправленный на текущий ад msgid "Enter the code sent to your email address." msgstr "Введите код, отправленный на вашу электронную почту." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:111 -msgid "Enter the code shown in the app to continue." -msgstr "Введите код, показанный в приложении, чтобы продолжить." - #: src/features/user/components/modals/BouncedEmailChangeModal.tsx:157 #: src/features/user/components/modals/EmailChangeModal.tsx:244 msgid "Enter the code we emailed to your new address." @@ -14959,6 +14961,11 @@ msgstr "Введите новый адрес электронной почты. msgid "Enter the PIN for your security key to continue." msgstr "Введите PIN-код ключа безопасности, чтобы продолжить." +#. Title in the desktop app above the code the user types into a browser on another device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:228 +msgid "Enter this code in your browser" +msgstr "Введите этот код в браузере" + #: src/features/auth/flow/HandoffCodeDisplay.tsx:132 msgid "Enter this code in your browser to complete sign-in." msgstr "Введите этот код в браузере, чтобы завершить вход." @@ -15362,7 +15369,7 @@ msgstr "Истекает между {earliest} и {latest}" msgid "Expires in {remaining}s" msgstr "Истекает через {remaining} с" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:374 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:250 msgid "Expires in {remainingSeconds}s" msgstr "Истекает через {remainingSeconds}с" @@ -16165,7 +16172,7 @@ msgid "Fluxer" msgstr "Fluxer" #. Status shown when browser sign-in status polling gives up after repeated failures. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:72 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:57 msgid "Fluxer stopped checking whether the browser approved this sign-in. It didn't lose your code." msgstr "Fluxer перестал проверять, одобрил ли браузер этот вход. Ваш код не потерян." @@ -16952,8 +16959,6 @@ msgstr "Создайте ссылку для публикации или ско msgid "Generate invite link" msgstr "Сгенерировать ссылку-приглашение" -#. Button label that replaces an expired browser sign-in code with a fresh one. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:64 #: src/features/auth/flow/HandoffCodeDisplay.tsx:117 msgid "Generate new code" msgstr "Сгенерировать новый код" @@ -17348,6 +17353,16 @@ msgstr "Вернитесь и введите действительный адр msgid "Go back to {productName} to continue." msgstr "Вернитесь в {productName}, чтобы продолжить." +#. Shown after approving a sign-in for an app on another device, which signs in by itself shortly. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:292 +msgid "Go back to the {PRODUCT_NAME} app. It finishes signing in on its own." +msgstr "Вернуться в приложение {PRODUCT_NAME}. Вход завершится автоматически." + +#. Shown after approving, when the browser has already handed the sign-in back to the desktop app. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:288 +msgid "Go back to the {PRODUCT_NAME} app. You can close this tab." +msgstr "Вернуться в приложение {PRODUCT_NAME}. Вы можете закрыть эту вкладку." + #. Accessible label for the community row of an expression info card, which opens a community the viewer is already a member of. {communityName} is the community name. #: src/features/expressions/components/ExpressionInfoCard.tsx:89 msgid "Go to {communityName}" @@ -19295,11 +19310,6 @@ msgstr "Неверный JSON. Вставьте полный ответ, пол msgid "Invalid or expired code" msgstr "Неверный или просроченный код" -#. Desktop handoff flow error shown when the entered pairing code is invalid or expired. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:13 -msgid "Invalid or expired code. Try again." -msgstr "Неверный или истёкший код. Попробуйте ещё раз." - #. Short label in the authentication authorize flow. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/state/useAuthorizeFlow.ts:82 msgid "Invalid redirect_uri" @@ -20876,7 +20886,7 @@ msgstr "Формат времени" msgid "Localization" msgstr "Локализация" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:192 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:109 #: src/features/user/components/modals/tabs/DevicesTab.tsx:152 msgid "Location" msgstr "Местоположение" @@ -21034,6 +21044,11 @@ msgstr "Сделать {userName} владельцем группы? Вы пот msgid "Make group owner" msgstr "Сделать владельцем группы" +#. Shown above the code on the browser approval page when the app cannot be signed in automatically. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:253 +msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." +msgstr "Убедитесь, что этот код совпадает с кодом в приложении {PRODUCT_NAME}." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" @@ -24668,6 +24683,11 @@ msgstr "С <0>{listPriceEffectiveDate} ваша подписка измен msgid "On click" msgstr "По нажатию" +#. One line explanation in the desktop app above the code. signInAddress is the web address of the sign-in page, such as web.fluxer.app/login?handoff=1. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:236 +msgid "On your other device, sign in at {signInAddress} and enter this code when asked." +msgstr "На другом устройстве войдите на сайт {signInAddress} и введите этот код, когда потребуется." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:715 msgid "Once deleted, the application and its credentials are permanently removed." msgstr "После удаления приложение и его учетные данные будут безвозвратно удалены." @@ -24733,6 +24753,11 @@ msgstr "Только упоминания" msgid "Only applies on wide screens." msgstr "Применяется только на широких экранах." +#. Warning under the title of the browser approval page, so people do not approve a sign-in someone else started. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:245 +msgid "Only continue if you started this sign-in on a device you control." +msgstr "Продолжайте, только если вы начали этот вход на устройстве, которое контролируете." + #. Body copy in the mature content check modal. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:32 msgid "Only credit cards are accepted. Debit and prepaid cards cannot be used for the mature content check." @@ -24921,6 +24946,11 @@ msgstr "Открыть {landmarkName}" msgid "Open {premiumProductFullName}" msgstr "Открыть {premiumProductFullName}" +#. Button on the browser page after approving that opens the desktop app again if it did not come to the front. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:304 +msgid "Open {PRODUCT_NAME}" +msgstr "Открыть {PRODUCT_NAME}" + #. Button label that opens the desktop app. productName is the app name. #. Button that hands SSO sign-in back to the mobile app. productName is the app name. #: src/features/auth/components/pages/SsoCallbackPage.tsx:47 @@ -25011,12 +25041,15 @@ msgstr "Открыть параметры баннера" msgid "Open bookmarks" msgstr "Открыть закладки" -#. Button label that opens the browser sign-in handoff page. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:56 #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:184 msgid "Open browser" msgstr "Открыть браузер" +#. Button in the desktop app that reopens the browser sign-in page while the app waits for the browser. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:53 +msgid "Open browser again" +msgstr "Открыть браузер снова" + #. Primary button in the screen-share picker on web. Hands off to the browser's native getDisplayMedia picker. #: src/features/voice/components/modals/ScreenSharePickerModal.tsx:209 msgid "Open browser picker" @@ -25392,10 +25425,6 @@ msgstr "Открыть настройки аудио и видео" msgid "Open with {accountName} on {instanceName}" msgstr "Открыть с {accountName} на {instanceName}" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:414 -msgid "Open your browser to finish signing in." -msgstr "Откройте браузер, чтобы завершить вход." - #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:137 msgid "Open your browser, sign in, then enter the code below to link your account." msgstr "Откройте браузер, войдите в аккаунт, затем введите код ниже, чтобы привязать свой аккаунт." @@ -25421,7 +25450,7 @@ msgstr "Открывает страницу участников. Нажмите #. Short label in the language tab. Keep it concise. #. Spellcheck engine option in the textarea spellcheck submenu. Uses the host operating system spellchecker. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:79 #: src/features/user/components/modals/tabs/LanguageTab.tsx:110 msgid "Operating system" @@ -26439,7 +26468,7 @@ msgstr "Тариф" msgid "Plans, perks, gifts and your subscription all live on one page." msgstr "Тарифы, бонусы, подарки и ваша подписка — всё на одной странице." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:172 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:89 msgid "Platform" msgstr "Платформа" @@ -31859,11 +31888,6 @@ msgstr "Показать чат" msgid "Show chat with {count, plural, one {# unread message} other {# unread messages}}" msgstr "Показать чат ({count, plural, one {# непрочитанное сообщение} few {# непрочитанных сообщения} many {# непрочитанных сообщений} other {# непрочитанных сообщений}})" -#. Button label that opens the manual browser handoff code fallback. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:60 -msgid "Show code" -msgstr "Показать код" - #. Developer voice status menu option for displaying the voice connection identifier. #: src/features/voice/components/voice_connection_status/VoiceConnectionStatusInner.tsx:76 msgid "Show connection ID" @@ -32306,7 +32330,9 @@ msgstr "Показывает баннер в отдельном разделе msgid "Sidebar" msgstr "Боковая панель" +#. Button in the browser that approves signing in to the desktop or mobile app that asked for it. #. Generic authentication action label. Use for buttons, links, page titles, and accessible labels. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:33 #: src/features/i18n/utils/CommonMessageDescriptors.ts:79 msgid "Sign in" msgstr "Войти" @@ -32321,10 +32347,35 @@ msgstr "Войти снова" msgid "Sign in again as {accountLabel}" msgstr "Снова войдите как {accountLabel}" +#. Shown in the desktop app while it waits for the browser. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:193 +msgid "Sign in to {instanceName} in your browser and confirm. This app finishes signing in on its own." +msgstr "Войдите в {instanceName} в браузере и подтвердите. Приложение само завершит вход." + +#. Shown in the desktop app above the code when the browser cannot return the sign-in automatically. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:189 +msgid "Sign in to {instanceName} in your browser, and check that it shows this code:" +msgstr "Войдите в {instanceName} в браузере и убедитесь, что там отображается этот код:" + #: src/features/auth/flow/GiftHeader.tsx:33 msgid "Sign in to claim your gift" msgstr "Войдите, чтобы получить подарок" +#. Title of the browser page where the user approves signing in to an app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:71 +msgid "Sign in to the {PRODUCT_NAME} app" +msgstr "Войти в приложение {PRODUCT_NAME}" + +#. Title of the browser page where the user approves signing in to the desktop app that opened it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:58 +msgid "Sign in to the {PRODUCT_NAME} desktop app" +msgstr "Войдите в приложение {PRODUCT_NAME} для компьютера" + +#. Title of the browser page where the user approves signing in to the mobile app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:65 +msgid "Sign in to the {PRODUCT_NAME} mobile app" +msgstr "Войти в мобильное приложение {PRODUCT_NAME}" + #. Action label that starts passkey authentication. #: src/features/auth/AuthMessageDescriptors.ts:13 msgid "Sign in with a passkey" @@ -32403,14 +32454,10 @@ msgstr "Выйти из аккаунта на других устройства msgid "Sign out?" msgstr "Выйти?" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:234 -msgid "Sign-in approved" -msgstr "Вход подтвержден" - -#. Short label in the authentication handoff approval flow. Keep the tone plain and specific. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:26 -msgid "Sign-in code" -msgstr "Код для входа" +#. Title of the browser page after the user cancelled the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:322 +msgid "Sign-in cancelled" +msgstr "Вход отменен" #. Section title for email address and password controls in the account security tab. Keep it concise. #: src/features/user/components/modals/tabs/account_security_tab/AccountSecuritySections.tsx:23 @@ -32433,10 +32480,6 @@ msgstr "Вход в аккаунт" msgid "Sign-in method" msgstr "Способ входа" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:84 -msgid "Sign-in request" -msgstr "Запрос на вход" - #. Aria label on the signal-strength icon shown while the first latency sample is still pending. #: src/features/voice/components/SignalStrengthIcon.tsx:16 msgid "Signal strength loading" @@ -32453,6 +32496,21 @@ msgstr "Выполнен вход" msgid "Signed-in devices" msgstr "Устройства, с которых выполнен вход" +#. Shown on the browser approval page above the buttons. name is the display name of the account that will be signed in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:137 +msgid "Signing in as {name}" +msgstr "Вход как {name}" + +#. Text button in the desktop app that shows a code to type into a browser on a different device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:207 +msgid "Signing in on another device?" +msgstr "Входите с другого устройства?" + +#. Title while the browser approves the sign-in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:228 +msgid "Signing in…" +msgstr "Вход…" + #. Label for Bluesky OAuth signing key ID input. #: src/features/app/components/setup/SetupWizardSteps.tsx:1161 msgid "Signing key ID" @@ -33504,6 +33562,8 @@ msgstr "Начать проверку микрофона" msgid "Start minimized" msgstr "Начинать свернутым" +#. Button on the browser page after cancelling that goes back to choosing an account. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:337 #: src/features/moderation/components/report/ReportStepDetails.tsx:326 #: src/features/moderation/components/report/ReportStepEmail.tsx:97 #: src/features/moderation/components/report/ReportStepVerification.tsx:134 @@ -34910,6 +34970,11 @@ msgstr "Тайский" msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Спасибо, что помогаете нам обеспечивать безопасность в {productName}. Мы рассмотрим вашу жалобу как можно скорее." +#. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 +msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." +msgstr "Этот код недействителен на {instanceHost}. Проверьте код в приложении {productName} и попробуйте снова." + #. Body of the passkey page after the passkey prompt failed or was dismissed. Keep plain. #: src/features/auth/passkey_migration/PasskeyBridgePage.tsx:36 msgid "That didn't work. Try again or cancel." @@ -34953,11 +35018,6 @@ msgstr "Не удалось удалить сообщение" msgid "That message is gone, or you lost access to the conversation." msgstr "Этого сообщения больше нет, или вы потеряли доступ к переписке." -#. Error shown when a browser sign-in handoff code expires before it is approved. -#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 -msgid "That sign-in code expired. Try again." -msgstr "Код входа истёк. Попробуйте снова." - #. End-of-list line in the saved messages popout after every bookmark has been shown. #. End-of-list line on the saved messages page after every bookmark has been shown. #: src/features/messaging/components/pages/SavedMessagesPage.tsx:35 @@ -34965,6 +35025,21 @@ msgstr "Код входа истёк. Попробуйте снова." msgid "That's all of them." msgstr "Это всё." +#. Warning on the browser approval page when the app asked for a different account than the one chosen. requestedIdentifier is the email or username the app asked for, name is the chosen account's display name. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:131 +msgid "The {PRODUCT_NAME} app asked to sign in as {requestedIdentifier}, but you chose {name}." +msgstr "Приложение {PRODUCT_NAME} запросило вход как {requestedIdentifier}, но вы выбрали {name}." + +#. Explains where the code comes from, under the title of the browser page where it is typed. Signing in on another device is the label of a button in the app and must match its translation. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:187 +msgid "The {PRODUCT_NAME} app on your other device shows it under Signing in on another device. Only enter a code from a device you control." +msgstr "Приложение {PRODUCT_NAME} на другом вашем устройстве отображается в разделе «Вход с другого устройства». Вводите код только с устройства, которое вы контролируете." + +#. Shown after the user cancelled the sign-in request in the browser. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:327 +msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." +msgstr "Приложение {PRODUCT_NAME} не было авторизовано. Вы можете закрыть эту вкладку." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -34983,10 +35058,6 @@ msgstr "Приложение вылетело" msgid "The app has crashed. Checking for updates that might fix this issue…" msgstr "Приложение вылетело. Проверяем обновления, которые могут решить эту проблему…" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:237 -msgid "The app should now be signed in to your account." -msgstr "Теперь вы должны быть авторизованы в приложении." - #. Activity log detail line under a lifted ban, for a temporary ban that had already ended on its own before it was lifted. A ban is the community ban, not the feature that blocks a user. {date} is when the ban ended, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:55 msgid "The ban had already expired on {date}" @@ -35184,6 +35255,16 @@ msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "Источник демонстрации экрана прекратил передачу видео, поэтому демонстрация была остановлена." +#. Error shown in the desktop app when a browser sign-in request expires before it is approved in the browser. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 +msgid "The sign-in request expired before your browser approved it." +msgstr "Запрос на вход истек до того, как браузер его одобрил." + +#. Error shown in the desktop app when the user pressed Cancel on the browser sign-in page. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:14 +msgid "The sign-in was cancelled in your browser." +msgstr "Вход в аккаунт был отменен в браузере." + #. Activity log detail line under a deleted sticker, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the sticker, shown as a clickable user chip. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts:100 msgid "The sticker was uploaded by {user}" @@ -35408,6 +35489,11 @@ msgstr "Сторонние" msgid "This account can't be blocked." msgstr "Этот аккаунт нельзя заблокировать." +#. Error in the browser when the chosen account belongs to a different server than the app that asked to sign in. accountHost and requestHost are server addresses. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:38 +msgid "This account is on {accountHost}, but the {productName} app is signing in to {requestHost}. Choose an account on {requestHost}." +msgstr "Эта учётная запись находится на {accountHost}, но приложение {productName} входит в систему на {requestHost}. Выберите учётную запись на {requestHost}." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:418 msgid "This action cannot be undone. All associated data, including the bot user, will be permanently deleted." msgstr "Это действие необратимо. Все связанные данные, включая пользователя-бота, будут удалены без возможности восстановления." @@ -35551,11 +35637,6 @@ msgstr "Это полностью сбросит ваш премиум-стат msgid "This code doesn't exist." msgstr "Такого кода не существует." -#. Status shown under the browser sign-in code once its countdown reaches zero. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:68 -msgid "This code expired." -msgstr "Этот код истёк." - #. Gift redemption error modal body for an invalid or already used code. #: src/features/gift/commands/GiftCommands.tsx:37 msgid "This code is invalid or already used." @@ -36075,6 +36156,11 @@ msgstr "Срок действия этой ссылки для сброса па msgid "This shows how links appear: {linkPreviewExampleUrl}" msgstr "Так выглядят ссылки: {linkPreviewExampleUrl}" +#. Error in the browser when the sign-in request from the desktop app no longer exists, because it expired or the app cancelled it. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:20 +msgid "This sign-in request expired or was cancelled in the {productName} app. Start again from the app." +msgstr "Этот запрос на вход истек или был отменен в приложении {productName}. Попробуйте снова из приложения." + #. Label above the community a sticker comes from in the sticker info card. #: src/features/expressions/components/ExpressionInfoCard.tsx:75 msgid "This sticker is from" @@ -38520,6 +38606,11 @@ msgstr "Используйте {url} там, где нужно подстави msgid "Use a dedicated modal to set a message history threshold date for members who don't have the {readMessageHistoryPermissionLabel} permission." msgstr "Используйте отдельное окно, чтобы задать дату ограничения истории сообщений для участников, у которых нет разрешения «{readMessageHistoryPermissionLabel}»." +#. Text button on the browser approval page that goes back to choosing which account signs in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:149 +msgid "Use a different account" +msgstr "Использовать другой аккаунт" + #: src/features/auth/flow/instance_selector/InstancePickerRows.tsx:267 msgid "Use a self-hosted instance URL" msgstr "Использовать URL собственного сервера" @@ -39296,10 +39387,6 @@ msgstr "Подтвердите почту, чтобы приобрести {prem msgid "Verify your email to start DMs." msgstr "Подтвердите почту, чтобы начинать личные чаты." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:142 -msgid "Verifying code…" -msgstr "Проверка кода…" - #: src/features/auth/components/pages/ResetPasswordPage.tsx:145 msgid "Verifying your reset link…" msgstr "Проверяем ссылку для сброса пароля…" @@ -40073,10 +40160,6 @@ msgstr "Подождите немного, прежде чем удалять д msgid "Wait between messages. Members with \"{bypassSlowmodePermissionLabel}\" can bypass this." msgstr "Интервал между сообщениями. Участники с разрешением «{bypassSlowmodePermissionLabel}» могут его обойти." -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:445 -msgid "Waiting for browser approval." -msgstr "Ожидание подтверждения в браузере." - #. Tooltip explaining that video / screen share controls are gated while the voice connection is not yet ready. #: src/features/voice/components/voice_connection_status/LocalParticipantControls.tsx:45 msgid "Waiting for connection..." @@ -40118,10 +40201,6 @@ msgstr "Пробуждение" msgid "Warning" msgstr "Внимание" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:158 -msgid "Was this you?" -msgstr "Это были вы?" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:243 msgctxt "us-state" @@ -40959,10 +41038,6 @@ msgstr "У вас уже есть пожизненная подписка {premi msgid "You already have this connection." msgstr "У вас уже есть это подключение." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:87 -msgid "You are about to authorize an app to sign in to your account. Only continue if you initiated this request from a device you control." -msgstr "Вы собираетесь разрешить приложению войти в ваш аккаунт. Продолжайте, только если вы инициировали этот запрос с устройства, которое находится под вашим контролем." - #. External link warning title. productName is the Fluxer product name. #: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:22 msgid "You are about to leave {productName}" @@ -41732,6 +41807,11 @@ msgstr "Вы используете тариф по старой цене. Те msgid "You're sending messages too quickly" msgstr "Вы отправляете сообщения слишком быстро" +#. Title of the browser page after the user approved signing in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:282 +msgid "You're signed in" +msgstr "Вы вошли в систему" + #. Status text on the screen-share hover popout shown to the local streamer. Lightly playful tone. #: src/features/voice/components/StreamWatchHoverPopout.tsx:43 msgid "You're streaming!" 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 bdf37df14..65cc1cac6 100644 --- a/fluxer_app/src/features/i18n/locales/sv-SE/messages.po +++ b/fluxer_app/src/features/i18n/locales/sv-SE/messages.po @@ -1573,7 +1573,7 @@ msgid "{imageCount, plural, one {# image} other {# images}}, {videoCount, plural msgstr "{imageCount, plural, one {# bild} other {# bilder}}, {videoCount, plural, one {# video} other {# videor}}" #. Explanation shown when the selected instance advertises no web app endpoint. Instance name is interpolated. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:76 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:61 msgid "{instanceName} does not publish a web address, so sign-in cannot be handed to a browser." msgstr "{instanceName} har ingen webbadress, så inloggning kan inte hanteras via webbläsaren." @@ -2777,14 +2777,6 @@ msgstr "en inbäddning eller länkförhandsvisning (inte en uppladdad fil)" msgid "A separate profile for each community" msgstr "En separat profil för varje community" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:164 -msgid "A sign-in request was made for your account. Only approve if you initiated it." -msgstr "En inloggningsförfrågan gjordes för ditt konto. Godkänn bara om du initierade den." - -#: src/features/auth/flow/HandoffApprovalFlow.tsx:162 -msgid "A sign-in request was made from the following device. Only approve if you recognize it." -msgstr "En inloggningsförfrågan gjordes från följande enhet. Godkänn bara om du känner igen den." - #. Description for has:sticker. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:51 msgid "a sticker" @@ -4811,10 +4803,6 @@ msgstr "Tillämpa på alla communities" msgid "Approval required" msgstr "Godkännande krävs" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:206 -msgid "Approve" -msgstr "Godkänn" - #. Hint under the sign-in option on fluxer.com that pairs a newly installed app with the old installed app. productName is the app name. #: src/features/auth/flow/AuthLoginLayout.tsx:101 msgid "Approve this app from the {productName} app you already use. No password needed." @@ -7873,6 +7861,11 @@ msgstr "Kontrollerar åtkomst..." msgid "Checking screen recording permission..." msgstr "Kontrollerar skärminspelningsbehörigheten…" +#. Title while the browser looks up the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:224 +msgid "Checking the sign-in request…" +msgstr "Kontrollerar inloggningsbegäran…" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -8847,6 +8840,11 @@ msgstr "Kodblock" msgid "Code expired" msgstr "Koden har gått ut" +#. Label of the field in the browser where the user types the 12-character code shown in the desktop or mobile app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:28 +msgid "Code from the {productName} app" +msgstr "Kod från appen {productName}" + #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 @@ -9348,7 +9346,6 @@ msgstr "Dölj ditt {premiumProductName}-märke helt för andra användare" #: src/features/auth/components/pages/SsoCallbackPage.tsx:256 #: src/features/auth/components/pages/SsoCallbackPage.tsx:322 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:216 msgid "Completing sign-in…" msgstr "Loggar in…" @@ -9782,7 +9779,6 @@ msgstr "Snabbmenyer kan öppnas med vänsterklick (på knappar) eller högerklic #: src/features/auth/components/modals/DeviceRevokeModal.tsx:77 #: src/features/auth/components/modals/PasskeyPinModal.tsx:111 #: src/features/auth/components/pages/oauth_authorize_page/OAuthAccountStep.tsx:36 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/connection/components/modals/AddConnectionModal.tsx:384 #: src/features/i18n/utils/CommonMessageDescriptors.ts:726 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:413 @@ -9790,6 +9786,11 @@ msgstr "Snabbmenyer kan öppnas med vänsterklick (på knappar) eller högerklic msgid "Continue" msgstr "Fortsätt" +#. Title in the desktop app while it waits for the user to sign in on the browser page it opened. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:177 +msgid "Continue in your browser" +msgstr "Fortsätt i webbläsaren" + #. Button in the gift time confirmation that proceeds to subscription checkout. #: src/features/app/components/dialogs/components/plutonium/hooks/useCheckoutActions.tsx:145 msgid "Continue to checkout" @@ -10437,7 +10438,7 @@ msgid "Couldn't close DM" msgstr "Kunde inte stänga DM-konversationen" #. Desktop handoff flow error shown when finalizing the sign-in fails after a valid code. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:21 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:34 msgid "Couldn't complete sign-in. Try again." msgstr "Kunde inte slutföra inloggningen. Försök igen." @@ -10831,6 +10832,11 @@ msgstr "Kunde inte starta auktoriseringen för {blueskyProviderName}" msgid "Couldn't start checkout" msgstr "Kunde inte starta betalning" +#. Shown in the desktop app when the browser sign-in request could not be created. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:66 +msgid "Couldn't start signing in with your browser." +msgstr "Kunde inte starta inloggning med din webbläsare." + #. Toast error shown when creating a new account connection fails. #: src/features/connection/commands/ConnectionCommands.ts:27 msgid "Couldn't start the connection" @@ -10942,7 +10948,7 @@ msgid "Couldn't upload banner" msgstr "Kunde inte ladda upp bannern" #. Desktop handoff flow error shown when verifying the pairing code fails for an unexpected reason. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:17 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:30 msgid "Couldn't verify that code. Try again." msgstr "Kunde inte verifiera koden. Försök igen." @@ -12503,7 +12509,6 @@ msgstr "Kompakt layout" #. Short label in the settings dialog permission components. Keep the tone plain and specific. #: src/features/app/components/dialogs/shared/PermissionComponents.tsx:16 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:203 msgid "Deny" msgstr "Neka" @@ -14910,15 +14915,16 @@ msgstr "Ange den {digitCount}-siffriga koden från din autentiseringsapp eller e msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Ange den {digitCount}-siffriga koden från din autentiseringsapp." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:108 -msgid "Enter the code" -msgstr "Ange koden" - #. Inline validation error on the verification step of the DSA report flow when the code field is empty. #: src/features/moderation/components/pages/ReportPage.tsx:74 msgid "Enter the code before continuing." msgstr "Ange koden innan du fortsätter." +#. Title of the browser page where the user types the 12-character code the app shows under Signing in on another device. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +msgid "Enter the code from the {PRODUCT_NAME} app" +msgstr "Ange koden från {PRODUCT_NAME}-appen" + #. Body text in the authentication sudo verification modal. Keep the tone plain and specific. #: src/features/auth/components/modals/SudoVerificationModal.tsx:56 msgid "Enter the code from your authenticator app." @@ -14933,10 +14939,6 @@ msgstr "Ange koden som skickats till din nuvarande e-postadress." msgid "Enter the code sent to your email address." msgstr "Ange koden som skickats till din e-postadress." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:111 -msgid "Enter the code shown in the app to continue." -msgstr "Ange koden som visas i appen för att fortsätta." - #: src/features/user/components/modals/BouncedEmailChangeModal.tsx:157 #: src/features/user/components/modals/EmailChangeModal.tsx:244 msgid "Enter the code we emailed to your new address." @@ -14959,6 +14961,11 @@ msgstr "Ange den nya e-postadress du vill använda. Vi skickar en kod dit sedan. msgid "Enter the PIN for your security key to continue." msgstr "Ange PIN-koden för din säkerhetsnyckel för att fortsätta." +#. Title in the desktop app above the code the user types into a browser on another device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:228 +msgid "Enter this code in your browser" +msgstr "Ange den här koden i webbläsaren" + #: src/features/auth/flow/HandoffCodeDisplay.tsx:132 msgid "Enter this code in your browser to complete sign-in." msgstr "Ange den här koden i din webbläsare för att slutföra inloggningen." @@ -15362,7 +15369,7 @@ msgstr "Går ut mellan {earliest} och {latest}" msgid "Expires in {remaining}s" msgstr "Giltig i {remaining} sekunder" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:374 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:250 msgid "Expires in {remainingSeconds}s" msgstr "Giltigt i {remainingSeconds}s" @@ -16165,7 +16172,7 @@ msgid "Fluxer" msgstr "Fluxer" #. Status shown when browser sign-in status polling gives up after repeated failures. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:72 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:57 msgid "Fluxer stopped checking whether the browser approved this sign-in. It didn't lose your code." msgstr "Fluxer slutade kontrollera om webbläsaren godkände inloggningen. Den tappade inte bort din kod." @@ -16952,8 +16959,6 @@ msgstr "Generera en delbar länk eller kopiera din kombinerade anpassade CSS." msgid "Generate invite link" msgstr "Generera inbjudningslänk" -#. Button label that replaces an expired browser sign-in code with a fresh one. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:64 #: src/features/auth/flow/HandoffCodeDisplay.tsx:117 msgid "Generate new code" msgstr "Generera ny kod" @@ -17348,6 +17353,16 @@ msgstr "Gå tillbaka och ange en giltig e-postadress." msgid "Go back to {productName} to continue." msgstr "Gå tillbaka till {productName} för att fortsätta." +#. Shown after approving a sign-in for an app on another device, which signs in by itself shortly. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:292 +msgid "Go back to the {PRODUCT_NAME} app. It finishes signing in on its own." +msgstr "Gå tillbaka till {PRODUCT_NAME}-appen. Den loggar in sig själv strax." + +#. Shown after approving, when the browser has already handed the sign-in back to the desktop app. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:288 +msgid "Go back to the {PRODUCT_NAME} app. You can close this tab." +msgstr "Gå tillbaka till {PRODUCT_NAME}-appen. Du kan stänga den här fliken." + #. Accessible label for the community row of an expression info card, which opens a community the viewer is already a member of. {communityName} is the community name. #: src/features/expressions/components/ExpressionInfoCard.tsx:89 msgid "Go to {communityName}" @@ -19295,11 +19310,6 @@ msgstr "Ogiltig JSON. Klistra in hela svaret från URL:en ovan." msgid "Invalid or expired code" msgstr "Ogiltig eller utgången kod" -#. Desktop handoff flow error shown when the entered pairing code is invalid or expired. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:13 -msgid "Invalid or expired code. Try again." -msgstr "Ogiltig eller utgången kod. Försök igen." - #. Short label in the authentication authorize flow. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/state/useAuthorizeFlow.ts:82 msgid "Invalid redirect_uri" @@ -20876,7 +20886,7 @@ msgstr "Tidsformat för språk och region" msgid "Localization" msgstr "Språk och region" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:192 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:109 #: src/features/user/components/modals/tabs/DevicesTab.tsx:152 msgid "Location" msgstr "Plats" @@ -21034,6 +21044,11 @@ msgstr "Gör {userName} till gruppägare? Du förlorar ägarprivilegierna." msgid "Make group owner" msgstr "Gör till gruppägare" +#. Shown above the code on the browser approval page when the app cannot be signed in automatically. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:253 +msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." +msgstr "Se till att den här koden matchar den i appen {PRODUCT_NAME}." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" @@ -24668,6 +24683,11 @@ msgstr "Den <0>{listPriceEffectiveDate} ändras priset på ditt abonnemang f msgid "On click" msgstr "Vid klick" +#. One line explanation in the desktop app above the code. signInAddress is the web address of the sign-in page, such as web.fluxer.app/login?handoff=1. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:236 +msgid "On your other device, sign in at {signInAddress} and enter this code when asked." +msgstr "På din andra enhet, logga in på {signInAddress} och ange den här koden när du blir ombedd." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:715 msgid "Once deleted, the application and its credentials are permanently removed." msgstr "När applikationen har raderats tas den och dess inloggningsuppgifter bort permanent." @@ -24733,6 +24753,11 @@ msgstr "Endast omnämnanden" msgid "Only applies on wide screens." msgstr "Gäller endast på breda skärmar." +#. Warning under the title of the browser approval page, so people do not approve a sign-in someone else started. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:245 +msgid "Only continue if you started this sign-in on a device you control." +msgstr "Fortsätt bara om du påbörjade den här inloggningen på en enhet du kontrollerar." + #. Body copy in the mature content check modal. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:32 msgid "Only credit cards are accepted. Debit and prepaid cards cannot be used for the mature content check." @@ -24921,6 +24946,11 @@ msgstr "Öppna {landmarkName}" msgid "Open {premiumProductFullName}" msgstr "Öppna {premiumProductFullName}" +#. Button on the browser page after approving that opens the desktop app again if it did not come to the front. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:304 +msgid "Open {PRODUCT_NAME}" +msgstr "Öppna {PRODUCT_NAME}" + #. Button label that opens the desktop app. productName is the app name. #. Button that hands SSO sign-in back to the mobile app. productName is the app name. #: src/features/auth/components/pages/SsoCallbackPage.tsx:47 @@ -25011,12 +25041,15 @@ msgstr "Öppna banneralternativ" msgid "Open bookmarks" msgstr "Öppna bokmärken" -#. Button label that opens the browser sign-in handoff page. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:56 #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:184 msgid "Open browser" msgstr "Öppna webbläsaren" +#. Button in the desktop app that reopens the browser sign-in page while the app waits for the browser. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:53 +msgid "Open browser again" +msgstr "Öppna webbläsaren igen" + #. Primary button in the screen-share picker on web. Hands off to the browser's native getDisplayMedia picker. #: src/features/voice/components/modals/ScreenSharePickerModal.tsx:209 msgid "Open browser picker" @@ -25392,10 +25425,6 @@ msgstr "Öppna inställningar för ljud och video" msgid "Open with {accountName} on {instanceName}" msgstr "Öppna med {accountName} på {instanceName}" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:414 -msgid "Open your browser to finish signing in." -msgstr "Öppna webbläsaren för att slutföra inloggningen." - #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:137 msgid "Open your browser, sign in, then enter the code below to link your account." msgstr "Öppna din webbläsare, logga in och ange sedan koden nedan för att länka ditt konto." @@ -25421,7 +25450,7 @@ msgstr "Öppnar sidan Medlemmar. Tryck på mellanslag eller Enter för att öppn #. Short label in the language tab. Keep it concise. #. Spellcheck engine option in the textarea spellcheck submenu. Uses the host operating system spellchecker. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:79 #: src/features/user/components/modals/tabs/LanguageTab.tsx:110 msgid "Operating system" @@ -26439,7 +26468,7 @@ msgstr "Plan" msgid "Plans, perks, gifts and your subscription all live on one page." msgstr "Prenumerationer, förmåner, gåvor och ditt abonnemang finns alla på en sida." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:172 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:89 msgid "Platform" msgstr "Plattform" @@ -31859,11 +31888,6 @@ msgstr "Visa chatt" msgid "Show chat with {count, plural, one {# unread message} other {# unread messages}}" msgstr "Visa chatt med {count, plural, one {# oläst meddelande} other {# olästa meddelanden}}" -#. Button label that opens the manual browser handoff code fallback. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:60 -msgid "Show code" -msgstr "Visa kod" - #. Developer voice status menu option for displaying the voice connection identifier. #: src/features/voice/components/voice_connection_status/VoiceConnectionStatusInner.tsx:76 msgid "Show connection ID" @@ -32306,7 +32330,9 @@ msgstr "Visar bannern i ett eget avsnitt under communityns sidhuvud." msgid "Sidebar" msgstr "Sidofält" +#. Button in the browser that approves signing in to the desktop or mobile app that asked for it. #. Generic authentication action label. Use for buttons, links, page titles, and accessible labels. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:33 #: src/features/i18n/utils/CommonMessageDescriptors.ts:79 msgid "Sign in" msgstr "Logga in" @@ -32321,10 +32347,35 @@ msgstr "Logga in igen" msgid "Sign in again as {accountLabel}" msgstr "Logga in igen som {accountLabel}" +#. Shown in the desktop app while it waits for the browser. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:193 +msgid "Sign in to {instanceName} in your browser and confirm. This app finishes signing in on its own." +msgstr "Logga in på {instanceName} i webbläsaren och bekräfta. Appen slutför inloggningen själv." + +#. Shown in the desktop app above the code when the browser cannot return the sign-in automatically. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:189 +msgid "Sign in to {instanceName} in your browser, and check that it shows this code:" +msgstr "Logga in på {instanceName} i webbläsaren och kontrollera att den visar den här koden:" + #: src/features/auth/flow/GiftHeader.tsx:33 msgid "Sign in to claim your gift" msgstr "Logga in för att lösa in din present" +#. Title of the browser page where the user approves signing in to an app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:71 +msgid "Sign in to the {PRODUCT_NAME} app" +msgstr "Logga in på appen {PRODUCT_NAME}" + +#. Title of the browser page where the user approves signing in to the desktop app that opened it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:58 +msgid "Sign in to the {PRODUCT_NAME} desktop app" +msgstr "Logga in på {PRODUCT_NAME} skrivbordsapp" + +#. Title of the browser page where the user approves signing in to the mobile app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:65 +msgid "Sign in to the {PRODUCT_NAME} mobile app" +msgstr "Logga in på {PRODUCT_NAME}-mobilappen" + #. Action label that starts passkey authentication. #: src/features/auth/AuthMessageDescriptors.ts:13 msgid "Sign in with a passkey" @@ -32403,14 +32454,10 @@ msgstr "Logga ut andra enheter från ditt konto" msgid "Sign out?" msgstr "Logga ut?" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:234 -msgid "Sign-in approved" -msgstr "Inloggning godkänd" - -#. Short label in the authentication handoff approval flow. Keep the tone plain and specific. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:26 -msgid "Sign-in code" -msgstr "Inloggningskod" +#. Title of the browser page after the user cancelled the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:322 +msgid "Sign-in cancelled" +msgstr "Inloggning avbruten" #. Section title for email address and password controls in the account security tab. Keep it concise. #: src/features/user/components/modals/tabs/account_security_tab/AccountSecuritySections.tsx:23 @@ -32433,10 +32480,6 @@ msgstr "Inloggningsflöde" msgid "Sign-in method" msgstr "Inloggningsmetod" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:84 -msgid "Sign-in request" -msgstr "Inloggningsförfrågan" - #. Aria label on the signal-strength icon shown while the first latency sample is still pending. #: src/features/voice/components/SignalStrengthIcon.tsx:16 msgid "Signal strength loading" @@ -32453,6 +32496,21 @@ msgstr "Inloggad" msgid "Signed-in devices" msgstr "Inloggade enheter" +#. Shown on the browser approval page above the buttons. name is the display name of the account that will be signed in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:137 +msgid "Signing in as {name}" +msgstr "Loggar in som {name}" + +#. Text button in the desktop app that shows a code to type into a browser on a different device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:207 +msgid "Signing in on another device?" +msgstr "Loggar du in på en annan enhet?" + +#. Title while the browser approves the sign-in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:228 +msgid "Signing in…" +msgstr "Loggar in…" + #. Label for Bluesky OAuth signing key ID input. #: src/features/app/components/setup/SetupWizardSteps.tsx:1161 msgid "Signing key ID" @@ -33504,6 +33562,8 @@ msgstr "Starta mikrofontest" msgid "Start minimized" msgstr "Starta minimerad" +#. Button on the browser page after cancelling that goes back to choosing an account. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:337 #: src/features/moderation/components/report/ReportStepDetails.tsx:326 #: src/features/moderation/components/report/ReportStepEmail.tsx:97 #: src/features/moderation/components/report/ReportStepVerification.tsx:134 @@ -34910,6 +34970,11 @@ msgstr "Thailändska" msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Tack för att du hjälper till att hålla {productName} säkert. Vi granskar din anmälan så snart som möjligt." +#. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 +msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." +msgstr "Den koden är inte giltig på {instanceHost}. Kontrollera koden i {productName}-appen och försök igen." + #. Body of the passkey page after the passkey prompt failed or was dismissed. Keep plain. #: src/features/auth/passkey_migration/PasskeyBridgePage.tsx:36 msgid "That didn't work. Try again or cancel." @@ -34953,11 +35018,6 @@ msgstr "Det gick inte att radera meddelandet" msgid "That message is gone, or you lost access to the conversation." msgstr "Meddelandet har försvunnit, eller så har du inte längre åtkomst till konversationen." -#. Error shown when a browser sign-in handoff code expires before it is approved. -#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 -msgid "That sign-in code expired. Try again." -msgstr "Den inloggningskoden har gått ut. Försök igen." - #. End-of-list line in the saved messages popout after every bookmark has been shown. #. End-of-list line on the saved messages page after every bookmark has been shown. #: src/features/messaging/components/pages/SavedMessagesPage.tsx:35 @@ -34965,6 +35025,21 @@ msgstr "Den inloggningskoden har gått ut. Försök igen." msgid "That's all of them." msgstr "Det var alla." +#. Warning on the browser approval page when the app asked for a different account than the one chosen. requestedIdentifier is the email or username the app asked for, name is the chosen account's display name. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:131 +msgid "The {PRODUCT_NAME} app asked to sign in as {requestedIdentifier}, but you chose {name}." +msgstr "Appen {PRODUCT_NAME} bad om att logga in som {requestedIdentifier}, men du valde {name}." + +#. Explains where the code comes from, under the title of the browser page where it is typed. Signing in on another device is the label of a button in the app and must match its translation. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:187 +msgid "The {PRODUCT_NAME} app on your other device shows it under Signing in on another device. Only enter a code from a device you control." +msgstr "Appen {PRODUCT_NAME} på din andra enhet visas under \"Loggar in på en annan enhet\". Ange endast en kod från en enhet som du kontrollerar." + +#. Shown after the user cancelled the sign-in request in the browser. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:327 +msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." +msgstr "Appen {PRODUCT_NAME} loggades inte in. Du kan stänga den här fliken." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -34983,10 +35058,6 @@ msgstr "Appen kraschade" msgid "The app has crashed. Checking for updates that might fix this issue…" msgstr "Appen har kraschat. Söker efter uppdateringar som kan lösa problemet…" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:237 -msgid "The app should now be signed in to your account." -msgstr "Du bör nu vara inloggad på ditt konto i appen." - #. Activity log detail line under a lifted ban, for a temporary ban that had already ended on its own before it was lifted. A ban is the community ban, not the feature that blocks a user. {date} is when the ban ended, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:55 msgid "The ban had already expired on {date}" @@ -35184,6 +35255,16 @@ msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "Skärmdelningskällan slutade skicka video, så din skärmdelning har stoppats." +#. Error shown in the desktop app when a browser sign-in request expires before it is approved in the browser. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 +msgid "The sign-in request expired before your browser approved it." +msgstr "Begäran om inloggning gick ut innan din webbläsare godkände den." + +#. Error shown in the desktop app when the user pressed Cancel on the browser sign-in page. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:14 +msgid "The sign-in was cancelled in your browser." +msgstr "Inloggningen avbröts i din webbläsare." + #. Activity log detail line under a deleted sticker, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the sticker, shown as a clickable user chip. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts:100 msgid "The sticker was uploaded by {user}" @@ -35408,6 +35489,11 @@ msgstr "Tredje part" msgid "This account can't be blocked." msgstr "Det här kontot kan inte blockeras." +#. Error in the browser when the chosen account belongs to a different server than the app that asked to sign in. accountHost and requestHost are server addresses. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:38 +msgid "This account is on {accountHost}, but the {productName} app is signing in to {requestHost}. Choose an account on {requestHost}." +msgstr "Det här kontot finns på {accountHost}, men appen {productName} loggar in på {requestHost}. Välj ett konto på {requestHost}." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:418 msgid "This action cannot be undone. All associated data, including the bot user, will be permanently deleted." msgstr "Den här åtgärden kan inte ångras. All tillhörande data, inklusive botanvändaren, kommer att raderas permanent." @@ -35551,11 +35637,6 @@ msgstr "Detta rensar hela din premiumstatus på servern, inklusive premiumtyp, f msgid "This code doesn't exist." msgstr "Koden finns inte." -#. Status shown under the browser sign-in code once its countdown reaches zero. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:68 -msgid "This code expired." -msgstr "Koden har gått ut." - #. Gift redemption error modal body for an invalid or already used code. #: src/features/gift/commands/GiftCommands.tsx:37 msgid "This code is invalid or already used." @@ -36075,6 +36156,11 @@ msgstr "Den här återställningslänken har gått ut. Återställningslänkar msgid "This shows how links appear: {linkPreviewExampleUrl}" msgstr "Så här visas länkar: {linkPreviewExampleUrl}" +#. Error in the browser when the sign-in request from the desktop app no longer exists, because it expired or the app cancelled it. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:20 +msgid "This sign-in request expired or was cancelled in the {productName} app. Start again from the app." +msgstr "Den här inloggningsbegäran har gått ut eller avbrutits i appen {productName}. Försök igen från appen." + #. Label above the community a sticker comes from in the sticker info card. #: src/features/expressions/components/ExpressionInfoCard.tsx:75 msgid "This sticker is from" @@ -38520,6 +38606,11 @@ msgstr "Använd {url} där bildens URL ska infogas." msgid "Use a dedicated modal to set a message history threshold date for members who don't have the {readMessageHistoryPermissionLabel} permission." msgstr "Använd en särskild dialog för att ange ett gränsdatum för meddelandehistorik för medlemmar utan behörigheten {readMessageHistoryPermissionLabel}." +#. Text button on the browser approval page that goes back to choosing which account signs in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:149 +msgid "Use a different account" +msgstr "Använd ett annat konto" + #: src/features/auth/flow/instance_selector/InstancePickerRows.tsx:267 msgid "Use a self-hosted instance URL" msgstr "Använd en självhostad instans-URL" @@ -39296,10 +39387,6 @@ msgstr "Verifiera din e-postadress för att köpa {premiumProductFullName}." msgid "Verify your email to start DMs." msgstr "Verifiera din e-postadress för att starta DM-konversationer." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:142 -msgid "Verifying code…" -msgstr "Verifierar kod…" - #: src/features/auth/components/pages/ResetPasswordPage.tsx:145 msgid "Verifying your reset link…" msgstr "Verifierar din återställningslänk…" @@ -40073,10 +40160,6 @@ msgstr "Vänta en stund innan du tar bort fler meddelanden." msgid "Wait between messages. Members with \"{bypassSlowmodePermissionLabel}\" can bypass this." msgstr "Vänta mellan meddelanden. Medlemmar med behörigheten ”{bypassSlowmodePermissionLabel}” kan kringgå detta." -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:445 -msgid "Waiting for browser approval." -msgstr "Väntar på godkännande från webbläsaren." - #. Tooltip explaining that video / screen share controls are gated while the voice connection is not yet ready. #: src/features/voice/components/voice_connection_status/LocalParticipantControls.tsx:45 msgid "Waiting for connection..." @@ -40118,10 +40201,6 @@ msgstr "Väck" msgid "Warning" msgstr "Varning" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:158 -msgid "Was this you?" -msgstr "Var det du?" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:243 msgctxt "us-state" @@ -40959,10 +41038,6 @@ msgstr "Du har redan {premiumProductName} på livstid" msgid "You already have this connection." msgstr "Du har redan den här anslutningen." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:87 -msgid "You are about to authorize an app to sign in to your account. Only continue if you initiated this request from a device you control." -msgstr "Du är på väg att auktorisera en app att logga in på ditt konto. Fortsätt bara om du initierade denna begäran från en enhet du kontrollerar." - #. External link warning title. productName is the Fluxer product name. #: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:22 msgid "You are about to leave {productName}" @@ -41732,6 +41807,11 @@ msgstr "Du har ett äldre pris. Det nuvarande priset för den här planen är {c msgid "You're sending messages too quickly" msgstr "Du skickar meddelanden för snabbt" +#. Title of the browser page after the user approved signing in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:282 +msgid "You're signed in" +msgstr "Du är inloggad" + #. Status text on the screen-share hover popout shown to the local streamer. Lightly playful tone. #: src/features/voice/components/StreamWatchHoverPopout.tsx:43 msgid "You're streaming!" diff --git a/fluxer_app/src/features/i18n/locales/th/messages.po b/fluxer_app/src/features/i18n/locales/th/messages.po index 0c90aee69..e5d4f0967 100644 --- a/fluxer_app/src/features/i18n/locales/th/messages.po +++ b/fluxer_app/src/features/i18n/locales/th/messages.po @@ -1573,7 +1573,7 @@ msgid "{imageCount, plural, one {# image} other {# images}}, {videoCount, plural msgstr "{imageCount, plural, one {# รูปภาพ} other {# รูปภาพ}}, {videoCount, plural, one {# วิดีโอ} other {# วิดีโอ}}" #. Explanation shown when the selected instance advertises no web app endpoint. Instance name is interpolated. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:76 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:61 msgid "{instanceName} does not publish a web address, so sign-in cannot be handed to a browser." msgstr "{instanceName} ไม่ได้เผยแพร่ที่อยู่เว็บ จึงไม่สามารถส่งการลงชื่อเข้าใช้ไปยังเบราว์เซอร์ได้" @@ -2777,14 +2777,6 @@ msgstr "การฝังเนื้อหาแบบสมบูรณ์ห msgid "A separate profile for each community" msgstr "โปรไฟล์แยกสำหรับแต่ละชุมชน" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:164 -msgid "A sign-in request was made for your account. Only approve if you initiated it." -msgstr "มีการขอลงชื่อเข้าใช้สำหรับบัญชีของคุณ อนุมัติเฉพาะเมื่อคุณเป็นผู้เริ่มการขอนี้" - -#: src/features/auth/flow/HandoffApprovalFlow.tsx:162 -msgid "A sign-in request was made from the following device. Only approve if you recognize it." -msgstr "มีการขอลงชื่อเข้าใช้จากอุปกรณ์ต่อไปนี้ อนุมัติเฉพาะเมื่อคุณรู้จักอุปกรณ์นี้" - #. Description for has:sticker. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:51 msgid "a sticker" @@ -4811,10 +4803,6 @@ msgstr "ใช้กับทุกคอมมูนิตี้" msgid "Approval required" msgstr "ต้องได้รับการอนุมัติ" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:206 -msgid "Approve" -msgstr "อนุมัติ" - #. Hint under the sign-in option on fluxer.com that pairs a newly installed app with the old installed app. productName is the app name. #: src/features/auth/flow/AuthLoginLayout.tsx:101 msgid "Approve this app from the {productName} app you already use. No password needed." @@ -7873,6 +7861,11 @@ msgstr "กำลังตรวจสอบสิทธิ์..." msgid "Checking screen recording permission..." msgstr "กำลังตรวจสอบสิทธิ์การบันทึกหน้าจอ…" +#. Title while the browser looks up the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:224 +msgid "Checking the sign-in request…" +msgstr "กำลังตรวจสอบคำขอลงชื่อเข้าใช้…" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -8847,6 +8840,11 @@ msgstr "บล็อกโค้ด" msgid "Code expired" msgstr "รหัสหมดอายุแล้ว" +#. Label of the field in the browser where the user types the 12-character code shown in the desktop or mobile app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:28 +msgid "Code from the {productName} app" +msgstr "รหัสจากแอป {productName}" + #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 @@ -9348,7 +9346,6 @@ msgstr "ซ่อนป้าย {premiumProductName} ของคุณจา #: src/features/auth/components/pages/SsoCallbackPage.tsx:256 #: src/features/auth/components/pages/SsoCallbackPage.tsx:322 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:216 msgid "Completing sign-in…" msgstr "กำลังลงชื่อเข้าใช้…" @@ -9782,7 +9779,6 @@ msgstr "เมนูบริบทสามารถเปิดได้ด้ #: src/features/auth/components/modals/DeviceRevokeModal.tsx:77 #: src/features/auth/components/modals/PasskeyPinModal.tsx:111 #: src/features/auth/components/pages/oauth_authorize_page/OAuthAccountStep.tsx:36 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/connection/components/modals/AddConnectionModal.tsx:384 #: src/features/i18n/utils/CommonMessageDescriptors.ts:726 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:413 @@ -9790,6 +9786,11 @@ msgstr "เมนูบริบทสามารถเปิดได้ด้ msgid "Continue" msgstr "ดำเนินการต่อ" +#. Title in the desktop app while it waits for the user to sign in on the browser page it opened. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:177 +msgid "Continue in your browser" +msgstr "ดำเนินการต่อในเบราว์เซอร์ของคุณ" + #. Button in the gift time confirmation that proceeds to subscription checkout. #: src/features/app/components/dialogs/components/plutonium/hooks/useCheckoutActions.tsx:145 msgid "Continue to checkout" @@ -10437,7 +10438,7 @@ msgid "Couldn't close DM" msgstr "ปิดข้อความส่วนตัวไม่ได้" #. Desktop handoff flow error shown when finalizing the sign-in fails after a valid code. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:21 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:34 msgid "Couldn't complete sign-in. Try again." msgstr "ลงชื่อเข้าใช้ไม่สำเร็จ โปรดลองอีกครั้ง" @@ -10831,6 +10832,11 @@ msgstr "ไม่สามารถเริ่มการอนุญาต {b msgid "Couldn't start checkout" msgstr "ไม่สามารถเริ่มชำระเงินได้" +#. Shown in the desktop app when the browser sign-in request could not be created. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:66 +msgid "Couldn't start signing in with your browser." +msgstr "ไม่สามารถเริ่มลงชื่อเข้าใช้ด้วยเบราว์เซอร์ของคุณได้" + #. Toast error shown when creating a new account connection fails. #: src/features/connection/commands/ConnectionCommands.ts:27 msgid "Couldn't start the connection" @@ -10942,7 +10948,7 @@ msgid "Couldn't upload banner" msgstr "อัปโหลดแบนเนอร์ไม่ได้" #. Desktop handoff flow error shown when verifying the pairing code fails for an unexpected reason. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:17 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:30 msgid "Couldn't verify that code. Try again." msgstr "ยืนยันรหัสไม่ได้ ลองอีกครั้ง" @@ -12503,7 +12509,6 @@ msgstr "เลย์เอาต์กระชับ" #. Short label in the settings dialog permission components. Keep the tone plain and specific. #: src/features/app/components/dialogs/shared/PermissionComponents.tsx:16 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:203 msgid "Deny" msgstr "ปฏิเสธ" @@ -14910,15 +14915,16 @@ msgstr "ป้อนรหัส {digitCount} หลักจากแอปย msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "ป้อนรหัส {digitCount} หลักจากแอปยืนยันตัวตนของคุณ" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:108 -msgid "Enter the code" -msgstr "ป้อนรหัส" - #. Inline validation error on the verification step of the DSA report flow when the code field is empty. #: src/features/moderation/components/pages/ReportPage.tsx:74 msgid "Enter the code before continuing." msgstr "ป้อนรหัสก่อนดำเนินการต่อ" +#. Title of the browser page where the user types the 12-character code the app shows under Signing in on another device. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +msgid "Enter the code from the {PRODUCT_NAME} app" +msgstr "ใส่รหัสจากแอป {PRODUCT_NAME}" + #. Body text in the authentication sudo verification modal. Keep the tone plain and specific. #: src/features/auth/components/modals/SudoVerificationModal.tsx:56 msgid "Enter the code from your authenticator app." @@ -14933,10 +14939,6 @@ msgstr "ป้อนรหัสที่ส่งไปยังอีเมล msgid "Enter the code sent to your email address." msgstr "ป้อนรหัสที่ส่งไปยังอีเมลของคุณ" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:111 -msgid "Enter the code shown in the app to continue." -msgstr "ป้อนรหัสที่แสดงในแอปเพื่อดำเนินการต่อ" - #: src/features/user/components/modals/BouncedEmailChangeModal.tsx:157 #: src/features/user/components/modals/EmailChangeModal.tsx:244 msgid "Enter the code we emailed to your new address." @@ -14959,6 +14961,11 @@ msgstr "ป้อนอีเมลใหม่ที่คุณต้องก msgid "Enter the PIN for your security key to continue." msgstr "ป้อนรหัส PIN ของคีย์ความปลอดภัยของคุณเพื่อดำเนินการต่อ" +#. Title in the desktop app above the code the user types into a browser on another device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:228 +msgid "Enter this code in your browser" +msgstr "ป้อนรหัสนี้ในเบราว์เซอร์ของคุณ" + #: src/features/auth/flow/HandoffCodeDisplay.tsx:132 msgid "Enter this code in your browser to complete sign-in." msgstr "ป้อนรหัสนี้ในเบราว์เซอร์เพื่อลงชื่อเข้าใช้ให้เสร็จสมบูรณ์" @@ -15362,7 +15369,7 @@ msgstr "หมดอายุระหว่าง {earliest} ถึง {latest} msgid "Expires in {remaining}s" msgstr "หมดอายุใน {remaining} วินาที" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:374 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:250 msgid "Expires in {remainingSeconds}s" msgstr "หมดอายุใน {remainingSeconds} วินาที" @@ -16165,7 +16172,7 @@ msgid "Fluxer" msgstr "Fluxer" #. Status shown when browser sign-in status polling gives up after repeated failures. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:72 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:57 msgid "Fluxer stopped checking whether the browser approved this sign-in. It didn't lose your code." msgstr "Fluxer หยุดตรวจสอบว่าเบราว์เซอร์อนุมัติการลงชื่อเข้านี้หรือไม่ ไม่ได้ลบโค้ดของคุณไป" @@ -16952,8 +16959,6 @@ msgstr "สร้างลิงก์ที่แชร์ได้ หรื msgid "Generate invite link" msgstr "สร้างลิงก์เชิญ" -#. Button label that replaces an expired browser sign-in code with a fresh one. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:64 #: src/features/auth/flow/HandoffCodeDisplay.tsx:117 msgid "Generate new code" msgstr "สร้างรหัสใหม่" @@ -17348,6 +17353,16 @@ msgstr "กลับไปป้อนอีเมลที่ถูกต้อ msgid "Go back to {productName} to continue." msgstr "กลับไปที่ {productName} เพื่อดำเนินการต่อ" +#. Shown after approving a sign-in for an app on another device, which signs in by itself shortly. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:292 +msgid "Go back to the {PRODUCT_NAME} app. It finishes signing in on its own." +msgstr "กลับไปที่แอป {PRODUCT_NAME} การลงชื่อเข้าใช้จะเสร็จสมบูรณ์เอง" + +#. Shown after approving, when the browser has already handed the sign-in back to the desktop app. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:288 +msgid "Go back to the {PRODUCT_NAME} app. You can close this tab." +msgstr "กลับไปที่แอป {PRODUCT_NAME} คุณสามารถปิดแท็บนี้ได้" + #. Accessible label for the community row of an expression info card, which opens a community the viewer is already a member of. {communityName} is the community name. #: src/features/expressions/components/ExpressionInfoCard.tsx:89 msgid "Go to {communityName}" @@ -19295,11 +19310,6 @@ msgstr "JSON ไม่ถูกต้อง วางการตอบกลั msgid "Invalid or expired code" msgstr "รหัสไม่ถูกต้องหรือหมดอายุ" -#. Desktop handoff flow error shown when the entered pairing code is invalid or expired. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:13 -msgid "Invalid or expired code. Try again." -msgstr "รหัสไม่ถูกต้องหรือหมดอายุแล้ว ลองอีกครั้ง" - #. Short label in the authentication authorize flow. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/state/useAuthorizeFlow.ts:82 msgid "Invalid redirect_uri" @@ -20876,7 +20886,7 @@ msgstr "รูปแบบเวลาท้องถิ่น" msgid "Localization" msgstr "ภาษา" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:192 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:109 #: src/features/user/components/modals/tabs/DevicesTab.tsx:152 msgid "Location" msgstr "ตำแหน่งที่ตั้ง" @@ -21034,6 +21044,11 @@ msgstr "ต้องการให้ {userName} เป็นเจ้าขอ msgid "Make group owner" msgstr "ตั้งเป็นเจ้าของกลุ่ม" +#. Shown above the code on the browser approval page when the app cannot be signed in automatically. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:253 +msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." +msgstr "ตรวจสอบให้แน่ใจว่าโค้ดนี้ตรงกับโค้ดในแอป {PRODUCT_NAME}" + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" @@ -24668,6 +24683,11 @@ msgstr "ในวันที่ <0>{listPriceEffectiveDate} การสม msgid "On click" msgstr "เมื่อคลิก" +#. One line explanation in the desktop app above the code. signInAddress is the web address of the sign-in page, such as web.fluxer.app/login?handoff=1. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:236 +msgid "On your other device, sign in at {signInAddress} and enter this code when asked." +msgstr "บนอุปกรณ์อื่นของคุณ ลงชื่อเข้าใช้ที่ {signInAddress} และป้อนรหัสนี้เมื่อถูกถาม" + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:715 msgid "Once deleted, the application and its credentials are permanently removed." msgstr "เมื่อลบแล้ว แอปพลิเคชันและข้อมูลรับรองจะถูกนำออกอย่างถาวร" @@ -24733,6 +24753,11 @@ msgstr "เฉพาะ @ที่กล่าวถึง" msgid "Only applies on wide screens." msgstr "ใช้ได้เฉพาะบนหน้าจอขนาดใหญ่" +#. Warning under the title of the browser approval page, so people do not approve a sign-in someone else started. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:245 +msgid "Only continue if you started this sign-in on a device you control." +msgstr "ดำเนินการต่อก็ต่อเมื่อคุณเริ่มการลงชื่อเข้าใช้นี้บนอุปกรณ์ที่คุณควบคุมเท่านั้น" + #. Body copy in the mature content check modal. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:32 msgid "Only credit cards are accepted. Debit and prepaid cards cannot be used for the mature content check." @@ -24921,6 +24946,11 @@ msgstr "เปิด {landmarkName}" msgid "Open {premiumProductFullName}" msgstr "เปิด {premiumProductFullName}" +#. Button on the browser page after approving that opens the desktop app again if it did not come to the front. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:304 +msgid "Open {PRODUCT_NAME}" +msgstr "เปิด {PRODUCT_NAME}" + #. Button label that opens the desktop app. productName is the app name. #. Button that hands SSO sign-in back to the mobile app. productName is the app name. #: src/features/auth/components/pages/SsoCallbackPage.tsx:47 @@ -25011,12 +25041,15 @@ msgstr "เปิดตัวเลือกแบนเนอร์" msgid "Open bookmarks" msgstr "เปิดบุ๊กมาร์ก" -#. Button label that opens the browser sign-in handoff page. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:56 #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:184 msgid "Open browser" msgstr "เปิดเบราว์เซอร์" +#. Button in the desktop app that reopens the browser sign-in page while the app waits for the browser. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:53 +msgid "Open browser again" +msgstr "เปิดเบราว์เซอร์อีกครั้ง" + #. Primary button in the screen-share picker on web. Hands off to the browser's native getDisplayMedia picker. #: src/features/voice/components/modals/ScreenSharePickerModal.tsx:209 msgid "Open browser picker" @@ -25392,10 +25425,6 @@ msgstr "เปิดการตั้งค่าเสียงและวิ msgid "Open with {accountName} on {instanceName}" msgstr "เปิดด้วย {accountName} บน {instanceName}" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:414 -msgid "Open your browser to finish signing in." -msgstr "เปิดเบราว์เซอร์ของคุณเพื่อดำเนินการลงชื่อเข้าใช้ให้เสร็จสิ้น" - #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:137 msgid "Open your browser, sign in, then enter the code below to link your account." msgstr "เปิดเบราว์เซอร์ของคุณ ลงชื่อเข้าใช้ แล้วป้อนรหัสข้างล่างเพื่อเชื่อมโยงบัญชีของคุณ" @@ -25421,7 +25450,7 @@ msgstr "เปิดหน้าสมาชิก กด Space หรือ Ent #. Short label in the language tab. Keep it concise. #. Spellcheck engine option in the textarea spellcheck submenu. Uses the host operating system spellchecker. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:79 #: src/features/user/components/modals/tabs/LanguageTab.tsx:110 msgid "Operating system" @@ -26439,7 +26468,7 @@ msgstr "แพ็กเกจ" msgid "Plans, perks, gifts and your subscription all live on one page." msgstr "แผน สิทธิประโยชน์ ของขวัญ และการสมัครสมาชิกของคุณทั้งหมดจะอยู่ที่หน้าเดียว" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:172 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:89 msgid "Platform" msgstr "แพลตฟอร์ม" @@ -31859,11 +31888,6 @@ msgstr "แสดงแชท" msgid "Show chat with {count, plural, one {# unread message} other {# unread messages}}" msgstr "แสดงแชทที่มี {count, plural, one {ข้อความที่ยังไม่ได้อ่าน # ข้อความ} other {ข้อความที่ยังไม่ได้อ่าน # ข้อความ}}" -#. Button label that opens the manual browser handoff code fallback. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:60 -msgid "Show code" -msgstr "แสดงรหัส" - #. Developer voice status menu option for displaying the voice connection identifier. #: src/features/voice/components/voice_connection_status/VoiceConnectionStatusInner.tsx:76 msgid "Show connection ID" @@ -32306,7 +32330,9 @@ msgstr "แสดงแบนเนอร์ในส่วนของตัว msgid "Sidebar" msgstr "แถบด้านข้าง" +#. Button in the browser that approves signing in to the desktop or mobile app that asked for it. #. Generic authentication action label. Use for buttons, links, page titles, and accessible labels. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:33 #: src/features/i18n/utils/CommonMessageDescriptors.ts:79 msgid "Sign in" msgstr "ลงชื่อเข้าใช้" @@ -32321,10 +32347,35 @@ msgstr "ลงชื่อเข้าใช้อีกครั้ง" msgid "Sign in again as {accountLabel}" msgstr "ลงชื่อเข้าใช้อีกครั้งในฐานะ {accountLabel}" +#. Shown in the desktop app while it waits for the browser. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:193 +msgid "Sign in to {instanceName} in your browser and confirm. This app finishes signing in on its own." +msgstr "ลงชื่อเข้าใช้ {instanceName} ในเบราว์เซอร์ของคุณ แล้วยืนยัน แอปนี้จะลงชื่อเข้าใช้ให้เอง" + +#. Shown in the desktop app above the code when the browser cannot return the sign-in automatically. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:189 +msgid "Sign in to {instanceName} in your browser, and check that it shows this code:" +msgstr "ลงชื่อเข้าใช้ {instanceName} ในเบราว์เซอร์ของคุณ แล้วตรวจสอบว่าแสดงรหัสนี้:" + #: src/features/auth/flow/GiftHeader.tsx:33 msgid "Sign in to claim your gift" msgstr "ลงชื่อเข้าใช้เพื่อรับของขวัญของคุณ" +#. Title of the browser page where the user approves signing in to an app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:71 +msgid "Sign in to the {PRODUCT_NAME} app" +msgstr "ลงชื่อเข้าใช้แอป {PRODUCT_NAME}" + +#. Title of the browser page where the user approves signing in to the desktop app that opened it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:58 +msgid "Sign in to the {PRODUCT_NAME} desktop app" +msgstr "ลงชื่อเข้าใช้แอปเดสก์ท็อป {PRODUCT_NAME}" + +#. Title of the browser page where the user approves signing in to the mobile app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:65 +msgid "Sign in to the {PRODUCT_NAME} mobile app" +msgstr "ลงชื่อเข้าใช้แอปมือถือ {PRODUCT_NAME}" + #. Action label that starts passkey authentication. #: src/features/auth/AuthMessageDescriptors.ts:13 msgid "Sign in with a passkey" @@ -32403,14 +32454,10 @@ msgstr "ออกจากระบบอุปกรณ์อื่นจาก msgid "Sign out?" msgstr "ออกจากระบบหรือไม่" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:234 -msgid "Sign-in approved" -msgstr "อนุมัติการลงชื่อเข้าใช้แล้ว" - -#. Short label in the authentication handoff approval flow. Keep the tone plain and specific. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:26 -msgid "Sign-in code" -msgstr "รหัสลงชื่อเข้าใช้" +#. Title of the browser page after the user cancelled the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:322 +msgid "Sign-in cancelled" +msgstr "ยกเลิกการลงชื่อเข้าใช้" #. Section title for email address and password controls in the account security tab. Keep it concise. #: src/features/user/components/modals/tabs/account_security_tab/AccountSecuritySections.tsx:23 @@ -32433,10 +32480,6 @@ msgstr "ขั้นตอนการลงชื่อเข้าใช้" msgid "Sign-in method" msgstr "วิธีลงชื่อเข้าใช้" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:84 -msgid "Sign-in request" -msgstr "คำขอลงชื่อเข้าใช้" - #. Aria label on the signal-strength icon shown while the first latency sample is still pending. #: src/features/voice/components/SignalStrengthIcon.tsx:16 msgid "Signal strength loading" @@ -32453,6 +32496,21 @@ msgstr "ลงชื่อเข้าใช้แล้ว" msgid "Signed-in devices" msgstr "อุปกรณ์ที่ลงชื่อเข้าใช้" +#. Shown on the browser approval page above the buttons. name is the display name of the account that will be signed in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:137 +msgid "Signing in as {name}" +msgstr "ลงชื่อเข้าใช้ในฐานะ {name}" + +#. Text button in the desktop app that shows a code to type into a browser on a different device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:207 +msgid "Signing in on another device?" +msgstr "ลงชื่อเข้าใช้อีกเครื่องใช่ไหม" + +#. Title while the browser approves the sign-in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:228 +msgid "Signing in…" +msgstr "กำลังลงชื่อเข้าใช้…" + #. Label for Bluesky OAuth signing key ID input. #: src/features/app/components/setup/SetupWizardSteps.tsx:1161 msgid "Signing key ID" @@ -33504,6 +33562,8 @@ msgstr "เริ่มทดสอบไมโครโฟน" msgid "Start minimized" msgstr "เริ่มแบบย่อ" +#. Button on the browser page after cancelling that goes back to choosing an account. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:337 #: src/features/moderation/components/report/ReportStepDetails.tsx:326 #: src/features/moderation/components/report/ReportStepEmail.tsx:97 #: src/features/moderation/components/report/ReportStepVerification.tsx:134 @@ -34910,6 +34970,11 @@ msgstr "ไทย" msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "ขอบคุณที่ช่วยให้ {productName} ปลอดภัย เราจะตรวจสอบรายงานของคุณโดยเร็วที่สุด" +#. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 +msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." +msgstr "รหัสนี้ไม่ถูกต้องบน {instanceHost} โปรดตรวจสอบรหัสในแอป {productName} แล้วลองอีกครั้ง" + #. Body of the passkey page after the passkey prompt failed or was dismissed. Keep plain. #: src/features/auth/passkey_migration/PasskeyBridgePage.tsx:36 msgid "That didn't work. Try again or cancel." @@ -34953,11 +35018,6 @@ msgstr "ลบข้อความไม่ได้" msgid "That message is gone, or you lost access to the conversation." msgstr "ข้อความนั้นหายไปแล้ว หรือคุณไม่สามารถเข้าถึงการสนทนานั้นได้" -#. Error shown when a browser sign-in handoff code expires before it is approved. -#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 -msgid "That sign-in code expired. Try again." -msgstr "รหัสลงชื่อเข้าใช้นั้นหมดอายุแล้ว ลองอีกครั้ง" - #. End-of-list line in the saved messages popout after every bookmark has been shown. #. End-of-list line on the saved messages page after every bookmark has been shown. #: src/features/messaging/components/pages/SavedMessagesPage.tsx:35 @@ -34965,6 +35025,21 @@ msgstr "รหัสลงชื่อเข้าใช้นั้นหมด msgid "That's all of them." msgstr "ทั้งหมดมีเท่านี้" +#. Warning on the browser approval page when the app asked for a different account than the one chosen. requestedIdentifier is the email or username the app asked for, name is the chosen account's display name. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:131 +msgid "The {PRODUCT_NAME} app asked to sign in as {requestedIdentifier}, but you chose {name}." +msgstr "แอป {PRODUCT_NAME} ขอให้ลงชื่อเข้าใช้เป็น {requestedIdentifier} แต่คุณเลือก {name}" + +#. Explains where the code comes from, under the title of the browser page where it is typed. Signing in on another device is the label of a button in the app and must match its translation. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:187 +msgid "The {PRODUCT_NAME} app on your other device shows it under Signing in on another device. Only enter a code from a device you control." +msgstr "แอป {PRODUCT_NAME} บนอุปกรณ์อื่นของคุณจะแสดงรายการภายใต้ \"กำลังลงชื่อเข้าใช้อุปกรณ์อื่น\" โปรดป้อนรหัสจากอุปกรณ์ที่คุณควบคุมเท่านั้น" + +#. Shown after the user cancelled the sign-in request in the browser. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:327 +msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." +msgstr "แอป {PRODUCT_NAME} ไม่ได้ลงชื่อเข้าใช้ คุณสามารถปิดแท็บนี้ได้" + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -34983,10 +35058,6 @@ msgstr "แอปขัดข้อง" msgid "The app has crashed. Checking for updates that might fix this issue…" msgstr "แอปขัดข้อง กำลังตรวจสอบการอัปเดตที่อาจแก้ไขปัญหานี้…" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:237 -msgid "The app should now be signed in to your account." -msgstr "ตอนนี้แอปควรจะลงชื่อเข้าใช้บัญชีของคุณแล้ว" - #. Activity log detail line under a lifted ban, for a temporary ban that had already ended on its own before it was lifted. A ban is the community ban, not the feature that blocks a user. {date} is when the ban ended, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:55 msgid "The ban had already expired on {date}" @@ -35184,6 +35255,16 @@ msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "แหล่งที่มาของการแชร์หน้าจอหยุดส่งวิดีโอ การแชร์หน้าจอของคุณจึงหยุดลง" +#. Error shown in the desktop app when a browser sign-in request expires before it is approved in the browser. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 +msgid "The sign-in request expired before your browser approved it." +msgstr "คำขอลงชื่อเข้าใช้หมดอายุแล้วก่อนที่เบราว์เซอร์ของคุณจะอนุมัติ" + +#. Error shown in the desktop app when the user pressed Cancel on the browser sign-in page. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:14 +msgid "The sign-in was cancelled in your browser." +msgstr "การลงชื่อเข้าใช้ถูกยกเลิกในเบราว์เซอร์ของคุณแล้ว" + #. Activity log detail line under a deleted sticker, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the sticker, shown as a clickable user chip. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts:100 msgid "The sticker was uploaded by {user}" @@ -35408,6 +35489,11 @@ msgstr "บุคคลภายนอก" msgid "This account can't be blocked." msgstr "ไม่สามารถบล็อกบัญชีนี้ได้" +#. Error in the browser when the chosen account belongs to a different server than the app that asked to sign in. accountHost and requestHost are server addresses. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:38 +msgid "This account is on {accountHost}, but the {productName} app is signing in to {requestHost}. Choose an account on {requestHost}." +msgstr "บัญชีนี้อยู่บน {accountHost} แต่แอป {productName} กำลังลงชื่อเข้าใช้ที่ {requestHost} โปรดเลือกบัญชีที่อยู่บน {requestHost}" + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:418 msgid "This action cannot be undone. All associated data, including the bot user, will be permanently deleted." msgstr "การดำเนินการนี้ไม่สามารถเลิกทำได้ ข้อมูลที่เกี่ยวข้องทั้งหมด รวมถึงผู้ใช้บอท จะถูกลบอย่างถาวร" @@ -35551,11 +35637,6 @@ msgstr "การดำเนินการนี้จะล้างสถา msgid "This code doesn't exist." msgstr "รหัสนี้ไม่มีอยู่จริง" -#. Status shown under the browser sign-in code once its countdown reaches zero. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:68 -msgid "This code expired." -msgstr "รหัสนี้หมดอายุแล้ว" - #. Gift redemption error modal body for an invalid or already used code. #: src/features/gift/commands/GiftCommands.tsx:37 msgid "This code is invalid or already used." @@ -36075,6 +36156,11 @@ msgstr "ลิงก์รีเซ็ตนี้หมดอายุแล้ msgid "This shows how links appear: {linkPreviewExampleUrl}" msgstr "นี่คือตัวอย่างการแสดงลิงก์: {linkPreviewExampleUrl}" +#. Error in the browser when the sign-in request from the desktop app no longer exists, because it expired or the app cancelled it. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:20 +msgid "This sign-in request expired or was cancelled in the {productName} app. Start again from the app." +msgstr "คำขอลงชื่อเข้าใช้นี้หมดอายุหรือถูกยกเลิกในแอป {productName} โปรดลองเริ่มใหม่อีกครั้งจากแอป" + #. Label above the community a sticker comes from in the sticker info card. #: src/features/expressions/components/ExpressionInfoCard.tsx:75 msgid "This sticker is from" @@ -38520,6 +38606,11 @@ msgstr "ใช้ {url} ในตำแหน่งที่ต้องกา msgid "Use a dedicated modal to set a message history threshold date for members who don't have the {readMessageHistoryPermissionLabel} permission." msgstr "ใช้หน้าต่างเฉพาะเพื่อกำหนดวันที่จำกัดประวัติข้อความสำหรับสมาชิกที่ไม่มีสิทธิ์ {readMessageHistoryPermissionLabel}" +#. Text button on the browser approval page that goes back to choosing which account signs in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:149 +msgid "Use a different account" +msgstr "ใช้บัญชีอื่น" + #: src/features/auth/flow/instance_selector/InstancePickerRows.tsx:267 msgid "Use a self-hosted instance URL" msgstr "ใช้ URL อินสแตนซ์ที่โฮสต์เอง" @@ -39296,10 +39387,6 @@ msgstr "ยืนยันอีเมลของคุณเพื่อซื msgid "Verify your email to start DMs." msgstr "ยืนยันอีเมลของคุณเพื่อเริ่มส่งข้อความส่วนตัว" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:142 -msgid "Verifying code…" -msgstr "กำลังยืนยันรหัส…" - #: src/features/auth/components/pages/ResetPasswordPage.tsx:145 msgid "Verifying your reset link…" msgstr "กำลังยืนยันลิงก์รีเซ็ต…" @@ -40073,10 +40160,6 @@ msgstr "รอสักครู่ก่อนลบข้อความอื msgid "Wait between messages. Members with \"{bypassSlowmodePermissionLabel}\" can bypass this." msgstr "เว้นระยะเวลาระหว่างการส่งข้อความ สมาชิกที่มีสิทธิ์ \"{bypassSlowmodePermissionLabel}\" สามารถข้ามได้" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:445 -msgid "Waiting for browser approval." -msgstr "รอการอนุมัติจากเบราว์เซอร์" - #. Tooltip explaining that video / screen share controls are gated while the voice connection is not yet ready. #: src/features/voice/components/voice_connection_status/LocalParticipantControls.tsx:45 msgid "Waiting for connection..." @@ -40118,10 +40201,6 @@ msgstr "ปลุกเครื่อง" msgid "Warning" msgstr "คำเตือน" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:158 -msgid "Was this you?" -msgstr "ใช่คุณหรือเปล่า" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:243 msgctxt "us-state" @@ -40959,10 +41038,6 @@ msgstr "คุณเป็นเจ้าของ {premiumProductName} แบ msgid "You already have this connection." msgstr "คุณมีการเชื่อมต่อนี้อยู่แล้ว" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:87 -msgid "You are about to authorize an app to sign in to your account. Only continue if you initiated this request from a device you control." -msgstr "คุณกำลังจะอนุญาตให้แอปเข้าสู่ระบบบัญชีของคุณ ดำเนินการต่อเมื่อคุณเป็นผู้เริ่มคำขอนี้จากอุปกรณ์ที่คุณควบคุมเท่านั้น" - #. External link warning title. productName is the Fluxer product name. #: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:22 msgid "You are about to leave {productName}" @@ -41732,6 +41807,11 @@ msgstr "คุณใช้ราคาเดิมอยู่ ราคาป msgid "You're sending messages too quickly" msgstr "คุณส่งข้อความเร็วเกินไป" +#. Title of the browser page after the user approved signing in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:282 +msgid "You're signed in" +msgstr "คุณลงชื่อเข้าใช้แล้ว" + #. Status text on the screen-share hover popout shown to the local streamer. Lightly playful tone. #: src/features/voice/components/StreamWatchHoverPopout.tsx:43 msgid "You're streaming!" diff --git a/fluxer_app/src/features/i18n/locales/tr/messages.po b/fluxer_app/src/features/i18n/locales/tr/messages.po index 0b1dbcaa6..f2d357ea5 100644 --- a/fluxer_app/src/features/i18n/locales/tr/messages.po +++ b/fluxer_app/src/features/i18n/locales/tr/messages.po @@ -1573,7 +1573,7 @@ msgid "{imageCount, plural, one {# image} other {# images}}, {videoCount, plural msgstr "{imageCount, plural, one {# resim} other {# resim}}, {videoCount, plural, one {# video} other {# video}}" #. Explanation shown when the selected instance advertises no web app endpoint. Instance name is interpolated. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:76 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:61 msgid "{instanceName} does not publish a web address, so sign-in cannot be handed to a browser." msgstr "{instanceName} bir web adresi yayınlamıyor, bu nedenle oturum açma işlemi tarayıcıya devredilemez." @@ -2777,14 +2777,6 @@ msgstr "zengin bir gömülü içerik veya bağlantı önizlemesi (yüklenen bir msgid "A separate profile for each community" msgstr "Her topluluk için ayrı bir profil" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:164 -msgid "A sign-in request was made for your account. Only approve if you initiated it." -msgstr "Hesabınız için bir oturum açma isteği yapıldı. Yalnızca siz başlattıysanız onaylayın." - -#: src/features/auth/flow/HandoffApprovalFlow.tsx:162 -msgid "A sign-in request was made from the following device. Only approve if you recognize it." -msgstr "Şu cihazdan bir oturum açma isteği yapıldı. Yalnızca tanıyorsanız onaylayın." - #. Description for has:sticker. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:51 msgid "a sticker" @@ -4811,10 +4803,6 @@ msgstr "Tüm topluluklara uygula" msgid "Approval required" msgstr "Onay gerekli" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:206 -msgid "Approve" -msgstr "Onayla" - #. Hint under the sign-in option on fluxer.com that pairs a newly installed app with the old installed app. productName is the app name. #: src/features/auth/flow/AuthLoginLayout.tsx:101 msgid "Approve this app from the {productName} app you already use. No password needed." @@ -7873,6 +7861,11 @@ msgstr "Erişim kontrol ediliyor..." msgid "Checking screen recording permission..." msgstr "Ekran kaydı izni kontrol ediliyor..." +#. Title while the browser looks up the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:224 +msgid "Checking the sign-in request…" +msgstr "Giriş isteği kontrol ediliyor…" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -8847,6 +8840,11 @@ msgstr "Kod blokları" msgid "Code expired" msgstr "Kodun süresi doldu" +#. Label of the field in the browser where the user types the 12-character code shown in the desktop or mobile app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:28 +msgid "Code from the {productName} app" +msgstr "{productName} uygulamasından gelen kod" + #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 @@ -9348,7 +9346,6 @@ msgstr "{premiumProductName} rozetinizi diğer kullanıcılardan tamamen gizleyi #: src/features/auth/components/pages/SsoCallbackPage.tsx:256 #: src/features/auth/components/pages/SsoCallbackPage.tsx:322 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:216 msgid "Completing sign-in…" msgstr "Oturum açılıyor…" @@ -9782,7 +9779,6 @@ msgstr "Bağlam menüleri sol tıklama (düğmelerde) veya sağ tıklama (diğer #: src/features/auth/components/modals/DeviceRevokeModal.tsx:77 #: src/features/auth/components/modals/PasskeyPinModal.tsx:111 #: src/features/auth/components/pages/oauth_authorize_page/OAuthAccountStep.tsx:36 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/connection/components/modals/AddConnectionModal.tsx:384 #: src/features/i18n/utils/CommonMessageDescriptors.ts:726 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:413 @@ -9790,6 +9786,11 @@ msgstr "Bağlam menüleri sol tıklama (düğmelerde) veya sağ tıklama (diğer msgid "Continue" msgstr "Devam et" +#. Title in the desktop app while it waits for the user to sign in on the browser page it opened. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:177 +msgid "Continue in your browser" +msgstr "Tarayıcıda devam et" + #. Button in the gift time confirmation that proceeds to subscription checkout. #: src/features/app/components/dialogs/components/plutonium/hooks/useCheckoutActions.tsx:145 msgid "Continue to checkout" @@ -10437,7 +10438,7 @@ msgid "Couldn't close DM" msgstr "DM kapatılamadı" #. Desktop handoff flow error shown when finalizing the sign-in fails after a valid code. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:21 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:34 msgid "Couldn't complete sign-in. Try again." msgstr "Oturum açılamadı. Tekrar deneyin." @@ -10831,6 +10832,11 @@ msgstr "{blueskyProviderName} yetkilendirmesi başlatılamadı" msgid "Couldn't start checkout" msgstr "Ödeme başlatılamadı" +#. Shown in the desktop app when the browser sign-in request could not be created. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:66 +msgid "Couldn't start signing in with your browser." +msgstr "Tarayıcı ile oturum açma işlemi başlatılamadı." + #. Toast error shown when creating a new account connection fails. #: src/features/connection/commands/ConnectionCommands.ts:27 msgid "Couldn't start the connection" @@ -10942,7 +10948,7 @@ msgid "Couldn't upload banner" msgstr "Banner yüklenemedi" #. Desktop handoff flow error shown when verifying the pairing code fails for an unexpected reason. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:17 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:30 msgid "Couldn't verify that code. Try again." msgstr "Bu kod doğrulanamadı. Tekrar deneyin." @@ -12503,7 +12509,6 @@ msgstr "Yoğun düzen" #. Short label in the settings dialog permission components. Keep the tone plain and specific. #: src/features/app/components/dialogs/shared/PermissionComponents.tsx:16 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:203 msgid "Deny" msgstr "Reddet" @@ -14910,15 +14915,16 @@ msgstr "Kimlik doğrulayıcı uygulamanızdaki {digitCount} haneli kodu veya yed msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Kimlik doğrulayıcı uygulamanızdaki {digitCount} haneli kodu girin." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:108 -msgid "Enter the code" -msgstr "Kodu girin" - #. Inline validation error on the verification step of the DSA report flow when the code field is empty. #: src/features/moderation/components/pages/ReportPage.tsx:74 msgid "Enter the code before continuing." msgstr "Devam etmeden önce kodu girin." +#. Title of the browser page where the user types the 12-character code the app shows under Signing in on another device. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +msgid "Enter the code from the {PRODUCT_NAME} app" +msgstr "{PRODUCT_NAME} uygulamasından kodu girin" + #. Body text in the authentication sudo verification modal. Keep the tone plain and specific. #: src/features/auth/components/modals/SudoVerificationModal.tsx:56 msgid "Enter the code from your authenticator app." @@ -14933,10 +14939,6 @@ msgstr "Mevcut e-posta adresinize gönderilen kodu girin." msgid "Enter the code sent to your email address." msgstr "E-posta adresinize gönderilen kodu girin." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:111 -msgid "Enter the code shown in the app to continue." -msgstr "Devam etmek için uygulamada gösterilen kodu girin." - #: src/features/user/components/modals/BouncedEmailChangeModal.tsx:157 #: src/features/user/components/modals/EmailChangeModal.tsx:244 msgid "Enter the code we emailed to your new address." @@ -14959,6 +14961,11 @@ msgstr "Kullanmak istediğiniz yeni e-postayı girin. Bir sonraki adımda oraya msgid "Enter the PIN for your security key to continue." msgstr "Devam etmek için güvenlik anahtarınızın PIN'ini girin." +#. Title in the desktop app above the code the user types into a browser on another device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:228 +msgid "Enter this code in your browser" +msgstr "Tarayıcınızda bu kodu girin" + #: src/features/auth/flow/HandoffCodeDisplay.tsx:132 msgid "Enter this code in your browser to complete sign-in." msgstr "Girişi tamamlamak için bu kodu tarayıcınıza girin." @@ -15362,7 +15369,7 @@ msgstr "{earliest} ile {latest} arasında sona eriyor" msgid "Expires in {remaining}s" msgstr "{remaining} sn içinde sona eriyor" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:374 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:250 msgid "Expires in {remainingSeconds}s" msgstr "{remainingSeconds} s sonra sona eriyor" @@ -16165,7 +16172,7 @@ msgid "Fluxer" msgstr "Fluxer" #. Status shown when browser sign-in status polling gives up after repeated failures. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:72 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:57 msgid "Fluxer stopped checking whether the browser approved this sign-in. It didn't lose your code." msgstr "Fluxer, tarayıcının bu oturum açma işlemini onaylayıp onaylamadığını kontrol etmeyi bıraktı. Kodunuzu kaybetmedi." @@ -16952,8 +16959,6 @@ msgstr "Paylaşılabilir bir bağlantı oluşturun veya birleştirilmiş özel C msgid "Generate invite link" msgstr "Davet bağlantısı oluştur" -#. Button label that replaces an expired browser sign-in code with a fresh one. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:64 #: src/features/auth/flow/HandoffCodeDisplay.tsx:117 msgid "Generate new code" msgstr "Yeni kod oluştur" @@ -17348,6 +17353,16 @@ msgstr "Geri dönün ve geçerli bir e-posta adresi girin." msgid "Go back to {productName} to continue." msgstr "{productName}'e geri dönerek devam edin." +#. Shown after approving a sign-in for an app on another device, which signs in by itself shortly. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:292 +msgid "Go back to the {PRODUCT_NAME} app. It finishes signing in on its own." +msgstr "{PRODUCT_NAME} uygulamasına geri dön. Otomatik olarak oturum açma işlemi tamamlanacak." + +#. Shown after approving, when the browser has already handed the sign-in back to the desktop app. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:288 +msgid "Go back to the {PRODUCT_NAME} app. You can close this tab." +msgstr "{PRODUCT_NAME} uygulamasına geri dön. Bu sekmeyi kapatabilirsin." + #. Accessible label for the community row of an expression info card, which opens a community the viewer is already a member of. {communityName} is the community name. #: src/features/expressions/components/ExpressionInfoCard.tsx:89 msgid "Go to {communityName}" @@ -19295,11 +19310,6 @@ msgstr "Geçersiz JSON. Yukarıdaki URL'den gelen yanıtın tamamını yapışt msgid "Invalid or expired code" msgstr "Geçersiz veya süresi dolmuş kod" -#. Desktop handoff flow error shown when the entered pairing code is invalid or expired. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:13 -msgid "Invalid or expired code. Try again." -msgstr "Geçersiz veya süresi dolmuş kod. Tekrar deneyin." - #. Short label in the authentication authorize flow. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/state/useAuthorizeFlow.ts:82 msgid "Invalid redirect_uri" @@ -20876,7 +20886,7 @@ msgstr "Yerel saat biçimi" msgid "Localization" msgstr "Yerelleştirme" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:192 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:109 #: src/features/user/components/modals/tabs/DevicesTab.tsx:152 msgid "Location" msgstr "Konum" @@ -21034,6 +21044,11 @@ msgstr "{userName} grubun sahibi olsun mu? Sahiplik ayrıcalıklarınızı kaybe msgid "Make group owner" msgstr "Grup sahibi yap" +#. Shown above the code on the browser approval page when the app cannot be signed in automatically. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:253 +msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." +msgstr "{PRODUCT_NAME} uygulamasındaki bu kodu kontrol edin." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" @@ -24668,6 +24683,11 @@ msgstr "<0>{listPriceEffectiveDate} tarihinde aboneliğiniz {listPriceCurren msgid "On click" msgstr "Tıklayınca" +#. One line explanation in the desktop app above the code. signInAddress is the web address of the sign-in page, such as web.fluxer.app/login?handoff=1. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:236 +msgid "On your other device, sign in at {signInAddress} and enter this code when asked." +msgstr "Diğer cihazınızda {signInAddress} adresinden giriş yapın ve istendiğinde bu kodu girin." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:715 msgid "Once deleted, the application and its credentials are permanently removed." msgstr "Uygulama ve kimlik bilgileri silindikten sonra kalıcı olarak kaldırılır." @@ -24733,6 +24753,11 @@ msgstr "Yalnızca @bahsedilenler" msgid "Only applies on wide screens." msgstr "Yalnızca geniş ekranlarda geçerlidir." +#. Warning under the title of the browser approval page, so people do not approve a sign-in someone else started. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:245 +msgid "Only continue if you started this sign-in on a device you control." +msgstr "Yalnızca kontrol ettiğiniz bir cihazda bu oturum açmayı başlattıysanız devam edin." + #. Body copy in the mature content check modal. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:32 msgid "Only credit cards are accepted. Debit and prepaid cards cannot be used for the mature content check." @@ -24921,6 +24946,11 @@ msgstr "{landmarkName} öğesini aç" msgid "Open {premiumProductFullName}" msgstr "{premiumProductFullName} sayfasını aç" +#. Button on the browser page after approving that opens the desktop app again if it did not come to the front. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:304 +msgid "Open {PRODUCT_NAME}" +msgstr "{PRODUCT_NAME}'i Aç" + #. Button label that opens the desktop app. productName is the app name. #. Button that hands SSO sign-in back to the mobile app. productName is the app name. #: src/features/auth/components/pages/SsoCallbackPage.tsx:47 @@ -25011,12 +25041,15 @@ msgstr "Banner seçeneklerini aç" msgid "Open bookmarks" msgstr "Yer işaretlerini aç" -#. Button label that opens the browser sign-in handoff page. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:56 #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:184 msgid "Open browser" msgstr "Tarayıcıyı aç" +#. Button in the desktop app that reopens the browser sign-in page while the app waits for the browser. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:53 +msgid "Open browser again" +msgstr "Tarayıcıyı tekrar aç" + #. Primary button in the screen-share picker on web. Hands off to the browser's native getDisplayMedia picker. #: src/features/voice/components/modals/ScreenSharePickerModal.tsx:209 msgid "Open browser picker" @@ -25392,10 +25425,6 @@ msgstr "Ses ve video ayarlarını aç" msgid "Open with {accountName} on {instanceName}" msgstr "{accountName} ile {instanceName} üzerinde aç" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:414 -msgid "Open your browser to finish signing in." -msgstr "Oturum açmayı tamamlamak için tarayıcınızı açın." - #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:137 msgid "Open your browser, sign in, then enter the code below to link your account." msgstr "Tarayıcınızı açın, oturum açın ve hesabınızı bağlamak için aşağıdaki kodu girin." @@ -25421,7 +25450,7 @@ msgstr "Üyeler sayfasını açar. Açmak için Boşluk veya Enter tuşuna bası #. Short label in the language tab. Keep it concise. #. Spellcheck engine option in the textarea spellcheck submenu. Uses the host operating system spellchecker. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:79 #: src/features/user/components/modals/tabs/LanguageTab.tsx:110 msgid "Operating system" @@ -26439,7 +26468,7 @@ msgstr "Plan" msgid "Plans, perks, gifts and your subscription all live on one page." msgstr "Planlar, avantajlar, hediyeler ve aboneliğiniz tek bir sayfada." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:172 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:89 msgid "Platform" msgstr "Platform" @@ -31859,11 +31888,6 @@ msgstr "Sohbeti göster" msgid "Show chat with {count, plural, one {# unread message} other {# unread messages}}" msgstr "{count, plural, one {# okunmamış mesajla sohbeti göster} other {# okunmamış mesajla sohbeti göster}}" -#. Button label that opens the manual browser handoff code fallback. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:60 -msgid "Show code" -msgstr "Kodu göster" - #. Developer voice status menu option for displaying the voice connection identifier. #: src/features/voice/components/voice_connection_status/VoiceConnectionStatusInner.tsx:76 msgid "Show connection ID" @@ -32306,7 +32330,9 @@ msgstr "Banner'ı topluluk başlığının altındaki kendi bölümünde göster msgid "Sidebar" msgstr "Kenar çubuğu" +#. Button in the browser that approves signing in to the desktop or mobile app that asked for it. #. Generic authentication action label. Use for buttons, links, page titles, and accessible labels. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:33 #: src/features/i18n/utils/CommonMessageDescriptors.ts:79 msgid "Sign in" msgstr "Giriş yap" @@ -32321,10 +32347,35 @@ msgstr "Tekrar giriş yap" msgid "Sign in again as {accountLabel}" msgstr "{accountLabel} olarak tekrar giriş yap" +#. Shown in the desktop app while it waits for the browser. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:193 +msgid "Sign in to {instanceName} in your browser and confirm. This app finishes signing in on its own." +msgstr "Tarayıcınızda {instanceName}'e giriş yapın ve onaylayın. Bu uygulama kendi kendine giriş yapmayı tamamlar." + +#. Shown in the desktop app above the code when the browser cannot return the sign-in automatically. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:189 +msgid "Sign in to {instanceName} in your browser, and check that it shows this code:" +msgstr "Tarayıcınızda {instanceName} hesabınıza giriş yapın ve şu kodu gösterdiğinden emin olun:" + #: src/features/auth/flow/GiftHeader.tsx:33 msgid "Sign in to claim your gift" msgstr "Hediyenizi almak için giriş yapın" +#. Title of the browser page where the user approves signing in to an app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:71 +msgid "Sign in to the {PRODUCT_NAME} app" +msgstr "{PRODUCT_NAME} uygulamasına giriş yap" + +#. Title of the browser page where the user approves signing in to the desktop app that opened it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:58 +msgid "Sign in to the {PRODUCT_NAME} desktop app" +msgstr "{PRODUCT_NAME} masaüstü uygulamasına giriş yap" + +#. Title of the browser page where the user approves signing in to the mobile app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:65 +msgid "Sign in to the {PRODUCT_NAME} mobile app" +msgstr "{PRODUCT_NAME} mobil uygulamasına giriş yap" + #. Action label that starts passkey authentication. #: src/features/auth/AuthMessageDescriptors.ts:13 msgid "Sign in with a passkey" @@ -32403,14 +32454,10 @@ msgstr "Hesabınızdan diğer cihazların oturumunu kapatın" msgid "Sign out?" msgstr "Çıkış yapılsın mı?" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:234 -msgid "Sign-in approved" -msgstr "Giriş onaylandı" - -#. Short label in the authentication handoff approval flow. Keep the tone plain and specific. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:26 -msgid "Sign-in code" -msgstr "Giriş kodu" +#. Title of the browser page after the user cancelled the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:322 +msgid "Sign-in cancelled" +msgstr "Giriş iptal edildi" #. Section title for email address and password controls in the account security tab. Keep it concise. #: src/features/user/components/modals/tabs/account_security_tab/AccountSecuritySections.tsx:23 @@ -32433,10 +32480,6 @@ msgstr "Oturum açma akışı" msgid "Sign-in method" msgstr "Oturum açma yöntemi" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:84 -msgid "Sign-in request" -msgstr "Giriş isteği" - #. Aria label on the signal-strength icon shown while the first latency sample is still pending. #: src/features/voice/components/SignalStrengthIcon.tsx:16 msgid "Signal strength loading" @@ -32453,6 +32496,21 @@ msgstr "Oturum açıldı" msgid "Signed-in devices" msgstr "Oturum açmış cihazlar" +#. Shown on the browser approval page above the buttons. name is the display name of the account that will be signed in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:137 +msgid "Signing in as {name}" +msgstr "{name} olarak oturum açılıyor" + +#. Text button in the desktop app that shows a code to type into a browser on a different device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:207 +msgid "Signing in on another device?" +msgstr "Başka bir cihazda oturum mu açıyorsunuz?" + +#. Title while the browser approves the sign-in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:228 +msgid "Signing in…" +msgstr "Giriş yapılıyor…" + #. Label for Bluesky OAuth signing key ID input. #: src/features/app/components/setup/SetupWizardSteps.tsx:1161 msgid "Signing key ID" @@ -33504,6 +33562,8 @@ msgstr "Mikrofon testini başlat" msgid "Start minimized" msgstr "Küçültülmüş olarak başlat" +#. Button on the browser page after cancelling that goes back to choosing an account. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:337 #: src/features/moderation/components/report/ReportStepDetails.tsx:326 #: src/features/moderation/components/report/ReportStepEmail.tsx:97 #: src/features/moderation/components/report/ReportStepVerification.tsx:134 @@ -34910,6 +34970,11 @@ msgstr "Tayca" msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "{productName} uygulamasını güvenli tutmaya yardımcı olduğunuz için teşekkür ederiz. Raporunuzu en kısa sürede inceleyeceğiz." +#. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 +msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." +msgstr "Bu kod {instanceHost} üzerinde geçerli değil. Kodu {productName} uygulamasında kontrol edip tekrar deneyin." + #. Body of the passkey page after the passkey prompt failed or was dismissed. Keep plain. #: src/features/auth/passkey_migration/PasskeyBridgePage.tsx:36 msgid "That didn't work. Try again or cancel." @@ -34953,11 +35018,6 @@ msgstr "Bu mesaj silinemedi" msgid "That message is gone, or you lost access to the conversation." msgstr "Bu mesaj silinmiş veya sohbete erişiminizi kaybetmişsiniz." -#. Error shown when a browser sign-in handoff code expires before it is approved. -#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 -msgid "That sign-in code expired. Try again." -msgstr "Bu oturum açma kodu süresi doldu. Tekrar deneyin." - #. End-of-list line in the saved messages popout after every bookmark has been shown. #. End-of-list line on the saved messages page after every bookmark has been shown. #: src/features/messaging/components/pages/SavedMessagesPage.tsx:35 @@ -34965,6 +35025,21 @@ msgstr "Bu oturum açma kodu süresi doldu. Tekrar deneyin." msgid "That's all of them." msgstr "Hepsi bu kadar." +#. Warning on the browser approval page when the app asked for a different account than the one chosen. requestedIdentifier is the email or username the app asked for, name is the chosen account's display name. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:131 +msgid "The {PRODUCT_NAME} app asked to sign in as {requestedIdentifier}, but you chose {name}." +msgstr "{PRODUCT_NAME} uygulaması {requestedIdentifier} olarak oturum açmak istedi, ancak siz {name} hesabını seçtiniz." + +#. Explains where the code comes from, under the title of the browser page where it is typed. Signing in on another device is the label of a button in the app and must match its translation. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:187 +msgid "The {PRODUCT_NAME} app on your other device shows it under Signing in on another device. Only enter a code from a device you control." +msgstr "Diğer cihazınızdaki {PRODUCT_NAME} uygulaması, başka bir cihazda oturum açma bölümünde bunu gösterir. Yalnızca kontrol ettiğiniz bir cihazdan kod girin." + +#. Shown after the user cancelled the sign-in request in the browser. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:327 +msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." +msgstr "{PRODUCT_NAME} uygulamasına giriş yapılmamıştı. Bu sekmeyi kapatabilirsiniz." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -34983,10 +35058,6 @@ msgstr "Uygulama çöktü" msgid "The app has crashed. Checking for updates that might fix this issue…" msgstr "Uygulama çöktü. Bu sorunu çözebilecek güncellemeler kontrol ediliyor…" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:237 -msgid "The app should now be signed in to your account." -msgstr "Uygulamada hesabınıza giriş yapılmış olmalı." - #. Activity log detail line under a lifted ban, for a temporary ban that had already ended on its own before it was lifted. A ban is the community ban, not the feature that blocks a user. {date} is when the ban ended, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:55 msgid "The ban had already expired on {date}" @@ -35184,6 +35255,16 @@ msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "Ekran paylaşımı kaynağı video göndermeyi durdurdu, bu nedenle ekran paylaşımınız durduruldu." +#. Error shown in the desktop app when a browser sign-in request expires before it is approved in the browser. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 +msgid "The sign-in request expired before your browser approved it." +msgstr "Oturum açma isteğiniz tarayıcınız onaylamadan süresi doldu." + +#. Error shown in the desktop app when the user pressed Cancel on the browser sign-in page. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:14 +msgid "The sign-in was cancelled in your browser." +msgstr "Tarayıcıda oturum açma işlemi iptal edildi." + #. Activity log detail line under a deleted sticker, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the sticker, shown as a clickable user chip. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts:100 msgid "The sticker was uploaded by {user}" @@ -35408,6 +35489,11 @@ msgstr "Üçüncü taraf" msgid "This account can't be blocked." msgstr "Bu hesap engellenemez." +#. Error in the browser when the chosen account belongs to a different server than the app that asked to sign in. accountHost and requestHost are server addresses. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:38 +msgid "This account is on {accountHost}, but the {productName} app is signing in to {requestHost}. Choose an account on {requestHost}." +msgstr "Bu hesap {accountHost} üzerinde, ancak {productName} uygulaması {requestHost} adresine giriş yapıyor. Lütfen {requestHost} adresindeki bir hesabı seçin." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:418 msgid "This action cannot be undone. All associated data, including the bot user, will be permanently deleted." msgstr "Bu eylem geri alınamaz. Bot kullanıcısı dahil olmak üzere ilgili tüm veriler kalıcı olarak silinecek." @@ -35551,11 +35637,6 @@ msgstr "Bu işlem, premium türü, faturalandırma meta verileri ve geçersiz k msgid "This code doesn't exist." msgstr "Bu kod mevcut değil." -#. Status shown under the browser sign-in code once its countdown reaches zero. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:68 -msgid "This code expired." -msgstr "Bu kodun süresi doldu." - #. Gift redemption error modal body for an invalid or already used code. #: src/features/gift/commands/GiftCommands.tsx:37 msgid "This code is invalid or already used." @@ -36075,6 +36156,11 @@ msgstr "Bu sıfırlama bağlantısının süresi dolmuş. Sıfırlama bağlantı msgid "This shows how links appear: {linkPreviewExampleUrl}" msgstr "Bağlantılar şu şekilde görünür: {linkPreviewExampleUrl}" +#. Error in the browser when the sign-in request from the desktop app no longer exists, because it expired or the app cancelled it. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:20 +msgid "This sign-in request expired or was cancelled in the {productName} app. Start again from the app." +msgstr "Bu oturum açma isteği {productName} uygulamasında süresi doldu veya iptal edildi. Uygulamadan tekrar başlatın." + #. Label above the community a sticker comes from in the sticker info card. #: src/features/expressions/components/ExpressionInfoCard.tsx:75 msgid "This sticker is from" @@ -38520,6 +38606,11 @@ msgstr "Görsel URL'sinin ekleneceği yere {url} yazın." msgid "Use a dedicated modal to set a message history threshold date for members who don't have the {readMessageHistoryPermissionLabel} permission." msgstr "{readMessageHistoryPermissionLabel} iznine sahip olmayan üyeler için mesaj geçmişi eşik tarihini ayrı bir pencerede ayarlayın." +#. Text button on the browser approval page that goes back to choosing which account signs in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:149 +msgid "Use a different account" +msgstr "Farklı bir hesap kullan" + #: src/features/auth/flow/instance_selector/InstancePickerRows.tsx:267 msgid "Use a self-hosted instance URL" msgstr "Kendi kendine barındırılan bir örnek URL'si kullanın" @@ -39296,10 +39387,6 @@ msgstr "{premiumProductFullName} satın almak için e-postanızı doğrulayın." msgid "Verify your email to start DMs." msgstr "DM başlatmak için e-postanızı doğrulayın." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:142 -msgid "Verifying code…" -msgstr "Kod doğrulanıyor…" - #: src/features/auth/components/pages/ResetPasswordPage.tsx:145 msgid "Verifying your reset link…" msgstr "Sıfırlama bağlantınız doğrulanıyor…" @@ -40073,10 +40160,6 @@ msgstr "Daha fazla mesaj silmeden önce biraz bekleyin." msgid "Wait between messages. Members with \"{bypassSlowmodePermissionLabel}\" can bypass this." msgstr "Mesajlar arasında bekleme süresi. \"{bypassSlowmodePermissionLabel}\" iznine sahip üyeler bunu atlayabilir." -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:445 -msgid "Waiting for browser approval." -msgstr "Tarayıcı onayını bekliyor." - #. Tooltip explaining that video / screen share controls are gated while the voice connection is not yet ready. #: src/features/voice/components/voice_connection_status/LocalParticipantControls.tsx:45 msgid "Waiting for connection..." @@ -40118,10 +40201,6 @@ msgstr "Uyandır" msgid "Warning" msgstr "Uyarı" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:158 -msgid "Was this you?" -msgstr "Bu siz miydiniz?" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:243 msgctxt "us-state" @@ -40959,10 +41038,6 @@ msgstr "Zaten ömür boyu {premiumProductName} sahibisiniz" msgid "You already have this connection." msgstr "Bu bağlantı zaten mevcut." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:87 -msgid "You are about to authorize an app to sign in to your account. Only continue if you initiated this request from a device you control." -msgstr "Bir uygulamanın hesabınıza giriş yapmasına izin vermek üzeresiniz. Yalnızca bu isteği kendi kontrolünüzdeki bir cihazdan başlattıysanız devam edin." - #. External link warning title. productName is the Fluxer product name. #: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:22 msgid "You are about to leave {productName}" @@ -41732,6 +41807,11 @@ msgstr "Eski bir fiyattan yararlanıyorsunuz. Bu planın güncel fiyatı {curren msgid "You're sending messages too quickly" msgstr "Çok hızlı mesaj gönderiyorsunuz" +#. Title of the browser page after the user approved signing in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:282 +msgid "You're signed in" +msgstr "Giriş yaptınız" + #. Status text on the screen-share hover popout shown to the local streamer. Lightly playful tone. #: src/features/voice/components/StreamWatchHoverPopout.tsx:43 msgid "You're streaming!" diff --git a/fluxer_app/src/features/i18n/locales/uk/messages.po b/fluxer_app/src/features/i18n/locales/uk/messages.po index 0a39ddc88..3c47c8c1e 100644 --- a/fluxer_app/src/features/i18n/locales/uk/messages.po +++ b/fluxer_app/src/features/i18n/locales/uk/messages.po @@ -1573,7 +1573,7 @@ msgid "{imageCount, plural, one {# image} other {# images}}, {videoCount, plural msgstr "{imageCount, plural, one {# зображення} few {# зображення} many {# зображень} other {# зображення}}, {videoCount, plural, one {# відео} few {# відео} many {# відео} other {# відео}}" #. Explanation shown when the selected instance advertises no web app endpoint. Instance name is interpolated. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:76 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:61 msgid "{instanceName} does not publish a web address, so sign-in cannot be handed to a browser." msgstr "{instanceName} не публікує веб-адресу, тому вхід неможливо передати до браузера." @@ -2777,14 +2777,6 @@ msgstr "розширений вбудований вміст або попере msgid "A separate profile for each community" msgstr "Окремий профіль для кожної спільноти" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:164 -msgid "A sign-in request was made for your account. Only approve if you initiated it." -msgstr "На ваш обліковий запис надійшов запит на вхід. Схвалюйте, лише якщо ви його ініціювали." - -#: src/features/auth/flow/HandoffApprovalFlow.tsx:162 -msgid "A sign-in request was made from the following device. Only approve if you recognize it." -msgstr "Запит на вхід надійшов з такого пристрою. Схвалюйте, лише якщо ви його впізнаєте." - #. Description for has:sticker. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:51 msgid "a sticker" @@ -4811,10 +4803,6 @@ msgstr "Застосувати до всіх спільнот" msgid "Approval required" msgstr "Потрібне схвалення" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:206 -msgid "Approve" -msgstr "Схвалити" - #. Hint under the sign-in option on fluxer.com that pairs a newly installed app with the old installed app. productName is the app name. #: src/features/auth/flow/AuthLoginLayout.tsx:101 msgid "Approve this app from the {productName} app you already use. No password needed." @@ -7873,6 +7861,11 @@ msgstr "Перевірка доступу..." msgid "Checking screen recording permission..." msgstr "Перевіряємо дозвіл на запис екрана…" +#. Title while the browser looks up the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:224 +msgid "Checking the sign-in request…" +msgstr "Перевірка запиту на вхід…" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -8847,6 +8840,11 @@ msgstr "Блоки коду" msgid "Code expired" msgstr "Термін дії коду закінчився" +#. Label of the field in the browser where the user types the 12-character code shown in the desktop or mobile app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:28 +msgid "Code from the {productName} app" +msgstr "Код із програми {productName}" + #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 @@ -9348,7 +9346,6 @@ msgstr "Повністю приховати свій значок {premiumProduc #: src/features/auth/components/pages/SsoCallbackPage.tsx:256 #: src/features/auth/components/pages/SsoCallbackPage.tsx:322 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:216 msgid "Completing sign-in…" msgstr "Завершення входу…" @@ -9782,7 +9779,6 @@ msgstr "Контекстні меню можна відкрити лівим к #: src/features/auth/components/modals/DeviceRevokeModal.tsx:77 #: src/features/auth/components/modals/PasskeyPinModal.tsx:111 #: src/features/auth/components/pages/oauth_authorize_page/OAuthAccountStep.tsx:36 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/connection/components/modals/AddConnectionModal.tsx:384 #: src/features/i18n/utils/CommonMessageDescriptors.ts:726 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:413 @@ -9790,6 +9786,11 @@ msgstr "Контекстні меню можна відкрити лівим к msgid "Continue" msgstr "Продовжити" +#. Title in the desktop app while it waits for the user to sign in on the browser page it opened. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:177 +msgid "Continue in your browser" +msgstr "Продовжити в браузері" + #. Button in the gift time confirmation that proceeds to subscription checkout. #: src/features/app/components/dialogs/components/plutonium/hooks/useCheckoutActions.tsx:145 msgid "Continue to checkout" @@ -10437,7 +10438,7 @@ msgid "Couldn't close DM" msgstr "Не вдалося закрити приватний чат" #. Desktop handoff flow error shown when finalizing the sign-in fails after a valid code. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:21 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:34 msgid "Couldn't complete sign-in. Try again." msgstr "Не вдалося завершити вхід. Спробуйте ще раз." @@ -10831,6 +10832,11 @@ msgstr "Не вдалося розпочати авторизацію {blueskyPr msgid "Couldn't start checkout" msgstr "Не вдалося розпочати оформлення замовлення" +#. Shown in the desktop app when the browser sign-in request could not be created. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:66 +msgid "Couldn't start signing in with your browser." +msgstr "Не вдалося розпочати вхід через браузер." + #. Toast error shown when creating a new account connection fails. #: src/features/connection/commands/ConnectionCommands.ts:27 msgid "Couldn't start the connection" @@ -10942,7 +10948,7 @@ msgid "Couldn't upload banner" msgstr "Не вдалося завантажити банер" #. Desktop handoff flow error shown when verifying the pairing code fails for an unexpected reason. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:17 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:30 msgid "Couldn't verify that code. Try again." msgstr "Не вдалося перевірити цей код. Спробуйте ще раз." @@ -12503,7 +12509,6 @@ msgstr "Щільний макет" #. Short label in the settings dialog permission components. Keep the tone plain and specific. #: src/features/app/components/dialogs/shared/PermissionComponents.tsx:16 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:203 msgid "Deny" msgstr "Заборонити" @@ -14910,15 +14915,16 @@ msgstr "Введіть {digitCount}-значний код із застосун msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Введіть {digitCount}-значний код із застосунку автентифікації." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:108 -msgid "Enter the code" -msgstr "Введіть код" - #. Inline validation error on the verification step of the DSA report flow when the code field is empty. #: src/features/moderation/components/pages/ReportPage.tsx:74 msgid "Enter the code before continuing." msgstr "Введіть код, перш ніж продовжити." +#. Title of the browser page where the user types the 12-character code the app shows under Signing in on another device. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +msgid "Enter the code from the {PRODUCT_NAME} app" +msgstr "Введіть код із програми {PRODUCT_NAME}" + #. Body text in the authentication sudo verification modal. Keep the tone plain and specific. #: src/features/auth/components/modals/SudoVerificationModal.tsx:56 msgid "Enter the code from your authenticator app." @@ -14933,10 +14939,6 @@ msgstr "Введіть код, надісланий на вашу поточну msgid "Enter the code sent to your email address." msgstr "Введіть код, надісланий на вашу електронну адресу." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:111 -msgid "Enter the code shown in the app to continue." -msgstr "Введіть код, показаний у застосунку, щоб продовжити." - #: src/features/user/components/modals/BouncedEmailChangeModal.tsx:157 #: src/features/user/components/modals/EmailChangeModal.tsx:244 msgid "Enter the code we emailed to your new address." @@ -14959,6 +14961,11 @@ msgstr "Введіть нову електронну адресу, яку хоч msgid "Enter the PIN for your security key to continue." msgstr "Введіть PIN-код вашого ключа безпеки, щоб продовжити." +#. Title in the desktop app above the code the user types into a browser on another device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:228 +msgid "Enter this code in your browser" +msgstr "Введіть цей код у браузері" + #: src/features/auth/flow/HandoffCodeDisplay.tsx:132 msgid "Enter this code in your browser to complete sign-in." msgstr "Введіть цей код у своєму браузері, щоб завершити вхід." @@ -15362,7 +15369,7 @@ msgstr "Термін дії закінчується між {earliest} та {lat msgid "Expires in {remaining}s" msgstr "Закінчується через {remaining} с" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:374 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:250 msgid "Expires in {remainingSeconds}s" msgstr "Термін дії закінчується через {remainingSeconds}с" @@ -16165,7 +16172,7 @@ msgid "Fluxer" msgstr "Fluxer" #. Status shown when browser sign-in status polling gives up after repeated failures. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:72 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:57 msgid "Fluxer stopped checking whether the browser approved this sign-in. It didn't lose your code." msgstr "Fluxer припинив перевіряти, чи браузер схвалив цей вхід. Ваш код не втрачено." @@ -16952,8 +16959,6 @@ msgstr "Згенеруйте посилання для поширення або msgid "Generate invite link" msgstr "Згенерувати посилання-запрошення" -#. Button label that replaces an expired browser sign-in code with a fresh one. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:64 #: src/features/auth/flow/HandoffCodeDisplay.tsx:117 msgid "Generate new code" msgstr "Згенерувати новий код" @@ -17348,6 +17353,16 @@ msgstr "Поверніться та введіть дійсну електрон msgid "Go back to {productName} to continue." msgstr "Поверніться до {productName}, щоб продовжити." +#. Shown after approving a sign-in for an app on another device, which signs in by itself shortly. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:292 +msgid "Go back to the {PRODUCT_NAME} app. It finishes signing in on its own." +msgstr "Повернутися до програми {PRODUCT_NAME}. Вона самостійно завершить вхід." + +#. Shown after approving, when the browser has already handed the sign-in back to the desktop app. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:288 +msgid "Go back to the {PRODUCT_NAME} app. You can close this tab." +msgstr "Повернутися до програми {PRODUCT_NAME}. Цю вкладку можна закрити." + #. Accessible label for the community row of an expression info card, which opens a community the viewer is already a member of. {communityName} is the community name. #: src/features/expressions/components/ExpressionInfoCard.tsx:89 msgid "Go to {communityName}" @@ -19295,11 +19310,6 @@ msgstr "Недійсний JSON. Вставте повну відповідь з msgid "Invalid or expired code" msgstr "Недійсний або прострочений код" -#. Desktop handoff flow error shown when the entered pairing code is invalid or expired. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:13 -msgid "Invalid or expired code. Try again." -msgstr "Недійсний або прострочений код. Спробуйте ще раз." - #. Short label in the authentication authorize flow. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/state/useAuthorizeFlow.ts:82 msgid "Invalid redirect_uri" @@ -20876,7 +20886,7 @@ msgstr "Формат часу в регіоні" msgid "Localization" msgstr "Локалізація" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:192 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:109 #: src/features/user/components/modals/tabs/DevicesTab.tsx:152 msgid "Location" msgstr "Місцезнаходження" @@ -21034,6 +21044,11 @@ msgstr "Зробити {userName} власником групи? Ви втрат msgid "Make group owner" msgstr "Зробити власником групи" +#. Shown above the code on the browser approval page when the app cannot be signed in automatically. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:253 +msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." +msgstr "Переконайтеся, що цей код збігається з кодом у програмі {PRODUCT_NAME}." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" @@ -24668,6 +24683,11 @@ msgstr "З <0>{listPriceEffectiveDate} ваша підписка зміни msgid "On click" msgstr "При натисканні" +#. One line explanation in the desktop app above the code. signInAddress is the web address of the sign-in page, such as web.fluxer.app/login?handoff=1. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:236 +msgid "On your other device, sign in at {signInAddress} and enter this code when asked." +msgstr "На іншому пристрої увійдіть за адресою {signInAddress} і введіть цей код, коли буде запропоновано." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:715 msgid "Once deleted, the application and its credentials are permanently removed." msgstr "Після видалення застосунок та його облікові дані будуть назавжди видалені." @@ -24733,6 +24753,11 @@ msgstr "Лише згадки" msgid "Only applies on wide screens." msgstr "Застосовується лише на широких екранах." +#. Warning under the title of the browser approval page, so people do not approve a sign-in someone else started. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:245 +msgid "Only continue if you started this sign-in on a device you control." +msgstr "Продовжуйте, лише якщо ви розпочали цей вхід на пристрої, який контролюєте." + #. Body copy in the mature content check modal. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:32 msgid "Only credit cards are accepted. Debit and prepaid cards cannot be used for the mature content check." @@ -24921,6 +24946,11 @@ msgstr "Відкрити {landmarkName}" msgid "Open {premiumProductFullName}" msgstr "Відкрити {premiumProductFullName}" +#. Button on the browser page after approving that opens the desktop app again if it did not come to the front. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:304 +msgid "Open {PRODUCT_NAME}" +msgstr "Відкрити {PRODUCT_NAME}" + #. Button label that opens the desktop app. productName is the app name. #. Button that hands SSO sign-in back to the mobile app. productName is the app name. #: src/features/auth/components/pages/SsoCallbackPage.tsx:47 @@ -25011,12 +25041,15 @@ msgstr "Відкрити параметри банера" msgid "Open bookmarks" msgstr "Відкрити закладки" -#. Button label that opens the browser sign-in handoff page. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:56 #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:184 msgid "Open browser" msgstr "Відкрити браузер" +#. Button in the desktop app that reopens the browser sign-in page while the app waits for the browser. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:53 +msgid "Open browser again" +msgstr "Відкрити браузер знову" + #. Primary button in the screen-share picker on web. Hands off to the browser's native getDisplayMedia picker. #: src/features/voice/components/modals/ScreenSharePickerModal.tsx:209 msgid "Open browser picker" @@ -25392,10 +25425,6 @@ msgstr "Відкрити налаштування аудіо та відео" msgid "Open with {accountName} on {instanceName}" msgstr "Відкрити з {accountName} на {instanceName}" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:414 -msgid "Open your browser to finish signing in." -msgstr "Відкрийте браузер, щоб завершити вхід." - #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:137 msgid "Open your browser, sign in, then enter the code below to link your account." msgstr "Відкрийте браузер, увійдіть, а потім введіть код нижче, щоб зв'язати свій обліковий запис." @@ -25421,7 +25450,7 @@ msgstr "Відкриває сторінку учасників. Натисніт #. Short label in the language tab. Keep it concise. #. Spellcheck engine option in the textarea spellcheck submenu. Uses the host operating system spellchecker. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:79 #: src/features/user/components/modals/tabs/LanguageTab.tsx:110 msgid "Operating system" @@ -26439,7 +26468,7 @@ msgstr "План" msgid "Plans, perks, gifts and your subscription all live on one page." msgstr "Тарифи, переваги, подарунки та ваша підписка — усе це на одній сторінці." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:172 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:89 msgid "Platform" msgstr "Платформа" @@ -31859,11 +31888,6 @@ msgstr "Показати чат" msgid "Show chat with {count, plural, one {# unread message} other {# unread messages}}" msgstr "Показати чат ({count, plural, one {# непрочитане повідомлення} few {# непрочитані повідомлення} many {# непрочитаних повідомлень} other {# непрочитаних повідомлень}})" -#. Button label that opens the manual browser handoff code fallback. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:60 -msgid "Show code" -msgstr "Показати код" - #. Developer voice status menu option for displaying the voice connection identifier. #: src/features/voice/components/voice_connection_status/VoiceConnectionStatusInner.tsx:76 msgid "Show connection ID" @@ -32306,7 +32330,9 @@ msgstr "Показує банер в окремому розділі під за msgid "Sidebar" msgstr "Бічна панель" +#. Button in the browser that approves signing in to the desktop or mobile app that asked for it. #. Generic authentication action label. Use for buttons, links, page titles, and accessible labels. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:33 #: src/features/i18n/utils/CommonMessageDescriptors.ts:79 msgid "Sign in" msgstr "Увійти" @@ -32321,10 +32347,35 @@ msgstr "Увійти знову" msgid "Sign in again as {accountLabel}" msgstr "Увійдіть знову як {accountLabel}" +#. Shown in the desktop app while it waits for the browser. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:193 +msgid "Sign in to {instanceName} in your browser and confirm. This app finishes signing in on its own." +msgstr "Увійдіть до {instanceName} у браузері та підтвердьте. Цей додаток завершить вхід самостійно." + +#. Shown in the desktop app above the code when the browser cannot return the sign-in automatically. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:189 +msgid "Sign in to {instanceName} in your browser, and check that it shows this code:" +msgstr "Увійдіть до {instanceName} у браузері та переконайтеся, що там відображається цей код:" + #: src/features/auth/flow/GiftHeader.tsx:33 msgid "Sign in to claim your gift" msgstr "Увійдіть, щоб отримати подарунок" +#. Title of the browser page where the user approves signing in to an app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:71 +msgid "Sign in to the {PRODUCT_NAME} app" +msgstr "Увійти до програми {PRODUCT_NAME}" + +#. Title of the browser page where the user approves signing in to the desktop app that opened it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:58 +msgid "Sign in to the {PRODUCT_NAME} desktop app" +msgstr "Увійдіть у програму {PRODUCT_NAME} для комп’ютера" + +#. Title of the browser page where the user approves signing in to the mobile app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:65 +msgid "Sign in to the {PRODUCT_NAME} mobile app" +msgstr "Увійдіть до мобільного застосунку {PRODUCT_NAME}" + #. Action label that starts passkey authentication. #: src/features/auth/AuthMessageDescriptors.ts:13 msgid "Sign in with a passkey" @@ -32403,14 +32454,10 @@ msgstr "Вийти з інших пристроїв вашого обліков msgid "Sign out?" msgstr "Вийти?" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:234 -msgid "Sign-in approved" -msgstr "Вхід підтверджено" - -#. Short label in the authentication handoff approval flow. Keep the tone plain and specific. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:26 -msgid "Sign-in code" -msgstr "Код для входу" +#. Title of the browser page after the user cancelled the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:322 +msgid "Sign-in cancelled" +msgstr "Вхід скасовано" #. Section title for email address and password controls in the account security tab. Keep it concise. #: src/features/user/components/modals/tabs/account_security_tab/AccountSecuritySections.tsx:23 @@ -32433,10 +32480,6 @@ msgstr "Вхід" msgid "Sign-in method" msgstr "Спосіб входу" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:84 -msgid "Sign-in request" -msgstr "Запит на вхід" - #. Aria label on the signal-strength icon shown while the first latency sample is still pending. #: src/features/voice/components/SignalStrengthIcon.tsx:16 msgid "Signal strength loading" @@ -32453,6 +32496,21 @@ msgstr "Вхід виконано" msgid "Signed-in devices" msgstr "Підключені пристрої" +#. Shown on the browser approval page above the buttons. name is the display name of the account that will be signed in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:137 +msgid "Signing in as {name}" +msgstr "Вхід як {name}" + +#. Text button in the desktop app that shows a code to type into a browser on a different device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:207 +msgid "Signing in on another device?" +msgstr "Входите з іншого пристрою?" + +#. Title while the browser approves the sign-in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:228 +msgid "Signing in…" +msgstr "Вхід…" + #. Label for Bluesky OAuth signing key ID input. #: src/features/app/components/setup/SetupWizardSteps.tsx:1161 msgid "Signing key ID" @@ -33504,6 +33562,8 @@ msgstr "Почати перевірку мікрофона" msgid "Start minimized" msgstr "Розпочати згорнутим" +#. Button on the browser page after cancelling that goes back to choosing an account. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:337 #: src/features/moderation/components/report/ReportStepDetails.tsx:326 #: src/features/moderation/components/report/ReportStepEmail.tsx:97 #: src/features/moderation/components/report/ReportStepVerification.tsx:134 @@ -34910,6 +34970,11 @@ msgstr "Тайська" msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Дякуємо, що допомагаєте зробити {productName} безпечним. Ми розглянемо вашу скаргу якомога швидше." +#. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 +msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." +msgstr "Цей код недійсний на {instanceHost}. Перевірте код у додатку {productName} та спробуйте ще раз." + #. Body of the passkey page after the passkey prompt failed or was dismissed. Keep plain. #: src/features/auth/passkey_migration/PasskeyBridgePage.tsx:36 msgid "That didn't work. Try again or cancel." @@ -34953,11 +35018,6 @@ msgstr "Не вдалося видалити повідомлення" msgid "That message is gone, or you lost access to the conversation." msgstr "Це повідомлення зникло, або ви втратили доступ до розмови." -#. Error shown when a browser sign-in handoff code expires before it is approved. -#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 -msgid "That sign-in code expired. Try again." -msgstr "Цей код входу застарів. Спробуйте ще раз." - #. End-of-list line in the saved messages popout after every bookmark has been shown. #. End-of-list line on the saved messages page after every bookmark has been shown. #: src/features/messaging/components/pages/SavedMessagesPage.tsx:35 @@ -34965,6 +35025,21 @@ msgstr "Цей код входу застарів. Спробуйте ще ра msgid "That's all of them." msgstr "Це всі повідомлення." +#. Warning on the browser approval page when the app asked for a different account than the one chosen. requestedIdentifier is the email or username the app asked for, name is the chosen account's display name. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:131 +msgid "The {PRODUCT_NAME} app asked to sign in as {requestedIdentifier}, but you chose {name}." +msgstr "Програма {PRODUCT_NAME} попросила ввійти як {requestedIdentifier}, але ви вибрали {name}." + +#. Explains where the code comes from, under the title of the browser page where it is typed. Signing in on another device is the label of a button in the app and must match its translation. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:187 +msgid "The {PRODUCT_NAME} app on your other device shows it under Signing in on another device. Only enter a code from a device you control." +msgstr "Додаток {PRODUCT_NAME} на вашому іншому пристрої показує його в розділі \"Вхід з іншого пристрою\". Вводьте код лише з пристрою, який ви контролюєте." + +#. Shown after the user cancelled the sign-in request in the browser. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:327 +msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." +msgstr "Додаток {PRODUCT_NAME} не було авторизовано. Ви можете закрити цю вкладку." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -34983,10 +35058,6 @@ msgstr "Сталася помилка в застосунку" msgid "The app has crashed. Checking for updates that might fix this issue…" msgstr "Сталася помилка. Перевіряємо наявність оновлень, які можуть вирішити цю проблему…" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:237 -msgid "The app should now be signed in to your account." -msgstr "Тепер у застосунку має бути виконано вхід у ваш обліковий запис." - #. Activity log detail line under a lifted ban, for a temporary ban that had already ended on its own before it was lifted. A ban is the community ban, not the feature that blocks a user. {date} is when the ban ended, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:55 msgid "The ban had already expired on {date}" @@ -35184,6 +35255,16 @@ msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "Джерело демонстрації екрана припинило надсилати відео, тому демонстрацію вашого екрана зупинено." +#. Error shown in the desktop app when a browser sign-in request expires before it is approved in the browser. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 +msgid "The sign-in request expired before your browser approved it." +msgstr "Запит на вхід завершився з помилкою, оскільки браузер не підтвердив його вчасно." + +#. Error shown in the desktop app when the user pressed Cancel on the browser sign-in page. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:14 +msgid "The sign-in was cancelled in your browser." +msgstr "Вхід у браузері було скасовано." + #. Activity log detail line under a deleted sticker, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the sticker, shown as a clickable user chip. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts:100 msgid "The sticker was uploaded by {user}" @@ -35408,6 +35489,11 @@ msgstr "Сторонні" msgid "This account can't be blocked." msgstr "Цей обліковий запис не можна заблокувати." +#. Error in the browser when the chosen account belongs to a different server than the app that asked to sign in. accountHost and requestHost are server addresses. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:38 +msgid "This account is on {accountHost}, but the {productName} app is signing in to {requestHost}. Choose an account on {requestHost}." +msgstr "Цей обліковий запис знаходиться на {accountHost}, але програма {productName} входить до {requestHost}. Виберіть обліковий запис на {requestHost}." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:418 msgid "This action cannot be undone. All associated data, including the bot user, will be permanently deleted." msgstr "Цю дію не можна скасувати. Усі пов'язані дані, включно з користувачем-ботом, буде видалено назавжди." @@ -35551,11 +35637,6 @@ msgstr "Це повністю очищає ваш преміум-статус у msgid "This code doesn't exist." msgstr "Цього коду не існує." -#. Status shown under the browser sign-in code once its countdown reaches zero. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:68 -msgid "This code expired." -msgstr "Цей код застарів." - #. Gift redemption error modal body for an invalid or already used code. #: src/features/gift/commands/GiftCommands.tsx:37 msgid "This code is invalid or already used." @@ -36075,6 +36156,11 @@ msgstr "Термін дії цього посилання для скиданн msgid "This shows how links appear: {linkPreviewExampleUrl}" msgstr "Так відображаються посилання: {linkPreviewExampleUrl}" +#. Error in the browser when the sign-in request from the desktop app no longer exists, because it expired or the app cancelled it. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:20 +msgid "This sign-in request expired or was cancelled in the {productName} app. Start again from the app." +msgstr "Цей запит на вхід завершився терміном дії або був скасований у програмі {productName}. Спробуйте знову з програми." + #. Label above the community a sticker comes from in the sticker info card. #: src/features/expressions/components/ExpressionInfoCard.tsx:75 msgid "This sticker is from" @@ -38520,6 +38606,11 @@ msgstr "Використовуйте {url} там, де має бути вста msgid "Use a dedicated modal to set a message history threshold date for members who don't have the {readMessageHistoryPermissionLabel} permission." msgstr "Використовуйте спеціальне модальне вікно, щоб встановити дату обмеження історії повідомлень для учасників, які не мають дозволу «{readMessageHistoryPermissionLabel}»." +#. Text button on the browser approval page that goes back to choosing which account signs in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:149 +msgid "Use a different account" +msgstr "Використати інший обліковий запис" + #: src/features/auth/flow/instance_selector/InstancePickerRows.tsx:267 msgid "Use a self-hosted instance URL" msgstr "Використовуйте URL самостійно розміщеного екземпляра" @@ -39296,10 +39387,6 @@ msgstr "Підтвердьте свою електронну пошту, щоб msgid "Verify your email to start DMs." msgstr "Підтвердьте свою електронну пошту, щоб писати особисті повідомлення." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:142 -msgid "Verifying code…" -msgstr "Перевірка коду…" - #: src/features/auth/components/pages/ResetPasswordPage.tsx:145 msgid "Verifying your reset link…" msgstr "Перевірка посилання для скидання пароля…" @@ -40073,10 +40160,6 @@ msgstr "Зачекайте мить, перш ніж видаляти інші msgid "Wait between messages. Members with \"{bypassSlowmodePermissionLabel}\" can bypass this." msgstr "Час між повідомленнями. Учасники з дозволом «{bypassSlowmodePermissionLabel}» можуть це обійти." -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:445 -msgid "Waiting for browser approval." -msgstr "Очікування схвалення браузера." - #. Tooltip explaining that video / screen share controls are gated while the voice connection is not yet ready. #: src/features/voice/components/voice_connection_status/LocalParticipantControls.tsx:45 msgid "Waiting for connection..." @@ -40118,10 +40201,6 @@ msgstr "Пробудження" msgid "Warning" msgstr "Попередження" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:158 -msgid "Was this you?" -msgstr "Це були ви?" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:243 msgctxt "us-state" @@ -40959,10 +41038,6 @@ msgstr "У вас уже є довічний {premiumProductName}" msgid "You already have this connection." msgstr "У вас уже є це підключення." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:87 -msgid "You are about to authorize an app to sign in to your account. Only continue if you initiated this request from a device you control." -msgstr "Ви збираєтеся дозволити застосунку ввійти у ваш обліковий запис. Продовжуйте лише в тому випадку, якщо ви ініціювали цей запит із пристрою, який ви контролюєте." - #. External link warning title. productName is the Fluxer product name. #: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:22 msgid "You are about to leave {productName}" @@ -41732,6 +41807,11 @@ msgstr "Ви користуєтеся застарілим тарифом. По msgid "You're sending messages too quickly" msgstr "Ви надто швидко надсилаєте повідомлення" +#. Title of the browser page after the user approved signing in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:282 +msgid "You're signed in" +msgstr "Ви успішно увійшли" + #. Status text on the screen-share hover popout shown to the local streamer. Lightly playful tone. #: src/features/voice/components/StreamWatchHoverPopout.tsx:43 msgid "You're streaming!" diff --git a/fluxer_app/src/features/i18n/locales/vi/messages.po b/fluxer_app/src/features/i18n/locales/vi/messages.po index 2e950414a..1ffdc3230 100644 --- a/fluxer_app/src/features/i18n/locales/vi/messages.po +++ b/fluxer_app/src/features/i18n/locales/vi/messages.po @@ -1573,7 +1573,7 @@ msgid "{imageCount, plural, one {# image} other {# images}}, {videoCount, plural msgstr "{imageCount, plural, one {# ảnh} other {# ảnh}}, {videoCount, plural, one {# video} other {# video}}" #. Explanation shown when the selected instance advertises no web app endpoint. Instance name is interpolated. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:76 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:61 msgid "{instanceName} does not publish a web address, so sign-in cannot be handed to a browser." msgstr "{instanceName} không cung cấp địa chỉ web, vì vậy không thể chuyển hướng đăng nhập sang trình duyệt." @@ -2777,14 +2777,6 @@ msgstr "một bản nhúng đa phương tiện hoặc bản xem trước liên k msgid "A separate profile for each community" msgstr "Một hồ sơ riêng cho mỗi cộng đồng" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:164 -msgid "A sign-in request was made for your account. Only approve if you initiated it." -msgstr "Đã có yêu cầu đăng nhập vào tài khoản của bạn. Chỉ chấp thuận nếu bạn đã thực hiện yêu cầu này." - -#: src/features/auth/flow/HandoffApprovalFlow.tsx:162 -msgid "A sign-in request was made from the following device. Only approve if you recognize it." -msgstr "Đã có yêu cầu đăng nhập từ thiết bị sau. Chỉ chấp thuận nếu bạn nhận ra thiết bị này." - #. Description for has:sticker. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:51 msgid "a sticker" @@ -4811,10 +4803,6 @@ msgstr "Áp dụng cho tất cả cộng đồng" msgid "Approval required" msgstr "Cần phê duyệt" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:206 -msgid "Approve" -msgstr "Duyệt" - #. Hint under the sign-in option on fluxer.com that pairs a newly installed app with the old installed app. productName is the app name. #: src/features/auth/flow/AuthLoginLayout.tsx:101 msgid "Approve this app from the {productName} app you already use. No password needed." @@ -7873,6 +7861,11 @@ msgstr "Đang kiểm tra quyền truy cập..." msgid "Checking screen recording permission..." msgstr "Đang kiểm tra quyền ghi màn hình..." +#. Title while the browser looks up the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:224 +msgid "Checking the sign-in request…" +msgstr "Đang kiểm tra yêu cầu đăng nhậ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/PlutoniumIndex.ts:67 msgid "Checkout" @@ -8847,6 +8840,11 @@ msgstr "Khối mã" msgid "Code expired" msgstr "Mã đã hết hạn" +#. Label of the field in the browser where the user types the 12-character code shown in the desktop or mobile app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:28 +msgid "Code from the {productName} app" +msgstr "Mã từ ứng dụng {productName}" + #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 @@ -9348,7 +9346,6 @@ msgstr "Ẩn hoàn toàn huy hiệu {premiumProductName} của bạn với nhữ #: src/features/auth/components/pages/SsoCallbackPage.tsx:256 #: src/features/auth/components/pages/SsoCallbackPage.tsx:322 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:216 msgid "Completing sign-in…" msgstr "Đang hoàn tất đăng nhập…" @@ -9782,7 +9779,6 @@ msgstr "Bạn có thể mở menu ngữ cảnh bằng cách nhấp chuột trái #: src/features/auth/components/modals/DeviceRevokeModal.tsx:77 #: src/features/auth/components/modals/PasskeyPinModal.tsx:111 #: src/features/auth/components/pages/oauth_authorize_page/OAuthAccountStep.tsx:36 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/connection/components/modals/AddConnectionModal.tsx:384 #: src/features/i18n/utils/CommonMessageDescriptors.ts:726 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:413 @@ -9790,6 +9786,11 @@ msgstr "Bạn có thể mở menu ngữ cảnh bằng cách nhấp chuột trái msgid "Continue" msgstr "Tiếp tục" +#. Title in the desktop app while it waits for the user to sign in on the browser page it opened. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:177 +msgid "Continue in your browser" +msgstr "Tiếp tục trên trình duyệt của bạn" + #. Button in the gift time confirmation that proceeds to subscription checkout. #: src/features/app/components/dialogs/components/plutonium/hooks/useCheckoutActions.tsx:145 msgid "Continue to checkout" @@ -10437,7 +10438,7 @@ msgid "Couldn't close DM" msgstr "Không thể đóng tin nhắn trực tiếp" #. Desktop handoff flow error shown when finalizing the sign-in fails after a valid code. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:21 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:34 msgid "Couldn't complete sign-in. Try again." msgstr "Không thể hoàn tất đăng nhập. Vui lòng thử lại." @@ -10831,6 +10832,11 @@ msgstr "Không thể bắt đầu ủy quyền {blueskyProviderName}" msgid "Couldn't start checkout" msgstr "Không thể bắt đầu thanh toán" +#. Shown in the desktop app when the browser sign-in request could not be created. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:66 +msgid "Couldn't start signing in with your browser." +msgstr "Không thể bắt đầu đăng nhập bằng trình duyệt của bạn." + #. Toast error shown when creating a new account connection fails. #: src/features/connection/commands/ConnectionCommands.ts:27 msgid "Couldn't start the connection" @@ -10942,7 +10948,7 @@ msgid "Couldn't upload banner" msgstr "Không thể tải ảnh bìa lên" #. Desktop handoff flow error shown when verifying the pairing code fails for an unexpected reason. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:17 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:30 msgid "Couldn't verify that code. Try again." msgstr "Không thể xác minh mã. Vui lòng thử lại." @@ -12503,7 +12509,6 @@ msgstr "Bố cục dày đặc" #. Short label in the settings dialog permission components. Keep the tone plain and specific. #: src/features/app/components/dialogs/shared/PermissionComponents.tsx:16 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:203 msgid "Deny" msgstr "Từ chối" @@ -14910,15 +14915,16 @@ msgstr "Nhập mã gồm {digitCount} chữ số từ ứng dụng xác thực h msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "Nhập mã gồm {digitCount} chữ số từ ứng dụng xác thực của bạn." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:108 -msgid "Enter the code" -msgstr "Nhập mã" - #. Inline validation error on the verification step of the DSA report flow when the code field is empty. #: src/features/moderation/components/pages/ReportPage.tsx:74 msgid "Enter the code before continuing." msgstr "Nhập mã trước khi tiếp tục." +#. Title of the browser page where the user types the 12-character code the app shows under Signing in on another device. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +msgid "Enter the code from the {PRODUCT_NAME} app" +msgstr "Nhập mã từ ứng dụng {PRODUCT_NAME}" + #. Body text in the authentication sudo verification modal. Keep the tone plain and specific. #: src/features/auth/components/modals/SudoVerificationModal.tsx:56 msgid "Enter the code from your authenticator app." @@ -14933,10 +14939,6 @@ msgstr "Nhập mã đã gửi đến email hiện tại của bạn." msgid "Enter the code sent to your email address." msgstr "Nhập mã đã gửi đến email của bạn." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:111 -msgid "Enter the code shown in the app to continue." -msgstr "Nhập mã hiển thị trong ứng dụng để tiếp tục." - #: src/features/user/components/modals/BouncedEmailChangeModal.tsx:157 #: src/features/user/components/modals/EmailChangeModal.tsx:244 msgid "Enter the code we emailed to your new address." @@ -14959,6 +14961,11 @@ msgstr "Nhập email mới bạn muốn dùng. Chúng tôi sẽ gửi mã xác n msgid "Enter the PIN for your security key to continue." msgstr "Nhập mã PIN cho khóa bảo mật của bạn để tiếp tục." +#. Title in the desktop app above the code the user types into a browser on another device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:228 +msgid "Enter this code in your browser" +msgstr "Nhập mã này vào trình duyệt của bạn" + #: src/features/auth/flow/HandoffCodeDisplay.tsx:132 msgid "Enter this code in your browser to complete sign-in." msgstr "Nhập mã này vào trình duyệt để hoàn tất đăng nhập." @@ -15362,7 +15369,7 @@ msgstr "Hết hạn từ {earliest} đến {latest}" msgid "Expires in {remaining}s" msgstr "Hết hạn sau {remaining} giây" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:374 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:250 msgid "Expires in {remainingSeconds}s" msgstr "Hết hạn sau {remainingSeconds} giây" @@ -16165,7 +16172,7 @@ msgid "Fluxer" msgstr "Fluxer" #. Status shown when browser sign-in status polling gives up after repeated failures. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:72 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:57 msgid "Fluxer stopped checking whether the browser approved this sign-in. It didn't lose your code." msgstr "Fluxer đã ngừng kiểm tra xem trình duyệt có phê duyệt đăng nhập này không. Mã của bạn vẫn còn nguyên." @@ -16952,8 +16959,6 @@ msgstr "Tạo liên kết có thể chia sẻ hoặc sao chép CSS tùy chỉnh msgid "Generate invite link" msgstr "Tạo liên kết mời" -#. Button label that replaces an expired browser sign-in code with a fresh one. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:64 #: src/features/auth/flow/HandoffCodeDisplay.tsx:117 msgid "Generate new code" msgstr "Tạo mã mới" @@ -17348,6 +17353,16 @@ msgstr "Quay lại và nhập một email hợp lệ." msgid "Go back to {productName} to continue." msgstr "Quay lại {productName} để tiếp tục." +#. Shown after approving a sign-in for an app on another device, which signs in by itself shortly. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:292 +msgid "Go back to the {PRODUCT_NAME} app. It finishes signing in on its own." +msgstr "Quay lại ứng dụng {PRODUCT_NAME}. Ứng dụng sẽ tự hoàn tất đăng nhập." + +#. Shown after approving, when the browser has already handed the sign-in back to the desktop app. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:288 +msgid "Go back to the {PRODUCT_NAME} app. You can close this tab." +msgstr "Quay lại ứng dụng {PRODUCT_NAME}. Bạn có thể đóng tab này." + #. Accessible label for the community row of an expression info card, which opens a community the viewer is already a member of. {communityName} is the community name. #: src/features/expressions/components/ExpressionInfoCard.tsx:89 msgid "Go to {communityName}" @@ -19295,11 +19310,6 @@ msgstr "JSON không hợp lệ. Dán toàn bộ phản hồi từ URL trên." msgid "Invalid or expired code" msgstr "Mã không hợp lệ hoặc đã hết hạn" -#. Desktop handoff flow error shown when the entered pairing code is invalid or expired. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:13 -msgid "Invalid or expired code. Try again." -msgstr "Mã không hợp lệ hoặc đã hết hạn. Hãy thử lại." - #. Short label in the authentication authorize flow. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/state/useAuthorizeFlow.ts:82 msgid "Invalid redirect_uri" @@ -20876,7 +20886,7 @@ msgstr "Định dạng thời gian theo vùng" msgid "Localization" msgstr "Bản địa hóa" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:192 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:109 #: src/features/user/components/modals/tabs/DevicesTab.tsx:152 msgid "Location" msgstr "Vị trí" @@ -21034,6 +21044,11 @@ msgstr "Đặt {userName} làm chủ nhóm? Bạn sẽ mất đặc quyền ch msgid "Make group owner" msgstr "Đặt làm chủ nhóm" +#. Shown above the code on the browser approval page when the app cannot be signed in automatically. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:253 +msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." +msgstr "Hãy đảm bảo mã này khớp với mã trong ứng dụng {PRODUCT_NAME}." + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" @@ -24668,6 +24683,11 @@ msgstr "Vào <0>{listPriceEffectiveDate}, gói đăng ký của bạn sẽ c msgid "On click" msgstr "Khi nhấp" +#. One line explanation in the desktop app above the code. signInAddress is the web address of the sign-in page, such as web.fluxer.app/login?handoff=1. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:236 +msgid "On your other device, sign in at {signInAddress} and enter this code when asked." +msgstr "Trên thiết bị khác của bạn, hãy đăng nhập tại {signInAddress} và nhập mã này khi được yêu cầu." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:715 msgid "Once deleted, the application and its credentials are permanently removed." msgstr "Sau khi xóa, ứng dụng và thông tin đăng nhập của ứng dụng sẽ bị gỡ vĩnh viễn." @@ -24733,6 +24753,11 @@ msgstr "Chỉ @nhắc đến" msgid "Only applies on wide screens." msgstr "Chỉ áp dụng trên màn hình rộng." +#. Warning under the title of the browser approval page, so people do not approve a sign-in someone else started. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:245 +msgid "Only continue if you started this sign-in on a device you control." +msgstr "Chỉ tiếp tục nếu bạn đã bắt đầu đăng nhập này trên một thiết bị mà bạn kiểm soát." + #. Body copy in the mature content check modal. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:32 msgid "Only credit cards are accepted. Debit and prepaid cards cannot be used for the mature content check." @@ -24921,6 +24946,11 @@ msgstr "Mở {landmarkName}" msgid "Open {premiumProductFullName}" msgstr "Mở {premiumProductFullName}" +#. Button on the browser page after approving that opens the desktop app again if it did not come to the front. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:304 +msgid "Open {PRODUCT_NAME}" +msgstr "Mở {PRODUCT_NAME}" + #. Button label that opens the desktop app. productName is the app name. #. Button that hands SSO sign-in back to the mobile app. productName is the app name. #: src/features/auth/components/pages/SsoCallbackPage.tsx:47 @@ -25011,12 +25041,15 @@ msgstr "Mở tùy chọn ảnh bìa" msgid "Open bookmarks" msgstr "Mở tin nhắn đã lưu" -#. Button label that opens the browser sign-in handoff page. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:56 #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:184 msgid "Open browser" msgstr "Mở trình duyệt" +#. Button in the desktop app that reopens the browser sign-in page while the app waits for the browser. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:53 +msgid "Open browser again" +msgstr "Mở lại trình duyệt" + #. Primary button in the screen-share picker on web. Hands off to the browser's native getDisplayMedia picker. #: src/features/voice/components/modals/ScreenSharePickerModal.tsx:209 msgid "Open browser picker" @@ -25392,10 +25425,6 @@ msgstr "Mở cài đặt âm thanh & video" msgid "Open with {accountName} on {instanceName}" msgstr "Mở bằng {accountName} trên {instanceName}" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:414 -msgid "Open your browser to finish signing in." -msgstr "Mở trình duyệt của bạn để hoàn tất đăng nhập." - #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:137 msgid "Open your browser, sign in, then enter the code below to link your account." msgstr "Mở trình duyệt, đăng nhập, sau đó nhập mã bên dưới để liên kết tài khoản của bạn." @@ -25421,7 +25450,7 @@ msgstr "Mở trang Thành viên. Nhấn phím Cách hoặc Enter để mở." #. Short label in the language tab. Keep it concise. #. Spellcheck engine option in the textarea spellcheck submenu. Uses the host operating system spellchecker. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:79 #: src/features/user/components/modals/tabs/LanguageTab.tsx:110 msgid "Operating system" @@ -26439,7 +26468,7 @@ msgstr "Gói dịch vụ" msgid "Plans, perks, gifts and your subscription all live on one page." msgstr "Các gói, đặc quyền, quà tặng và gói đăng ký của bạn đều nằm trên một trang." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:172 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:89 msgid "Platform" msgstr "Nền tảng" @@ -31859,11 +31888,6 @@ msgstr "Hiện trò chuyện" msgid "Show chat with {count, plural, one {# unread message} other {# unread messages}}" msgstr "Hiện trò chuyện có {count, plural, one {# tin nhắn chưa đọc} other {# tin nhắn chưa đọc}}" -#. Button label that opens the manual browser handoff code fallback. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:60 -msgid "Show code" -msgstr "Hiển thị mã" - #. Developer voice status menu option for displaying the voice connection identifier. #: src/features/voice/components/voice_connection_status/VoiceConnectionStatusInner.tsx:76 msgid "Show connection ID" @@ -32306,7 +32330,9 @@ msgstr "Hiển thị ảnh bìa trong phần riêng bên dưới tiêu đề c msgid "Sidebar" msgstr "Thanh bên" +#. Button in the browser that approves signing in to the desktop or mobile app that asked for it. #. Generic authentication action label. Use for buttons, links, page titles, and accessible labels. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:33 #: src/features/i18n/utils/CommonMessageDescriptors.ts:79 msgid "Sign in" msgstr "Đăng nhập" @@ -32321,10 +32347,35 @@ msgstr "Đăng nhập lại" msgid "Sign in again as {accountLabel}" msgstr "Đăng nhập lại với tư cách {accountLabel}" +#. Shown in the desktop app while it waits for the browser. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:193 +msgid "Sign in to {instanceName} in your browser and confirm. This app finishes signing in on its own." +msgstr "Đăng nhập vào {instanceName} trên trình duyệt của bạn và xác nhận. Ứng dụng này sẽ tự hoàn tất đăng nhập." + +#. Shown in the desktop app above the code when the browser cannot return the sign-in automatically. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:189 +msgid "Sign in to {instanceName} in your browser, and check that it shows this code:" +msgstr "Đăng nhập vào {instanceName} trên trình duyệt của bạn và kiểm tra xem mã này có hiển thị không:" + #: src/features/auth/flow/GiftHeader.tsx:33 msgid "Sign in to claim your gift" msgstr "Đăng nhập để nhận quà" +#. Title of the browser page where the user approves signing in to an app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:71 +msgid "Sign in to the {PRODUCT_NAME} app" +msgstr "Đăng nhập vào ứng dụng {PRODUCT_NAME}" + +#. Title of the browser page where the user approves signing in to the desktop app that opened it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:58 +msgid "Sign in to the {PRODUCT_NAME} desktop app" +msgstr "Đăng nhập vào ứng dụng máy tính để bàn {PRODUCT_NAME}" + +#. Title of the browser page where the user approves signing in to the mobile app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:65 +msgid "Sign in to the {PRODUCT_NAME} mobile app" +msgstr "Đăng nhập vào ứng dụng di động {PRODUCT_NAME}" + #. Action label that starts passkey authentication. #: src/features/auth/AuthMessageDescriptors.ts:13 msgid "Sign in with a passkey" @@ -32403,14 +32454,10 @@ msgstr "Đăng xuất các thiết bị khác khỏi tài khoản của bạn" msgid "Sign out?" msgstr "Đăng xuất?" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:234 -msgid "Sign-in approved" -msgstr "Đăng nhập đã được duyệt" - -#. Short label in the authentication handoff approval flow. Keep the tone plain and specific. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:26 -msgid "Sign-in code" -msgstr "Mã đăng nhập" +#. Title of the browser page after the user cancelled the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:322 +msgid "Sign-in cancelled" +msgstr "Đã hủy đăng nhập" #. Section title for email address and password controls in the account security tab. Keep it concise. #: src/features/user/components/modals/tabs/account_security_tab/AccountSecuritySections.tsx:23 @@ -32433,10 +32480,6 @@ msgstr "Quy trình đăng nhập" msgid "Sign-in method" msgstr "Phương thức đăng nhập" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:84 -msgid "Sign-in request" -msgstr "Yêu cầu đăng nhập" - #. Aria label on the signal-strength icon shown while the first latency sample is still pending. #: src/features/voice/components/SignalStrengthIcon.tsx:16 msgid "Signal strength loading" @@ -32453,6 +32496,21 @@ msgstr "Đã đăng nhập" msgid "Signed-in devices" msgstr "Thiết bị đã đăng nhập" +#. Shown on the browser approval page above the buttons. name is the display name of the account that will be signed in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:137 +msgid "Signing in as {name}" +msgstr "Đăng nhập với tư cách {name}" + +#. Text button in the desktop app that shows a code to type into a browser on a different device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:207 +msgid "Signing in on another device?" +msgstr "Đăng nhập trên thiết bị khác?" + +#. Title while the browser approves the sign-in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:228 +msgid "Signing in…" +msgstr "Đang đăng nhập…" + #. Label for Bluesky OAuth signing key ID input. #: src/features/app/components/setup/SetupWizardSteps.tsx:1161 msgid "Signing key ID" @@ -33504,6 +33562,8 @@ msgstr "Bắt đầu kiểm tra micrô" msgid "Start minimized" msgstr "Bắt đầu thu nhỏ" +#. Button on the browser page after cancelling that goes back to choosing an account. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:337 #: src/features/moderation/components/report/ReportStepDetails.tsx:326 #: src/features/moderation/components/report/ReportStepEmail.tsx:97 #: src/features/moderation/components/report/ReportStepVerification.tsx:134 @@ -34910,6 +34970,11 @@ msgstr "Tiếng Thái" msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "Cảm ơn bạn đã giúp giữ cho {productName} an toàn. Chúng tôi sẽ xem xét báo cáo của bạn sớm nhất có thể." +#. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 +msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." +msgstr "Mã đó không hợp lệ trên {instanceHost}. Hãy kiểm tra mã trong ứng dụng {productName} và thử lại." + #. Body of the passkey page after the passkey prompt failed or was dismissed. Keep plain. #: src/features/auth/passkey_migration/PasskeyBridgePage.tsx:36 msgid "That didn't work. Try again or cancel." @@ -34953,11 +35018,6 @@ msgstr "Không xóa được tin nhắn này" msgid "That message is gone, or you lost access to the conversation." msgstr "Tin nhắn đó không còn tồn tại hoặc bạn đã mất quyền truy cập vào cuộc trò chuyện." -#. Error shown when a browser sign-in handoff code expires before it is approved. -#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 -msgid "That sign-in code expired. Try again." -msgstr "Mã đăng nhập đó đã hết hạn. Thử lại." - #. End-of-list line in the saved messages popout after every bookmark has been shown. #. End-of-list line on the saved messages page after every bookmark has been shown. #: src/features/messaging/components/pages/SavedMessagesPage.tsx:35 @@ -34965,6 +35025,21 @@ msgstr "Mã đăng nhập đó đã hết hạn. Thử lại." msgid "That's all of them." msgstr "Đã hết tin nhắn đã lưu." +#. Warning on the browser approval page when the app asked for a different account than the one chosen. requestedIdentifier is the email or username the app asked for, name is the chosen account's display name. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:131 +msgid "The {PRODUCT_NAME} app asked to sign in as {requestedIdentifier}, but you chose {name}." +msgstr "Ứng dụng {PRODUCT_NAME} yêu cầu đăng nhập với tư cách {requestedIdentifier}, nhưng bạn đã chọn {name}." + +#. Explains where the code comes from, under the title of the browser page where it is typed. Signing in on another device is the label of a button in the app and must match its translation. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:187 +msgid "The {PRODUCT_NAME} app on your other device shows it under Signing in on another device. Only enter a code from a device you control." +msgstr "Ứng dụng {PRODUCT_NAME} trên thiết bị kia của bạn hiển thị mục đó trong phần Đăng nhập trên thiết bị khác. Chỉ nhập mã từ thiết bị bạn kiểm soát." + +#. Shown after the user cancelled the sign-in request in the browser. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:327 +msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." +msgstr "Ứng dụng {PRODUCT_NAME} chưa đăng nhập. Bạn có thể đóng tab này." + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -34983,10 +35058,6 @@ msgstr "Ứng dụng đã gặp sự cố" msgid "The app has crashed. Checking for updates that might fix this issue…" msgstr "Ứng dụng đã gặp sự cố. Đang kiểm tra bản cập nhật có thể khắc phục vấn đề này…" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:237 -msgid "The app should now be signed in to your account." -msgstr "Ứng dụng giờ đã đăng nhập vào tài khoản của bạn." - #. Activity log detail line under a lifted ban, for a temporary ban that had already ended on its own before it was lifted. A ban is the community ban, not the feature that blocks a user. {date} is when the ban ended, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:55 msgid "The ban had already expired on {date}" @@ -35184,6 +35255,16 @@ msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "Nguồn chia sẻ màn hình đã ngừng gửi video, vì vậy quá trình chia sẻ màn hình của bạn đã dừng." +#. Error shown in the desktop app when a browser sign-in request expires before it is approved in the browser. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 +msgid "The sign-in request expired before your browser approved it." +msgstr "Yêu cầu đăng nhập đã hết hạn trước khi trình duyệt của bạn phê duyệt." + +#. Error shown in the desktop app when the user pressed Cancel on the browser sign-in page. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:14 +msgid "The sign-in was cancelled in your browser." +msgstr "Đã hủy đăng nhập trên trình duyệt của bạn." + #. Activity log detail line under a deleted sticker, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the sticker, shown as a clickable user chip. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts:100 msgid "The sticker was uploaded by {user}" @@ -35408,6 +35489,11 @@ msgstr "Bên thứ ba" msgid "This account can't be blocked." msgstr "Không thể chặn tài khoản này." +#. Error in the browser when the chosen account belongs to a different server than the app that asked to sign in. accountHost and requestHost are server addresses. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:38 +msgid "This account is on {accountHost}, but the {productName} app is signing in to {requestHost}. Choose an account on {requestHost}." +msgstr "Tài khoản này thuộc về {accountHost}, nhưng ứng dụng {productName} đang đăng nhập vào {requestHost}. Vui lòng chọn một tài khoản trên {requestHost}." + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:418 msgid "This action cannot be undone. All associated data, including the bot user, will be permanently deleted." msgstr "Thao tác này không thể hoàn tác. Toàn bộ dữ liệu liên quan, bao gồm cả người dùng bot, sẽ bị xóa vĩnh viễn." @@ -35551,11 +35637,6 @@ msgstr "Thao tác này sẽ xóa hoàn toàn trạng thái premium của bạn t msgid "This code doesn't exist." msgstr "Mã này không tồn tại." -#. Status shown under the browser sign-in code once its countdown reaches zero. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:68 -msgid "This code expired." -msgstr "Mã này đã hết hạn." - #. Gift redemption error modal body for an invalid or already used code. #: src/features/gift/commands/GiftCommands.tsx:37 msgid "This code is invalid or already used." @@ -36075,6 +36156,11 @@ msgstr "Liên kết đặt lại này đã hết hạn. Liên kết đặt lại msgid "This shows how links appear: {linkPreviewExampleUrl}" msgstr "Đây là cách các liên kết xuất hiện: {linkPreviewExampleUrl}" +#. Error in the browser when the sign-in request from the desktop app no longer exists, because it expired or the app cancelled it. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:20 +msgid "This sign-in request expired or was cancelled in the {productName} app. Start again from the app." +msgstr "Yêu cầu đăng nhập này đã hết hạn hoặc bị hủy trong ứng dụng {productName}. Vui lòng thử lại từ ứng dụng." + #. Label above the community a sticker comes from in the sticker info card. #: src/features/expressions/components/ExpressionInfoCard.tsx:75 msgid "This sticker is from" @@ -38520,6 +38606,11 @@ msgstr "Sử dụng {url} tại vị trí cần chèn URL hình ảnh." msgid "Use a dedicated modal to set a message history threshold date for members who don't have the {readMessageHistoryPermissionLabel} permission." msgstr "Dùng một cửa sổ riêng để đặt ngày giới hạn lịch sử tin nhắn cho những thành viên không có quyền {readMessageHistoryPermissionLabel}." +#. Text button on the browser approval page that goes back to choosing which account signs in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:149 +msgid "Use a different account" +msgstr "Sử dụng tài khoản khác" + #: src/features/auth/flow/instance_selector/InstancePickerRows.tsx:267 msgid "Use a self-hosted instance URL" msgstr "Sử dụng URL của một phiên bản tự lưu trữ" @@ -39296,10 +39387,6 @@ msgstr "Xác minh email của bạn để mua {premiumProductFullName}." msgid "Verify your email to start DMs." msgstr "Xác minh email của bạn để bắt đầu tin nhắn trực tiếp." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:142 -msgid "Verifying code…" -msgstr "Đang xác minh mã…" - #: src/features/auth/components/pages/ResetPasswordPage.tsx:145 msgid "Verifying your reset link…" msgstr "Đang xác minh liên kết đặt lại của bạn…" @@ -40073,10 +40160,6 @@ msgstr "Đợi một lát trước khi xóa thêm tin nhắn." msgid "Wait between messages. Members with \"{bypassSlowmodePermissionLabel}\" can bypass this." msgstr "Chờ giữa các tin nhắn. Thành viên có quyền \"{bypassSlowmodePermissionLabel}\" có thể bỏ qua giới hạn này." -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:445 -msgid "Waiting for browser approval." -msgstr "Đang chờ phê duyệt từ trình duyệt." - #. Tooltip explaining that video / screen share controls are gated while the voice connection is not yet ready. #: src/features/voice/components/voice_connection_status/LocalParticipantControls.tsx:45 msgid "Waiting for connection..." @@ -40118,10 +40201,6 @@ msgstr "Đánh thức" msgid "Warning" msgstr "Cảnh báo" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:158 -msgid "Was this you?" -msgstr "Có phải bạn không?" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:243 msgctxt "us-state" @@ -40959,10 +41038,6 @@ msgstr "Bạn đã có {premiumProductName} trọn đời" msgid "You already have this connection." msgstr "Bạn đã có kết nối này rồi." -#: src/features/auth/flow/HandoffApprovalFlow.tsx:87 -msgid "You are about to authorize an app to sign in to your account. Only continue if you initiated this request from a device you control." -msgstr "Bạn sắp cấp quyền cho một ứng dụng đăng nhập vào tài khoản của mình. Chỉ tiếp tục nếu bạn đã thực hiện yêu cầu này từ một thiết bị mà bạn kiểm soát." - #. External link warning title. productName is the Fluxer product name. #: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:22 msgid "You are about to leave {productName}" @@ -41732,6 +41807,11 @@ msgstr "Bạn đang dùng mức giá cũ. Giá hiện tại cho gói này là {c msgid "You're sending messages too quickly" msgstr "Bạn đang gửi tin nhắn quá nhanh" +#. Title of the browser page after the user approved signing in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:282 +msgid "You're signed in" +msgstr "Bạn đã đăng nhập" + #. Status text on the screen-share hover popout shown to the local streamer. Lightly playful tone. #: src/features/voice/components/StreamWatchHoverPopout.tsx:43 msgid "You're streaming!" 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 58dd120b3..bcf05cbcd 100644 --- a/fluxer_app/src/features/i18n/locales/zh-CN/messages.po +++ b/fluxer_app/src/features/i18n/locales/zh-CN/messages.po @@ -1573,7 +1573,7 @@ msgid "{imageCount, plural, one {# image} other {# images}}, {videoCount, plural msgstr "{imageCount, plural, one {# 张图片} other {# 张图片}},{videoCount, plural, one {# 个视频} other {# 个视频}}" #. Explanation shown when the selected instance advertises no web app endpoint. Instance name is interpolated. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:76 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:61 msgid "{instanceName} does not publish a web address, so sign-in cannot be handed to a browser." msgstr "{instanceName} 未发布网页地址,因此无法将登录操作转交给浏览器。" @@ -2777,14 +2777,6 @@ msgstr "富媒体嵌入或链接预览(非上传文件)" msgid "A separate profile for each community" msgstr "每个社群的独立个人资料" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:164 -msgid "A sign-in request was made for your account. Only approve if you initiated it." -msgstr "有人请求登录你的账号。仅在确认是你本人操作时才批准。" - -#: src/features/auth/flow/HandoffApprovalFlow.tsx:162 -msgid "A sign-in request was made from the following device. Only approve if you recognize it." -msgstr "有设备请求登录你的账号。仅在你认识该设备时才批准。" - #. Description for has:sticker. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:51 msgid "a sticker" @@ -4811,10 +4803,6 @@ msgstr "应用于所有社区" msgid "Approval required" msgstr "需要批准" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:206 -msgid "Approve" -msgstr "批准" - #. Hint under the sign-in option on fluxer.com that pairs a newly installed app with the old installed app. productName is the app name. #: src/features/auth/flow/AuthLoginLayout.tsx:101 msgid "Approve this app from the {productName} app you already use. No password needed." @@ -7873,6 +7861,11 @@ msgstr "正在检查访问权限..." msgid "Checking screen recording permission..." msgstr "正在检查屏幕录制权限..." +#. Title while the browser looks up the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:224 +msgid "Checking the sign-in request…" +msgstr "正在检查登录请求…" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -8847,6 +8840,11 @@ msgstr "代码块" msgid "Code expired" msgstr "验证码已过期" +#. Label of the field in the browser where the user types the 12-character code shown in the desktop or mobile app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:28 +msgid "Code from the {productName} app" +msgstr "来自 {productName} 应用的代码" + #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 @@ -9348,7 +9346,6 @@ msgstr "对其他用户完全隐藏你的 {premiumProductName} 徽章" #: src/features/auth/components/pages/SsoCallbackPage.tsx:256 #: src/features/auth/components/pages/SsoCallbackPage.tsx:322 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:216 msgid "Completing sign-in…" msgstr "正在完成登录…" @@ -9782,7 +9779,6 @@ msgstr "左键点击(按钮)或右键点击(其他元素)可打开上下 #: src/features/auth/components/modals/DeviceRevokeModal.tsx:77 #: src/features/auth/components/modals/PasskeyPinModal.tsx:111 #: src/features/auth/components/pages/oauth_authorize_page/OAuthAccountStep.tsx:36 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/connection/components/modals/AddConnectionModal.tsx:384 #: src/features/i18n/utils/CommonMessageDescriptors.ts:726 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:413 @@ -9790,6 +9786,11 @@ msgstr "左键点击(按钮)或右键点击(其他元素)可打开上下 msgid "Continue" msgstr "继续" +#. Title in the desktop app while it waits for the user to sign in on the browser page it opened. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:177 +msgid "Continue in your browser" +msgstr "在浏览器中继续" + #. Button in the gift time confirmation that proceeds to subscription checkout. #: src/features/app/components/dialogs/components/plutonium/hooks/useCheckoutActions.tsx:145 msgid "Continue to checkout" @@ -10437,7 +10438,7 @@ msgid "Couldn't close DM" msgstr "无法关闭私信" #. Desktop handoff flow error shown when finalizing the sign-in fails after a valid code. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:21 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:34 msgid "Couldn't complete sign-in. Try again." msgstr "无法完成登录。请重试。" @@ -10831,6 +10832,11 @@ msgstr "无法开始 {blueskyProviderName} 授权" msgid "Couldn't start checkout" msgstr "无法开始结账" +#. Shown in the desktop app when the browser sign-in request could not be created. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:66 +msgid "Couldn't start signing in with your browser." +msgstr "无法通过浏览器开始登录。" + #. Toast error shown when creating a new account connection fails. #: src/features/connection/commands/ConnectionCommands.ts:27 msgid "Couldn't start the connection" @@ -10942,7 +10948,7 @@ msgid "Couldn't upload banner" msgstr "无法上传横幅" #. Desktop handoff flow error shown when verifying the pairing code fails for an unexpected reason. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:17 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:30 msgid "Couldn't verify that code. Try again." msgstr "无法验证该切换码。请重试。" @@ -12503,7 +12509,6 @@ msgstr "紧凑布局" #. Short label in the settings dialog permission components. Keep the tone plain and specific. #: src/features/app/components/dialogs/shared/PermissionComponents.tsx:16 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:203 msgid "Deny" msgstr "拒绝" @@ -14910,15 +14915,16 @@ msgstr "输入身份验证器应用中的 {digitCount} 位验证码,或其中 msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "输入身份验证器应用中的 {digitCount} 位验证码。" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:108 -msgid "Enter the code" -msgstr "输入验证码" - #. Inline validation error on the verification step of the DSA report flow when the code field is empty. #: src/features/moderation/components/pages/ReportPage.tsx:74 msgid "Enter the code before continuing." msgstr "请输入验证码以继续。" +#. Title of the browser page where the user types the 12-character code the app shows under Signing in on another device. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +msgid "Enter the code from the {PRODUCT_NAME} app" +msgstr "在 {PRODUCT_NAME} 应用中输入验证码" + #. Body text in the authentication sudo verification modal. Keep the tone plain and specific. #: src/features/auth/components/modals/SudoVerificationModal.tsx:56 msgid "Enter the code from your authenticator app." @@ -14933,10 +14939,6 @@ msgstr "输入发送至你当前邮箱的验证码。" msgid "Enter the code sent to your email address." msgstr "输入发送到你邮箱的验证码。" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:111 -msgid "Enter the code shown in the app to continue." -msgstr "请输入应用中显示的验证码以继续。" - #: src/features/user/components/modals/BouncedEmailChangeModal.tsx:157 #: src/features/user/components/modals/EmailChangeModal.tsx:244 msgid "Enter the code we emailed to your new address." @@ -14959,6 +14961,11 @@ msgstr "请输入你要使用的新邮箱。稍后我们会向该邮箱发送验 msgid "Enter the PIN for your security key to continue." msgstr "输入你的安全密钥 PIN 码以继续。" +#. Title in the desktop app above the code the user types into a browser on another device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:228 +msgid "Enter this code in your browser" +msgstr "在浏览器中输入此代码" + #: src/features/auth/flow/HandoffCodeDisplay.tsx:132 msgid "Enter this code in your browser to complete sign-in." msgstr "在浏览器中输入此代码以完成登录。" @@ -15362,7 +15369,7 @@ msgstr "将于 {earliest} 至 {latest} 之间过期" msgid "Expires in {remaining}s" msgstr "{remaining} 秒后过期" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:374 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:250 msgid "Expires in {remainingSeconds}s" msgstr "将在 {remainingSeconds} 秒后过期" @@ -16165,7 +16172,7 @@ msgid "Fluxer" msgstr "Fluxer" #. Status shown when browser sign-in status polling gives up after repeated failures. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:72 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:57 msgid "Fluxer stopped checking whether the browser approved this sign-in. It didn't lose your code." msgstr "Fluxer 停止检查浏览器是否已批准此登录。您的代码未丢失。" @@ -16952,8 +16959,6 @@ msgstr "生成可分享的链接,或复制合并后的自定义 CSS。" msgid "Generate invite link" msgstr "生成邀请链接" -#. Button label that replaces an expired browser sign-in code with a fresh one. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:64 #: src/features/auth/flow/HandoffCodeDisplay.tsx:117 msgid "Generate new code" msgstr "生成新验证码" @@ -17348,6 +17353,16 @@ msgstr "请返回并输入有效的邮箱地址。" msgid "Go back to {productName} to continue." msgstr "返回 {productName} 以继续。" +#. Shown after approving a sign-in for an app on another device, which signs in by itself shortly. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:292 +msgid "Go back to the {PRODUCT_NAME} app. It finishes signing in on its own." +msgstr "返回 {PRODUCT_NAME} 应用。它将自行完成登录。" + +#. Shown after approving, when the browser has already handed the sign-in back to the desktop app. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:288 +msgid "Go back to the {PRODUCT_NAME} app. You can close this tab." +msgstr "返回 {PRODUCT_NAME} 应用。您可以关闭此标签页。" + #. Accessible label for the community row of an expression info card, which opens a community the viewer is already a member of. {communityName} is the community name. #: src/features/expressions/components/ExpressionInfoCard.tsx:89 msgid "Go to {communityName}" @@ -19295,11 +19310,6 @@ msgstr "JSON 无效。请粘贴上方网址的完整响应。" msgid "Invalid or expired code" msgstr "验证码无效或已过期" -#. Desktop handoff flow error shown when the entered pairing code is invalid or expired. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:13 -msgid "Invalid or expired code. Try again." -msgstr "配对码无效或已过期。请重试。" - #. Short label in the authentication authorize flow. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/state/useAuthorizeFlow.ts:82 msgid "Invalid redirect_uri" @@ -20876,7 +20886,7 @@ msgstr "区域时间格式" msgid "Localization" msgstr "本地化" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:192 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:109 #: src/features/user/components/modals/tabs/DevicesTab.tsx:152 msgid "Location" msgstr "位置" @@ -21034,6 +21044,11 @@ msgstr "将 {userName} 设为群主?你将失去群主权限。" msgid "Make group owner" msgstr "设为群主" +#. Shown above the code on the browser approval page when the app cannot be signed in automatically. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:253 +msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." +msgstr "请确保此代码与 {PRODUCT_NAME} 应用中的代码匹配。" + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" @@ -24668,6 +24683,11 @@ msgstr "在 <0>{listPriceEffectiveDate},你的订阅将从 {listPriceCurre msgid "On click" msgstr "点击时" +#. One line explanation in the desktop app above the code. signInAddress is the web address of the sign-in page, such as web.fluxer.app/login?handoff=1. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:236 +msgid "On your other device, sign in at {signInAddress} and enter this code when asked." +msgstr "在您的另一台设备上,请前往 {signInAddress} 登录,并在需要时输入此代码。" + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:715 msgid "Once deleted, the application and its credentials are permanently removed." msgstr "删除后,该应用及其凭据将被永久删除。" @@ -24733,6 +24753,11 @@ msgstr "仅提及" msgid "Only applies on wide screens." msgstr "仅在宽屏上生效。" +#. Warning under the title of the browser approval page, so people do not approve a sign-in someone else started. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:245 +msgid "Only continue if you started this sign-in on a device you control." +msgstr "仅在你已在自己控制的设备上开始此登录时继续。" + #. Body copy in the mature content check modal. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:32 msgid "Only credit cards are accepted. Debit and prepaid cards cannot be used for the mature content check." @@ -24921,6 +24946,11 @@ msgstr "打开{landmarkName}" msgid "Open {premiumProductFullName}" msgstr "打开 {premiumProductFullName}" +#. Button on the browser page after approving that opens the desktop app again if it did not come to the front. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:304 +msgid "Open {PRODUCT_NAME}" +msgstr "打开 {PRODUCT_NAME}" + #. Button label that opens the desktop app. productName is the app name. #. Button that hands SSO sign-in back to the mobile app. productName is the app name. #: src/features/auth/components/pages/SsoCallbackPage.tsx:47 @@ -25011,12 +25041,15 @@ msgstr "打开横幅选项" msgid "Open bookmarks" msgstr "打开书签" -#. Button label that opens the browser sign-in handoff page. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:56 #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:184 msgid "Open browser" msgstr "打开浏览器" +#. Button in the desktop app that reopens the browser sign-in page while the app waits for the browser. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:53 +msgid "Open browser again" +msgstr "重新打开浏览器" + #. Primary button in the screen-share picker on web. Hands off to the browser's native getDisplayMedia picker. #: src/features/voice/components/modals/ScreenSharePickerModal.tsx:209 msgid "Open browser picker" @@ -25392,10 +25425,6 @@ msgstr "打开语音和视频设置" msgid "Open with {accountName} on {instanceName}" msgstr "使用 {accountName} 在 {instanceName} 打开" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:414 -msgid "Open your browser to finish signing in." -msgstr "在浏览器中打开以完成登录。" - #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:137 msgid "Open your browser, sign in, then enter the code below to link your account." msgstr "打开浏览器,登录后输入以下代码以关联你的账号。" @@ -25421,7 +25450,7 @@ msgstr "打开成员页面。按空格键或回车键打开。" #. Short label in the language tab. Keep it concise. #. Spellcheck engine option in the textarea spellcheck submenu. Uses the host operating system spellchecker. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:79 #: src/features/user/components/modals/tabs/LanguageTab.tsx:110 msgid "Operating system" @@ -26439,7 +26468,7 @@ msgstr "套餐" msgid "Plans, perks, gifts and your subscription all live on one page." msgstr "方案、福利、礼物和你的订阅都在一个页面上。" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:172 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:89 msgid "Platform" msgstr "平台" @@ -31859,11 +31888,6 @@ msgstr "显示聊天" msgid "Show chat with {count, plural, one {# unread message} other {# unread messages}}" msgstr "显示聊天({count, plural, other {# 条未读消息}})" -#. Button label that opens the manual browser handoff code fallback. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:60 -msgid "Show code" -msgstr "显示代码" - #. Developer voice status menu option for displaying the voice connection identifier. #: src/features/voice/components/voice_connection_status/VoiceConnectionStatusInner.tsx:76 msgid "Show connection ID" @@ -32306,7 +32330,9 @@ msgstr "在社区标题下方的独立部分中显示横幅。" msgid "Sidebar" msgstr "侧边栏" +#. Button in the browser that approves signing in to the desktop or mobile app that asked for it. #. Generic authentication action label. Use for buttons, links, page titles, and accessible labels. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:33 #: src/features/i18n/utils/CommonMessageDescriptors.ts:79 msgid "Sign in" msgstr "登录" @@ -32321,10 +32347,35 @@ msgstr "重新登录" msgid "Sign in again as {accountLabel}" msgstr "再次登录 {accountLabel}" +#. Shown in the desktop app while it waits for the browser. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:193 +msgid "Sign in to {instanceName} in your browser and confirm. This app finishes signing in on its own." +msgstr "在浏览器中登录 {instanceName} 并确认。此应用将自行完成登录。" + +#. Shown in the desktop app above the code when the browser cannot return the sign-in automatically. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:189 +msgid "Sign in to {instanceName} in your browser, and check that it shows this code:" +msgstr "在浏览器中登录 {instanceName},并检查是否显示此代码:" + #: src/features/auth/flow/GiftHeader.tsx:33 msgid "Sign in to claim your gift" msgstr "登录以领取你的礼物" +#. Title of the browser page where the user approves signing in to an app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:71 +msgid "Sign in to the {PRODUCT_NAME} app" +msgstr "登录 {PRODUCT_NAME} 应用" + +#. Title of the browser page where the user approves signing in to the desktop app that opened it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:58 +msgid "Sign in to the {PRODUCT_NAME} desktop app" +msgstr "登录 {PRODUCT_NAME} 桌面应用" + +#. Title of the browser page where the user approves signing in to the mobile app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:65 +msgid "Sign in to the {PRODUCT_NAME} mobile app" +msgstr "登录 {PRODUCT_NAME} 移动应用" + #. Action label that starts passkey authentication. #: src/features/auth/AuthMessageDescriptors.ts:13 msgid "Sign in with a passkey" @@ -32403,14 +32454,10 @@ msgstr "从你的账号退出其他设备" msgid "Sign out?" msgstr "要退出登录吗?" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:234 -msgid "Sign-in approved" -msgstr "登录已批准" - -#. Short label in the authentication handoff approval flow. Keep the tone plain and specific. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:26 -msgid "Sign-in code" -msgstr "登录验证码" +#. Title of the browser page after the user cancelled the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:322 +msgid "Sign-in cancelled" +msgstr "登录已取消" #. Section title for email address and password controls in the account security tab. Keep it concise. #: src/features/user/components/modals/tabs/account_security_tab/AccountSecuritySections.tsx:23 @@ -32433,10 +32480,6 @@ msgstr "登录流程" msgid "Sign-in method" msgstr "登录方式" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:84 -msgid "Sign-in request" -msgstr "登录请求" - #. Aria label on the signal-strength icon shown while the first latency sample is still pending. #: src/features/voice/components/SignalStrengthIcon.tsx:16 msgid "Signal strength loading" @@ -32453,6 +32496,21 @@ msgstr "已登录" msgid "Signed-in devices" msgstr "已登录的设备" +#. Shown on the browser approval page above the buttons. name is the display name of the account that will be signed in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:137 +msgid "Signing in as {name}" +msgstr "以 {name} 身份登录" + +#. Text button in the desktop app that shows a code to type into a browser on a different device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:207 +msgid "Signing in on another device?" +msgstr "在另一台设备上登录?" + +#. Title while the browser approves the sign-in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:228 +msgid "Signing in…" +msgstr "正在登录…" + #. Label for Bluesky OAuth signing key ID input. #: src/features/app/components/setup/SetupWizardSteps.tsx:1161 msgid "Signing key ID" @@ -33504,6 +33562,8 @@ msgstr "开始麦克风测试" msgid "Start minimized" msgstr "最小化启动" +#. Button on the browser page after cancelling that goes back to choosing an account. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:337 #: src/features/moderation/components/report/ReportStepDetails.tsx:326 #: src/features/moderation/components/report/ReportStepEmail.tsx:97 #: src/features/moderation/components/report/ReportStepVerification.tsx:134 @@ -34910,6 +34970,11 @@ msgstr "泰语" msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "感谢你帮助维护 {productName} 的安全。我们会尽快审核你的举报。" +#. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 +msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." +msgstr "该代码在 {instanceHost} 上无效。请在 {productName} 应用中检查代码,然后重试。" + #. Body of the passkey page after the passkey prompt failed or was dismissed. Keep plain. #: src/features/auth/passkey_migration/PasskeyBridgePage.tsx:36 msgid "That didn't work. Try again or cancel." @@ -34953,11 +35018,6 @@ msgstr "消息删除失败" msgid "That message is gone, or you lost access to the conversation." msgstr "该消息已不存在,或你已无法访问该对话。" -#. Error shown when a browser sign-in handoff code expires before it is approved. -#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 -msgid "That sign-in code expired. Try again." -msgstr "该登录代码已过期。请重试。" - #. End-of-list line in the saved messages popout after every bookmark has been shown. #. End-of-list line on the saved messages page after every bookmark has been shown. #: src/features/messaging/components/pages/SavedMessagesPage.tsx:35 @@ -34965,6 +35025,21 @@ msgstr "该登录代码已过期。请重试。" msgid "That's all of them." msgstr "到底了。" +#. Warning on the browser approval page when the app asked for a different account than the one chosen. requestedIdentifier is the email or username the app asked for, name is the chosen account's display name. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:131 +msgid "The {PRODUCT_NAME} app asked to sign in as {requestedIdentifier}, but you chose {name}." +msgstr "{PRODUCT_NAME} 应用请求以 {requestedIdentifier} 身份登录,但你选择了 {name}。" + +#. Explains where the code comes from, under the title of the browser page where it is typed. Signing in on another device is the label of a button in the app and must match its translation. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:187 +msgid "The {PRODUCT_NAME} app on your other device shows it under Signing in on another device. Only enter a code from a device you control." +msgstr "您在另一台设备上的 {PRODUCT_NAME} 应用中,可以在“在另一台设备上登录”下找到它。请仅输入您控制的设备上的代码。" + +#. Shown after the user cancelled the sign-in request in the browser. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:327 +msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." +msgstr "{PRODUCT_NAME} 应用未登录。您可以关闭此标签页。" + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -34983,10 +35058,6 @@ msgstr "应用崩溃了" msgid "The app has crashed. Checking for updates that might fix this issue…" msgstr "应用崩溃了。正在检查更新,这或许能解决问题…" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:237 -msgid "The app should now be signed in to your account." -msgstr "应用现在应该已登录你的账号。" - #. Activity log detail line under a lifted ban, for a temporary ban that had already ended on its own before it was lifted. A ban is the community ban, not the feature that blocks a user. {date} is when the ban ended, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:55 msgid "The ban had already expired on {date}" @@ -35184,6 +35255,16 @@ msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "屏幕共享源已停止发送视频,因此你的屏幕共享已停止。" +#. Error shown in the desktop app when a browser sign-in request expires before it is approved in the browser. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 +msgid "The sign-in request expired before your browser approved it." +msgstr "登录请求已过期,您的浏览器尚未批准。" + +#. Error shown in the desktop app when the user pressed Cancel on the browser sign-in page. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:14 +msgid "The sign-in was cancelled in your browser." +msgstr "浏览器中已取消登录。" + #. Activity log detail line under a deleted sticker, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the sticker, shown as a clickable user chip. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts:100 msgid "The sticker was uploaded by {user}" @@ -35408,6 +35489,11 @@ msgstr "第三方" msgid "This account can't be blocked." msgstr "此账号无法被屏蔽。" +#. Error in the browser when the chosen account belongs to a different server than the app that asked to sign in. accountHost and requestHost are server addresses. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:38 +msgid "This account is on {accountHost}, but the {productName} app is signing in to {requestHost}. Choose an account on {requestHost}." +msgstr "此账号位于 {accountHost},但 {productName} 应用正在登录到 {requestHost}。请选择一个位于 {requestHost} 的账号。" + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:418 msgid "This action cannot be undone. All associated data, including the bot user, will be permanently deleted." msgstr "此操作无法撤销。所有相关数据,包括机器人用户,都将被永久删除。" @@ -35551,11 +35637,6 @@ msgstr "这将完全清除你在后端的会员状态,包括会员类型、账 msgid "This code doesn't exist." msgstr "此兑换码不存在。" -#. Status shown under the browser sign-in code once its countdown reaches zero. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:68 -msgid "This code expired." -msgstr "此代码已过期。" - #. Gift redemption error modal body for an invalid or already used code. #: src/features/gift/commands/GiftCommands.tsx:37 msgid "This code is invalid or already used." @@ -36075,6 +36156,11 @@ msgstr "此重置链接已过期。重置链接有效期为 1 小时。请重新 msgid "This shows how links appear: {linkPreviewExampleUrl}" msgstr "链接显示效果如下:{linkPreviewExampleUrl}" +#. Error in the browser when the sign-in request from the desktop app no longer exists, because it expired or the app cancelled it. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:20 +msgid "This sign-in request expired or was cancelled in the {productName} app. Start again from the app." +msgstr "此登录请求已在 {productName} 应用中过期或被取消。请从应用重新开始。" + #. Label above the community a sticker comes from in the sticker info card. #: src/features/expressions/components/ExpressionInfoCard.tsx:75 msgid "This sticker is from" @@ -38520,6 +38606,11 @@ msgstr "在需要插入图片网址的地方使用 {url}。" msgid "Use a dedicated modal to set a message history threshold date for members who don't have the {readMessageHistoryPermissionLabel} permission." msgstr "使用专用弹窗,为没有 {readMessageHistoryPermissionLabel} 权限的成员设置消息历史记录截止日期。" +#. Text button on the browser approval page that goes back to choosing which account signs in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:149 +msgid "Use a different account" +msgstr "使用其他账号" + #: src/features/auth/flow/instance_selector/InstancePickerRows.tsx:267 msgid "Use a self-hosted instance URL" msgstr "使用自托管实例网址" @@ -39296,10 +39387,6 @@ msgstr "请验证你的邮箱,以便购买 {premiumProductFullName}。" msgid "Verify your email to start DMs." msgstr "验证邮箱后才能发起私信。" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:142 -msgid "Verifying code…" -msgstr "正在核对验证码…" - #: src/features/auth/components/pages/ResetPasswordPage.tsx:145 msgid "Verifying your reset link…" msgstr "正在验证你的重置链接…" @@ -40073,10 +40160,6 @@ msgstr "请稍后再删除其他消息。" msgid "Wait between messages. Members with \"{bypassSlowmodePermissionLabel}\" can bypass this." msgstr "消息之间的等待时间。拥有“{bypassSlowmodePermissionLabel}”权限的成员可以绕过此限制。" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:445 -msgid "Waiting for browser approval." -msgstr "正在等待浏览器批准。" - #. Tooltip explaining that video / screen share controls are gated while the voice connection is not yet ready. #: src/features/voice/components/voice_connection_status/LocalParticipantControls.tsx:45 msgid "Waiting for connection..." @@ -40118,10 +40201,6 @@ msgstr "唤醒" msgid "Warning" msgstr "警告" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:158 -msgid "Was this you?" -msgstr "是你本人吗?" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:243 msgctxt "us-state" @@ -40959,10 +41038,6 @@ msgstr "你已拥有终身 {premiumProductName}" msgid "You already have this connection." msgstr "你已添加此连接。" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:87 -msgid "You are about to authorize an app to sign in to your account. Only continue if you initiated this request from a device you control." -msgstr "你即将授权一个应用登录你的账号。请仅在你从自己控制的设备发起此请求时继续。" - #. External link warning title. productName is the Fluxer product name. #: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:22 msgid "You are about to leave {productName}" @@ -41732,6 +41807,11 @@ msgstr "你使用的是旧价格。此套餐的当前价格为 {currentSubscript msgid "You're sending messages too quickly" msgstr "你发送消息的速度太快了" +#. Title of the browser page after the user approved signing in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:282 +msgid "You're signed in" +msgstr "您已登录" + #. Status text on the screen-share hover popout shown to the local streamer. Lightly playful tone. #: src/features/voice/components/StreamWatchHoverPopout.tsx:43 msgid "You're streaming!" 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 900e3b76f..b2bbde0ab 100644 --- a/fluxer_app/src/features/i18n/locales/zh-TW/messages.po +++ b/fluxer_app/src/features/i18n/locales/zh-TW/messages.po @@ -1573,7 +1573,7 @@ msgid "{imageCount, plural, one {# image} other {# images}}, {videoCount, plural msgstr "{imageCount, plural, one {# 張圖片} other {# 張圖片}}, {videoCount, plural, one {# 個影片} other {# 個影片}}" #. Explanation shown when the selected instance advertises no web app endpoint. Instance name is interpolated. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:76 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:61 msgid "{instanceName} does not publish a web address, so sign-in cannot be handed to a browser." msgstr "{instanceName} 並未發布網頁位址,因此無法將登入作業交由瀏覽器處理。" @@ -2777,14 +2777,6 @@ msgstr "豐富的嵌入內容或連結預覽(非上傳檔案)" msgid "A separate profile for each community" msgstr "每個社群的獨立個人檔案" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:164 -msgid "A sign-in request was made for your account. Only approve if you initiated it." -msgstr "您的帳號收到一項登入請求。只有在這是您本人發起時才核准。" - -#: src/features/auth/flow/HandoffApprovalFlow.tsx:162 -msgid "A sign-in request was made from the following device. Only approve if you recognize it." -msgstr "以下裝置發出了登入請求。只有在您認得這台裝置時才核准。" - #. Description for has:sticker. Sentence case, no trailing punctuation. #: src/features/search/utils/SearchUtils.ts:51 msgid "a sticker" @@ -4811,10 +4803,6 @@ msgstr "套用到所有社群" msgid "Approval required" msgstr "需要核准" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:206 -msgid "Approve" -msgstr "核准" - #. Hint under the sign-in option on fluxer.com that pairs a newly installed app with the old installed app. productName is the app name. #: src/features/auth/flow/AuthLoginLayout.tsx:101 msgid "Approve this app from the {productName} app you already use. No password needed." @@ -7873,6 +7861,11 @@ msgstr "正在檢查存取權限…" msgid "Checking screen recording permission..." msgstr "正在檢查螢幕錄製權限…" +#. Title while the browser looks up the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:224 +msgid "Checking the sign-in request…" +msgstr "正在檢查登入要求…" + #. Settings search synonym. Used to match this term when the user types it in the settings search bar. #: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:67 msgid "Checkout" @@ -8847,6 +8840,11 @@ msgstr "程式碼區塊" msgid "Code expired" msgstr "驗證碼已過期" +#. Label of the field in the browser where the user types the 12-character code shown in the desktop or mobile app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:28 +msgid "Code from the {productName} app" +msgstr "來自 {productName} 應用程式的驗證碼" + #. Short label in the authentication claim account modal. Keep the tone plain and specific. #. Success toast on the verification step of the DSA report flow after resending the email verification code. #: src/features/auth/components/modals/ClaimAccountModal.tsx:41 @@ -9348,7 +9346,6 @@ msgstr "完全對其他使用者隱藏您的 {premiumProductName} 徽章" #: src/features/auth/components/pages/SsoCallbackPage.tsx:256 #: src/features/auth/components/pages/SsoCallbackPage.tsx:322 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:216 msgid "Completing sign-in…" msgstr "正在完成登入…" @@ -9782,7 +9779,6 @@ msgstr "按一下左鍵(在按鈕上)或按一下右鍵(在其他元素上 #: src/features/auth/components/modals/DeviceRevokeModal.tsx:77 #: src/features/auth/components/modals/PasskeyPinModal.tsx:111 #: src/features/auth/components/pages/oauth_authorize_page/OAuthAccountStep.tsx:36 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/connection/components/modals/AddConnectionModal.tsx:384 #: src/features/i18n/utils/CommonMessageDescriptors.ts:726 #: src/features/user/components/modals/FluxerTagChangeModal.tsx:413 @@ -9790,6 +9786,11 @@ msgstr "按一下左鍵(在按鈕上)或按一下右鍵(在其他元素上 msgid "Continue" msgstr "繼續" +#. Title in the desktop app while it waits for the user to sign in on the browser page it opened. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:177 +msgid "Continue in your browser" +msgstr "在瀏覽器中繼續" + #. Button in the gift time confirmation that proceeds to subscription checkout. #: src/features/app/components/dialogs/components/plutonium/hooks/useCheckoutActions.tsx:145 msgid "Continue to checkout" @@ -10437,7 +10438,7 @@ msgid "Couldn't close DM" msgstr "無法關閉私訊" #. Desktop handoff flow error shown when finalizing the sign-in fails after a valid code. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:21 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:34 msgid "Couldn't complete sign-in. Try again." msgstr "無法完成登入。請再試一次。" @@ -10831,6 +10832,11 @@ msgstr "無法開始 {blueskyProviderName} 授權" msgid "Couldn't start checkout" msgstr "無法開始結帳" +#. Shown in the desktop app when the browser sign-in request could not be created. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:66 +msgid "Couldn't start signing in with your browser." +msgstr "無法透過瀏覽器開始登入。" + #. Toast error shown when creating a new account connection fails. #: src/features/connection/commands/ConnectionCommands.ts:27 msgid "Couldn't start the connection" @@ -10942,7 +10948,7 @@ msgid "Couldn't upload banner" msgstr "無法上傳橫幅" #. Desktop handoff flow error shown when verifying the pairing code fails for an unexpected reason. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:17 +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:30 msgid "Couldn't verify that code. Try again." msgstr "無法驗證該代碼。請再試一次。" @@ -12503,7 +12509,6 @@ msgstr "緊湊模式" #. Short label in the settings dialog permission components. Keep the tone plain and specific. #: src/features/app/components/dialogs/shared/PermissionComponents.tsx:16 -#: src/features/auth/flow/HandoffApprovalFlow.tsx:203 msgid "Deny" msgstr "拒絕" @@ -14910,15 +14915,16 @@ msgstr "請輸入驗證器應用程式中的 {digitCount} 位數驗證碼,或 msgid "Enter the {digitCount}-digit code from your authenticator app." msgstr "請輸入驗證器應用程式中的 {digitCount} 位數驗證碼。" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:108 -msgid "Enter the code" -msgstr "輸入驗證碼" - #. Inline validation error on the verification step of the DSA report flow when the code field is empty. #: src/features/moderation/components/pages/ReportPage.tsx:74 msgid "Enter the code before continuing." msgstr "請先輸入驗證碼再繼續。" +#. Title of the browser page where the user types the 12-character code the app shows under Signing in on another device. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +msgid "Enter the code from the {PRODUCT_NAME} app" +msgstr "在 {PRODUCT_NAME} app 中輸入驗證碼" + #. Body text in the authentication sudo verification modal. Keep the tone plain and specific. #: src/features/auth/components/modals/SudoVerificationModal.tsx:56 msgid "Enter the code from your authenticator app." @@ -14933,10 +14939,6 @@ msgstr "請輸入傳送到您目前電子郵件的驗證碼。" msgid "Enter the code sent to your email address." msgstr "請輸入寄到您電子郵件地址的驗證碼。" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:111 -msgid "Enter the code shown in the app to continue." -msgstr "請輸入應用程式中顯示的代碼以繼續。" - #: src/features/user/components/modals/BouncedEmailChangeModal.tsx:157 #: src/features/user/components/modals/EmailChangeModal.tsx:244 msgid "Enter the code we emailed to your new address." @@ -14959,6 +14961,11 @@ msgstr "請輸入您想使用的新電子郵件。我們稍後會將驗證碼傳 msgid "Enter the PIN for your security key to continue." msgstr "請輸入安全金鑰的 PIN 以繼續。" +#. Title in the desktop app above the code the user types into a browser on another device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:228 +msgid "Enter this code in your browser" +msgstr "在瀏覽器中輸入此代碼" + #: src/features/auth/flow/HandoffCodeDisplay.tsx:132 msgid "Enter this code in your browser to complete sign-in." msgstr "請在瀏覽器中輸入此代碼以完成登入。" @@ -15362,7 +15369,7 @@ msgstr "將於 {earliest} 到 {latest} 之間到期" msgid "Expires in {remaining}s" msgstr "{remaining} 秒後到期" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:374 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:250 msgid "Expires in {remainingSeconds}s" msgstr "將於 {remainingSeconds} 秒後過期" @@ -16165,7 +16172,7 @@ msgid "Fluxer" msgstr "Fluxer" #. Status shown when browser sign-in status polling gives up after repeated failures. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:72 +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:57 msgid "Fluxer stopped checking whether the browser approved this sign-in. It didn't lose your code." msgstr "Fluxer 已停止檢查瀏覽器是否核准此登入。您的驗證碼並未遺失。" @@ -16952,8 +16959,6 @@ msgstr "產生可分享的連結,或複製合併後的自訂 CSS。" msgid "Generate invite link" msgstr "產生邀請連結" -#. Button label that replaces an expired browser sign-in code with a fresh one. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:64 #: src/features/auth/flow/HandoffCodeDisplay.tsx:117 msgid "Generate new code" msgstr "產生新代碼" @@ -17348,6 +17353,16 @@ msgstr "返回並輸入有效的電子郵件。" msgid "Go back to {productName} to continue." msgstr "返回 {productName} 以繼續。" +#. Shown after approving a sign-in for an app on another device, which signs in by itself shortly. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:292 +msgid "Go back to the {PRODUCT_NAME} app. It finishes signing in on its own." +msgstr "返回 {PRODUCT_NAME} App。它會自行完成登入。" + +#. Shown after approving, when the browser has already handed the sign-in back to the desktop app. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:288 +msgid "Go back to the {PRODUCT_NAME} app. You can close this tab." +msgstr "回到 {PRODUCT_NAME} app。你可以關閉這個分頁。" + #. Accessible label for the community row of an expression info card, which opens a community the viewer is already a member of. {communityName} is the community name. #: src/features/expressions/components/ExpressionInfoCard.tsx:89 msgid "Go to {communityName}" @@ -19295,11 +19310,6 @@ msgstr "JSON 無效。請貼上來自上方網址的完整回應。" msgid "Invalid or expired code" msgstr "驗證碼無效或已過期" -#. Desktop handoff flow error shown when the entered pairing code is invalid or expired. -#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:13 -msgid "Invalid or expired code. Try again." -msgstr "代碼無效或已過期。請再試一次。" - #. Short label in the authentication authorize flow. Keep the tone plain and specific. #: src/features/auth/components/pages/oauth_authorize_page/state/useAuthorizeFlow.ts:82 msgid "Invalid redirect_uri" @@ -20876,7 +20886,7 @@ msgstr "地區時間格式" msgid "Localization" msgstr "在地化" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:192 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:109 #: src/features/user/components/modals/tabs/DevicesTab.tsx:152 msgid "Location" msgstr "地點" @@ -21034,6 +21044,11 @@ msgstr "要將 {userName} 設為群組擁有者嗎?您將會失去擁有者權 msgid "Make group owner" msgstr "設為群組擁有者" +#. Shown above the code on the browser approval page when the app cannot be signed in automatically. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:253 +msgid "Make sure this code matches the one in the {PRODUCT_NAME} app." +msgstr "請確認此代碼與 {PRODUCT_NAME} 應用程式中的代碼相符。" + #. Setup wizard branding step title. #: src/features/app/components/setup/SetupWizardSteps.tsx:166 msgid "Make the instance yours" @@ -24668,6 +24683,11 @@ msgstr "自 <0>{listPriceEffectiveDate} 起,您的訂閱將從 {listPriceC msgid "On click" msgstr "點擊時" +#. One line explanation in the desktop app above the code. signInAddress is the web address of the sign-in page, such as web.fluxer.app/login?handoff=1. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:236 +msgid "On your other device, sign in at {signInAddress} and enter this code when asked." +msgstr "在你的其他裝置上,請前往 {signInAddress} 登入,並在要求時輸入此代碼。" + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:715 msgid "Once deleted, the application and its credentials are permanently removed." msgstr "一旦刪除,應用程式和其憑證將永久移除。" @@ -24733,6 +24753,11 @@ msgstr "僅限提及" msgid "Only applies on wide screens." msgstr "僅適用於寬螢幕。" +#. Warning under the title of the browser approval page, so people do not approve a sign-in someone else started. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:245 +msgid "Only continue if you started this sign-in on a device you control." +msgstr "請確認您是在自己控制的裝置上開始此登入流程。" + #. Body copy in the mature content check modal. #: src/features/auth/components/modals/MatureContentCheckModal.tsx:32 msgid "Only credit cards are accepted. Debit and prepaid cards cannot be used for the mature content check." @@ -24921,6 +24946,11 @@ msgstr "開啟{landmarkName}" msgid "Open {premiumProductFullName}" msgstr "開啟 {premiumProductFullName}" +#. Button on the browser page after approving that opens the desktop app again if it did not come to the front. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:304 +msgid "Open {PRODUCT_NAME}" +msgstr "開啟 {PRODUCT_NAME}" + #. Button label that opens the desktop app. productName is the app name. #. Button that hands SSO sign-in back to the mobile app. productName is the app name. #: src/features/auth/components/pages/SsoCallbackPage.tsx:47 @@ -25011,12 +25041,15 @@ msgstr "開啟橫幅選項" msgid "Open bookmarks" msgstr "開啟書籤" -#. Button label that opens the browser sign-in handoff page. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:56 #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:184 msgid "Open browser" msgstr "開啟瀏覽器" +#. Button in the desktop app that reopens the browser sign-in page while the app waits for the browser. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:53 +msgid "Open browser again" +msgstr "再開一次瀏覽器" + #. Primary button in the screen-share picker on web. Hands off to the browser's native getDisplayMedia picker. #: src/features/voice/components/modals/ScreenSharePickerModal.tsx:209 msgid "Open browser picker" @@ -25392,10 +25425,6 @@ msgstr "開啟語音與視訊設定" msgid "Open with {accountName} on {instanceName}" msgstr "在 {instanceName} 上以 {accountName} 開啟" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:414 -msgid "Open your browser to finish signing in." -msgstr "在瀏覽器中完成登入。" - #: src/features/auth/flow/BrowserLoginHandoffModal.tsx:137 msgid "Open your browser, sign in, then enter the code below to link your account." msgstr "開啟您的瀏覽器,登入後輸入以下代碼,即可連結您的帳號。" @@ -25421,7 +25450,7 @@ msgstr "開啟成員頁面。按空白鍵或 Enter 鍵開啟。" #. Short label in the language tab. Keep it concise. #. Spellcheck engine option in the textarea spellcheck submenu. Uses the host operating system spellchecker. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:182 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:99 #: src/features/channel/components/textarea/TextareaContextMenu.tsx:79 #: src/features/user/components/modals/tabs/LanguageTab.tsx:110 msgid "Operating system" @@ -26439,7 +26468,7 @@ msgstr "方案" msgid "Plans, perks, gifts and your subscription all live on one page." msgstr "方案、福利、禮物和你的訂閱都在同一個頁面上。" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:172 +#: src/features/auth/flow/HandoffApprovalFlow.tsx:89 msgid "Platform" msgstr "平台" @@ -31859,11 +31888,6 @@ msgstr "顯示聊天" msgid "Show chat with {count, plural, one {# unread message} other {# unread messages}}" msgstr "顯示聊天,有 {count, plural, one {# 則未讀訊息} other {# 則未讀訊息}}" -#. Button label that opens the manual browser handoff code fallback. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:60 -msgid "Show code" -msgstr "顯示代碼" - #. Developer voice status menu option for displaying the voice connection identifier. #: src/features/voice/components/voice_connection_status/VoiceConnectionStatusInner.tsx:76 msgid "Show connection ID" @@ -32306,7 +32330,9 @@ msgstr "在社群標頭下方的獨立區塊中顯示橫幅。" msgid "Sidebar" msgstr "側邊欄" +#. Button in the browser that approves signing in to the desktop or mobile app that asked for it. #. Generic authentication action label. Use for buttons, links, page titles, and accessible labels. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:33 #: src/features/i18n/utils/CommonMessageDescriptors.ts:79 msgid "Sign in" msgstr "登入" @@ -32321,10 +32347,35 @@ msgstr "再次登入" msgid "Sign in again as {accountLabel}" msgstr "再次登入 {accountLabel}" +#. Shown in the desktop app while it waits for the browser. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:193 +msgid "Sign in to {instanceName} in your browser and confirm. This app finishes signing in on its own." +msgstr "在瀏覽器中登入 {instanceName} 並確認。此應用程式會自行完成登入。" + +#. Shown in the desktop app above the code when the browser cannot return the sign-in automatically. instanceName is the server name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:189 +msgid "Sign in to {instanceName} in your browser, and check that it shows this code:" +msgstr "在瀏覽器中登入 {instanceName},並檢查是否顯示此代碼:" + #: src/features/auth/flow/GiftHeader.tsx:33 msgid "Sign in to claim your gift" msgstr "登入以領取您的禮物" +#. Title of the browser page where the user approves signing in to an app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:71 +msgid "Sign in to the {PRODUCT_NAME} app" +msgstr "登入 {PRODUCT_NAME} 應用程式" + +#. Title of the browser page where the user approves signing in to the desktop app that opened it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:58 +msgid "Sign in to the {PRODUCT_NAME} desktop app" +msgstr "登入 {PRODUCT_NAME} 桌面應用程式" + +#. Title of the browser page where the user approves signing in to the mobile app that asked for it. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:65 +msgid "Sign in to the {PRODUCT_NAME} mobile app" +msgstr "登入 {PRODUCT_NAME} 行動應用程式" + #. Action label that starts passkey authentication. #: src/features/auth/AuthMessageDescriptors.ts:13 msgid "Sign in with a passkey" @@ -32403,14 +32454,10 @@ msgstr "將其他裝置從您的帳號登出" msgid "Sign out?" msgstr "要登出嗎?" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:234 -msgid "Sign-in approved" -msgstr "已核准登入" - -#. Short label in the authentication handoff approval flow. Keep the tone plain and specific. -#: src/features/auth/flow/HandoffApprovalFlow.tsx:26 -msgid "Sign-in code" -msgstr "登入驗證碼" +#. Title of the browser page after the user cancelled the sign-in request from the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:322 +msgid "Sign-in cancelled" +msgstr "登入已取消" #. Section title for email address and password controls in the account security tab. Keep it concise. #: src/features/user/components/modals/tabs/account_security_tab/AccountSecuritySections.tsx:23 @@ -32433,10 +32480,6 @@ msgstr "登入流程" msgid "Sign-in method" msgstr "登入方式" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:84 -msgid "Sign-in request" -msgstr "登入要求" - #. Aria label on the signal-strength icon shown while the first latency sample is still pending. #: src/features/voice/components/SignalStrengthIcon.tsx:16 msgid "Signal strength loading" @@ -32453,6 +32496,21 @@ msgstr "已登入" msgid "Signed-in devices" msgstr "已登入的裝置" +#. Shown on the browser approval page above the buttons. name is the display name of the account that will be signed in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:137 +msgid "Signing in as {name}" +msgstr "以 {name} 身份登入" + +#. Text button in the desktop app that shows a code to type into a browser on a different device. +#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:207 +msgid "Signing in on another device?" +msgstr "在其他裝置上登入?" + +#. Title while the browser approves the sign-in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:228 +msgid "Signing in…" +msgstr "正在登入…" + #. Label for Bluesky OAuth signing key ID input. #: src/features/app/components/setup/SetupWizardSteps.tsx:1161 msgid "Signing key ID" @@ -33504,6 +33562,8 @@ msgstr "開始麥克風測試" msgid "Start minimized" msgstr "最小化啟動" +#. Button on the browser page after cancelling that goes back to choosing an account. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:337 #: src/features/moderation/components/report/ReportStepDetails.tsx:326 #: src/features/moderation/components/report/ReportStepEmail.tsx:97 #: src/features/moderation/components/report/ReportStepVerification.tsx:134 @@ -34910,6 +34970,11 @@ msgstr "泰文" msgid "Thank you for helping keep {productName} safe. We'll review your report as soon as possible." msgstr "感謝您協助維護 {productName} 的安全。我們會盡快審核您的檢舉。" +#. Error in the browser when a code typed from the app is not found. instanceHost is the server the browser checked, such as api.fluxer.app. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:25 +msgid "That code is not valid on {instanceHost}. Check the code in the {productName} app and try again." +msgstr "該代碼在 {instanceHost} 上無效。請檢查 {productName} 應用程式中的代碼,然後再試一次。" + #. Body of the passkey page after the passkey prompt failed or was dismissed. Keep plain. #: src/features/auth/passkey_migration/PasskeyBridgePage.tsx:36 msgid "That didn't work. Try again or cancel." @@ -34953,11 +35018,6 @@ msgstr "無法刪除這則訊息" msgid "That message is gone, or you lost access to the conversation." msgstr "這則訊息已不存在,或是您已無法存取該對話。" -#. Error shown when a browser sign-in handoff code expires before it is approved. -#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 -msgid "That sign-in code expired. Try again." -msgstr "登入代碼已過期。請再試一次。" - #. End-of-list line in the saved messages popout after every bookmark has been shown. #. End-of-list line on the saved messages page after every bookmark has been shown. #: src/features/messaging/components/pages/SavedMessagesPage.tsx:35 @@ -34965,6 +35025,21 @@ msgstr "登入代碼已過期。請再試一次。" msgid "That's all of them." msgstr "就這些了。" +#. Warning on the browser approval page when the app asked for a different account than the one chosen. requestedIdentifier is the email or username the app asked for, name is the chosen account's display name. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:131 +msgid "The {PRODUCT_NAME} app asked to sign in as {requestedIdentifier}, but you chose {name}." +msgstr "{PRODUCT_NAME} 要求登入的帳號是 {requestedIdentifier},但你選擇的是 {name}。" + +#. Explains where the code comes from, under the title of the browser page where it is typed. Signing in on another device is the label of a button in the app and must match its translation. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:187 +msgid "The {PRODUCT_NAME} app on your other device shows it under Signing in on another device. Only enter a code from a device you control." +msgstr "您在其他裝置上的 {PRODUCT_NAME} App 中,可以在「在其他裝置上登入」下方找到。請只輸入您控制的裝置上的驗證碼。" + +#. Shown after the user cancelled the sign-in request in the browser. PRODUCT_NAME is the app name, such as Fluxer. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:327 +msgid "The {PRODUCT_NAME} app was not signed in. You can close this tab." +msgstr "{PRODUCT_NAME} 應用程式未登入。您可以關閉此分頁。" + #. Description text in the FluxerTag change modal. #: src/features/user/components/modals/FluxerTagChangeModal.tsx:70 msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase." @@ -34983,10 +35058,6 @@ msgstr "應用程式當機了" msgid "The app has crashed. Checking for updates that might fix this issue…" msgstr "應用程式當機了。正在檢查更新,或許能解決這個問題…" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:237 -msgid "The app should now be signed in to your account." -msgstr "應用程式現在應該已登入您的帳號。" - #. Activity log detail line under a lifted ban, for a temporary ban that had already ended on its own before it was lifted. A ban is the community ban, not the feature that blocks a user. {date} is when the ban ended, shown as a formatted date and time. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogMemberMessages.ts:55 msgid "The ban had already expired on {date}" @@ -35184,6 +35255,16 @@ msgctxt "screen-share" msgid "The screen share source stopped sending video, so your screen share was stopped." msgstr "螢幕分享來源已停止傳送視訊,因此您的螢幕分享已停止。" +#. Error shown in the desktop app when a browser sign-in request expires before it is approved in the browser. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:9 +msgid "The sign-in request expired before your browser approved it." +msgstr "登入要求已過期,您的瀏覽器尚未核准。" + +#. Error shown in the desktop app when the user pressed Cancel on the browser sign-in page. +#: src/features/auth/flow/browser_handoff/BrowserHandoffDescriptors.ts:14 +msgid "The sign-in was cancelled in your browser." +msgstr "瀏覽器上的登入已取消。" + #. Activity log detail line under a deleted sticker, shown only when someone other than the person who deleted it had uploaded it. {user} is the user who uploaded the sticker, shown as a clickable user chip. #: src/features/guild/utils/guild_tabs/audit_log/AuditLogExpressionMessageMessages.ts:100 msgid "The sticker was uploaded by {user}" @@ -35408,6 +35489,11 @@ msgstr "第三方" msgid "This account can't be blocked." msgstr "無法封鎖此帳號。" +#. Error in the browser when the chosen account belongs to a different server than the app that asked to sign in. accountHost and requestHost are server addresses. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:38 +msgid "This account is on {accountHost}, but the {productName} app is signing in to {requestHost}. Choose an account on {requestHost}." +msgstr "這個帳號位於 {accountHost},但 {productName} 應用程式正在登入 {requestHost}。請選擇一個位於 {requestHost} 的帳號。" + #: src/features/user/components/modals/tabs/applications_tab/ApplicationDetail.tsx:418 msgid "This action cannot be undone. All associated data, including the bot user, will be permanently deleted." msgstr "此動作無法復原。所有相關資料,包括機器人使用者,都將永久刪除。" @@ -35551,11 +35637,6 @@ msgstr "這會完全清除您的後端進階方案狀態,包含方案類型、 msgid "This code doesn't exist." msgstr "這個代碼不存在。" -#. Status shown under the browser sign-in code once its countdown reaches zero. -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:68 -msgid "This code expired." -msgstr "此代碼已過期。" - #. Gift redemption error modal body for an invalid or already used code. #: src/features/gift/commands/GiftCommands.tsx:37 msgid "This code is invalid or already used." @@ -36075,6 +36156,11 @@ msgstr "此重設連結已過期。重設連結有效時間為 1 小時。請重 msgid "This shows how links appear: {linkPreviewExampleUrl}" msgstr "這是連結的顯示方式:{linkPreviewExampleUrl}" +#. Error in the browser when the sign-in request from the desktop app no longer exists, because it expired or the app cancelled it. productName is the app name, such as Fluxer. +#: src/features/auth/flow/auth_login_core/useDesktopHandoffFlow.ts:20 +msgid "This sign-in request expired or was cancelled in the {productName} app. Start again from the app." +msgstr "這個登入要求已在 {productName} App 中過期或被取消。請從 App 中重新開始。" + #. Label above the community a sticker comes from in the sticker info card. #: src/features/expressions/components/ExpressionInfoCard.tsx:75 msgid "This sticker is from" @@ -38520,6 +38606,11 @@ msgstr "在要插入圖片網址的位置使用 {url}。" msgid "Use a dedicated modal to set a message history threshold date for members who don't have the {readMessageHistoryPermissionLabel} permission." msgstr "使用專屬的彈出視窗,為沒有「{readMessageHistoryPermissionLabel}」權限的成員設定訊息歷史記錄截止日期。" +#. Text button on the browser approval page that goes back to choosing which account signs in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:149 +msgid "Use a different account" +msgstr "改用其他帳號" + #: src/features/auth/flow/instance_selector/InstancePickerRows.tsx:267 msgid "Use a self-hosted instance URL" msgstr "使用自行託管的實例 URL" @@ -39296,10 +39387,6 @@ msgstr "請驗證您的電子郵件,才能購買 {premiumProductFullName}。" msgid "Verify your email to start DMs." msgstr "請驗證您的電子郵件以開始私訊。" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:142 -msgid "Verifying code…" -msgstr "正在驗證代碼…" - #: src/features/auth/components/pages/ResetPasswordPage.tsx:145 msgid "Verifying your reset link…" msgstr "正在驗證您的重設連結…" @@ -40073,10 +40160,6 @@ msgstr "請稍候再刪除其他訊息。" msgid "Wait between messages. Members with \"{bypassSlowmodePermissionLabel}\" can bypass this." msgstr "訊息之間的間隔時間。擁有「{bypassSlowmodePermissionLabel}」權限的成員可以略過此限制。" -#: src/features/auth/flow/auth_login_core/AuthLoginBrowserStep.tsx:445 -msgid "Waiting for browser approval." -msgstr "正在等待瀏覽器核准。" - #. Tooltip explaining that video / screen share controls are gated while the voice connection is not yet ready. #: src/features/voice/components/voice_connection_status/LocalParticipantControls.tsx:45 msgid "Waiting for connection..." @@ -40118,10 +40201,6 @@ msgstr "喚醒" msgid "Warning" msgstr "警告" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:158 -msgid "Was this you?" -msgstr "這是您本人嗎?" - #. US state name, shown next to the country name in the mature content gate. #: src/features/user/utils/UserGeo.ts:243 msgctxt "us-state" @@ -40959,10 +41038,6 @@ msgstr "您已擁有終身版 {premiumProductName}" msgid "You already have this connection." msgstr "您已經有這個連線了。" -#: src/features/auth/flow/HandoffApprovalFlow.tsx:87 -msgid "You are about to authorize an app to sign in to your account. Only continue if you initiated this request from a device you control." -msgstr "您即將授權應用程式登入您的帳號。請僅在您是從受您控制的裝置發起此請求時才繼續。" - #. External link warning title. productName is the Fluxer product name. #: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:22 msgid "You are about to leave {productName}" @@ -41732,6 +41807,11 @@ msgstr "您目前享有舊版費率。此方案目前的價格為 {currentSubscr msgid "You're sending messages too quickly" msgstr "您傳送訊息的速度太快了" +#. Title of the browser page after the user approved signing in to the app. +#: src/features/auth/flow/HandoffApprovalFlow.tsx:282 +msgid "You're signed in" +msgstr "您已成功登入" + #. Status text on the screen-share hover popout shown to the local streamer. Lightly playful tone. #: src/features/voice/components/StreamWatchHoverPopout.tsx:43 msgid "You're streaming!" diff --git a/fluxer_desktop/src/main/BrowserHandoff.test.mjs b/fluxer_desktop/src/main/BrowserHandoff.test.mjs index 509c3bdc0..eee997982 100644 --- a/fluxer_desktop/src/main/BrowserHandoff.test.mjs +++ b/fluxer_desktop/src/main/BrowserHandoff.test.mjs @@ -97,7 +97,7 @@ function createInstanceClient(routes) { }; } -function createHandoff(routes, {privileged = true} = {}) { +function createHandoff(routes, {privileged = true, returnUri = null} = {}) { const document = createDocument({privileged}); const instance = createInstanceClient(routes); const warnings = []; @@ -108,6 +108,7 @@ function createHandoff(routes, {privileged = true} = {}) { onWatcherFailure: (error, reason) => warnings.push({message: reason, args: [error]}), }), selectedInstanceClient: instance.client, + returnUri: () => returnUri, }); return {document, handoff, requests: instance.requests, routes: handoff.ipcRoutes(), warnings}; } @@ -115,10 +116,19 @@ function createHandoff(routes, {privileged = true} = {}) { const INITIATE_PATH = '/api/v1/auth/handoff/initiate'; const STATUS_PATH = `/api/v1/auth/handoff/${encodeURIComponent(CODE)}/status`; -function initiateRoute({pollSecret = 'poll-secret-value'} = {}) { - return () => jsonResponse(200, {code: CODE, expires_at: futureTimestamp(), poll_secret: pollSecret}); +function initiateRoute({pollSecret = 'poll-secret-value', returnMethod} = {}) { + return () => + jsonResponse(200, { + code: CODE, + expires_at: futureTimestamp(), + poll_secret: pollSecret, + ...(returnMethod == null ? {} : {return_method: returnMethod}), + }); } +const RETURN_URI = 'fluxer://handoff'; +const GRANT = 'grant-value_42'; + function completedStatus() { return jsonResponse(200, {status: 'completed', token: 'token-42', user_id: '42', user: COMPLETED_USER}); } @@ -319,6 +329,85 @@ describe('the main-process browser handoff transport', () => { }); }); +describe('the main-process handoff return through the deep link', () => { + test('asks for a deep link return only when the app can receive one', async () => { + const registered = createHandoff( + {[`POST ${INITIATE_PATH}`]: initiateRoute({returnMethod: 'deep_link'})}, + {returnUri: RETURN_URI}, + ); + const unregistered = createHandoff({[`POST ${INITIATE_PATH}`]: initiateRoute({returnMethod: 'code'})}); + + const linked = await registered.routes[DESKTOP_HANDOFF_CHANNELS.initiate](registered.document.event, INSTANCE); + const typed = await unregistered.routes[DESKTOP_HANDOFF_CHANNELS.initiate](unregistered.document.event, INSTANCE); + + assert.deepEqual(registered.requests[0].body, {return_uri: RETURN_URI}); + assert.equal(linked.returnMethod, 'deep_link'); + assert.equal(unregistered.requests[0].body, null); + assert.equal(typed.returnMethod, 'code'); + }); + + test('falls back to the code when the instance does not confirm the deep link return', async () => { + const {document, routes} = createHandoff({[`POST ${INITIATE_PATH}`]: initiateRoute()}, {returnUri: RETURN_URI}); + + const session = await routes[DESKTOP_HANDOFF_CHANNELS.initiate](document.event, INSTANCE); + + assert.equal(session.returnMethod, 'code'); + }); + + test('presents the grant from the return link with the poll secret and never hands it to the renderer', async () => { + const {document, handoff, routes, requests} = createHandoff( + { + [`POST ${INITIATE_PATH}`]: initiateRoute({returnMethod: 'deep_link'}), + [`POST ${STATUS_PATH}`]: (call) => (call === 2 ? jsonResponse(200, {status: 'pending'}) : completedStatus()), + }, + {returnUri: RETURN_URI}, + ); + + const session = await routes[DESKTOP_HANDOFF_CHANNELS.initiate](document.event, INSTANCE); + assert.deepEqual(await routes[DESKTOP_HANDOFF_CHANNELS.status](document.event, session.code), {status: 'pending'}); + handoff.acceptReturnLink(new URL(`${RETURN_URI}?code=${CODE.toLowerCase()}&grant=${GRANT}`)); + const result = await routes[DESKTOP_HANDOFF_CHANNELS.status](document.event, session.code); + + assert.equal(result.status, 'completed'); + assert.deepEqual(requests[1].body, {poll_secret: 'poll-secret-value'}); + assert.deepEqual(requests[2].body, {poll_secret: 'poll-secret-value', grant: GRANT}); + assert.equal(JSON.stringify(result).includes(GRANT), false); + }); + + test('ignores a return link for a request this app is not waiting on', async () => { + const {document, handoff, routes, requests, warnings} = createHandoff( + { + [`POST ${INITIATE_PATH}`]: initiateRoute({returnMethod: 'deep_link'}), + [`POST ${STATUS_PATH}`]: () => jsonResponse(200, {status: 'pending'}), + }, + {returnUri: RETURN_URI}, + ); + + const session = await routes[DESKTOP_HANDOFF_CHANNELS.initiate](document.event, INSTANCE); + handoff.acceptReturnLink(new URL(`${RETURN_URI}?code=ZZZZZZ-999999&grant=${GRANT}`)); + handoff.acceptReturnLink(new URL(`${RETURN_URI}?code=${CODE}&grant=not%20valid`)); + await routes[DESKTOP_HANDOFF_CHANNELS.status](document.event, session.code); + + assert.deepEqual(requests[1].body, {poll_secret: 'poll-secret-value'}); + assert.equal(warnings.length, 2); + }); + + test('reports a request the browser declined and releases the session', async () => { + const {document, routes} = createHandoff({ + [`POST ${INITIATE_PATH}`]: initiateRoute(), + [`POST ${STATUS_PATH}`]: () => jsonResponse(200, {status: 'denied'}), + }); + + const session = await routes[DESKTOP_HANDOFF_CHANNELS.initiate](document.event, INSTANCE); + assert.deepEqual(await routes[DESKTOP_HANDOFF_CHANNELS.status](document.event, session.code), {status: 'denied'}); + + await assert.rejects( + () => routes[DESKTOP_HANDOFF_CHANNELS.status](document.event, session.code), + /not active for this renderer document/, + ); + }); +}); + describe('the browser handoff preload bridge', () => { test('reaches the two registered main-process channels and nothing else', async () => { const {document, routes} = createHandoff({ diff --git a/fluxer_desktop/src/main/BrowserHandoff.ts b/fluxer_desktop/src/main/BrowserHandoff.ts index 9ecac17f1..9f874c346 100644 --- a/fluxer_desktop/src/main/BrowserHandoff.ts +++ b/fluxer_desktop/src/main/BrowserHandoff.ts @@ -18,7 +18,11 @@ import type { DesktopHandoffStatusResult, DesktopHandoffUser, } from '@fluxer/desktop_ipc/src/BrowserHandoffContract'; -import {DESKTOP_HANDOFF_CHANNELS, DesktopHandoffStatus} from '@fluxer/desktop_ipc/src/BrowserHandoffContract'; +import { + DESKTOP_HANDOFF_CHANNELS, + DesktopHandoffReturnMethod, + DesktopHandoffStatus, +} from '@fluxer/desktop_ipc/src/BrowserHandoffContract'; const RENDERER_CONTEXT = 'Browser sign-in handoff'; const INITIATION_CONTEXT = 'Desktop handoff initiation'; @@ -32,6 +36,7 @@ const HANDOFF_TOKEN_MAX_LENGTH = 4096; const HANDOFF_API_VERSION_MAX = 1000; const HANDOFF_CODE_PATTERN = /^[A-Za-z0-9-]{1,64}$/u; const HANDOFF_POLL_SECRET_PATTERN = /^[A-Za-z0-9_-]{1,256}$/u; +const HANDOFF_CODE_SEPARATOR_PATTERN = /[^A-Za-z0-9]/gu; const TRAILING_SLASH_PATTERN = /\/+$/u; interface BrowserHandoffLogger { @@ -42,6 +47,7 @@ interface DesktopBrowserHandoffDependencies { readonly logger: BrowserHandoffLogger; readonly rendererDocumentOwners: RendererDocumentOwnerFactory; readonly selectedInstanceClient: DesktopSelectedInstanceClient; + readonly returnUri: () => string | null; } interface ActiveHandoffSession { @@ -53,6 +59,7 @@ interface ActiveHandoffSession { readonly watcher: RendererDocumentOwnerWatcher; inFlight: Promise | null; pollSecret: string | null; + grant: string | null; } interface HandoffJSONRequest { @@ -144,6 +151,10 @@ function requireHandoffCode(value: unknown): string { return value; } +function normalizeHandoffCode(value: string): string { + return value.replace(HANDOFF_CODE_SEPARATOR_PATTERN, '').toUpperCase(); +} + function readHandoffUser(value: unknown): DesktopHandoffUser | null { if (!isRecord(value)) { return null; @@ -172,6 +183,9 @@ function readHandoffStatusResult(payload: Record | null): Deskt if (payload.status === DesktopHandoffStatus.EXPIRED) { return {status: DesktopHandoffStatus.EXPIRED}; } + if (payload.status === DesktopHandoffStatus.DENIED) { + return {status: DesktopHandoffStatus.DENIED}; + } if (payload.status !== DesktopHandoffStatus.COMPLETED) { return {status: DesktopHandoffStatus.PENDING}; } @@ -198,6 +212,26 @@ export class DesktopBrowserHandoff { }); } + public acceptReturnLink(url: URL): void { + const code = url.searchParams.get('code'); + const grant = url.searchParams.get('grant'); + if (code == null || !HANDOFF_CODE_PATTERN.test(code) || grant == null || !HANDOFF_POLL_SECRET_PATTERN.test(grant)) { + this.dependencies.logger.warn('[BrowserHandoff] Ignored a malformed sign-in return link'); + return; + } + const normalizedCode = normalizeHandoffCode(code); + const session = [...this.sessions.values()].find( + (candidate) => normalizeHandoffCode(candidate.code) === normalizedCode, + ); + if (session == null || session.pollSecret == null) { + this.dependencies.logger.warn( + '[BrowserHandoff] Ignored a sign-in return link for a request this app is not waiting on', + ); + return; + } + session.grant = grant; + } + public cleanup(): void { for (const frame of [...this.sessions.keys()]) { this.releaseFrame(frame); @@ -208,7 +242,14 @@ export class DesktopBrowserHandoff { const owner = this.dependencies.rendererDocumentOwners.capture(event, RENDERER_CONTEXT); const instance = requireDesktopHandoffInstance(request); const origin = requireDesktopHTTPOrigin(new URL(instance.apiEndpoint).origin); - const response = await this.requestJSON({instance, origin, method: 'POST', path: HANDOFF_INITIATE_PATH}); + const returnUri = this.dependencies.returnUri(); + const response = await this.requestJSON({ + ...(returnUri == null ? {} : {body: {return_uri: returnUri}}), + instance, + origin, + method: 'POST', + path: HANDOFF_INITIATE_PATH, + }); if (response.status !== HttpStatus.OK && response.status !== HttpStatus.CREATED) { throw new DesktopHandoffHTTPStatusError(INITIATION_CONTEXT, response.status); } @@ -223,9 +264,15 @@ export class DesktopBrowserHandoff { } const pollSecret = boundedString(response.payload.poll_secret, HANDOFF_FIELD_MAX_LENGTH); const usablePollSecret = pollSecret != null && HANDOFF_POLL_SECRET_PATTERN.test(pollSecret) ? pollSecret : null; + const returnMethod = + returnUri != null && + usablePollSecret != null && + response.payload.return_method === DesktopHandoffReturnMethod.DEEP_LINK + ? DesktopHandoffReturnMethod.DEEP_LINK + : DesktopHandoffReturnMethod.CODE; owner.requireCurrent(RENDERER_CONTEXT); - this.rememberSession(owner, {code, expiresAtMs, instance, origin, pollSecret: usablePollSecret}); - return {instance, code, expiresAt}; + this.rememberSession(owner, {code, expiresAtMs, instance, origin, pollSecret: usablePollSecret, grant: null}); + return {instance, code, expiresAt, returnMethod}; } private async status(event: RendererDocumentIpcEvent, codeValue: unknown): Promise { @@ -261,7 +308,10 @@ export class DesktopBrowserHandoff { let response: HandoffJSONResponse | null = null; if (session.pollSecret != null) { const attempt = await this.requestJSON({ - body: {poll_secret: session.pollSecret}, + body: + session.grant == null + ? {poll_secret: session.pollSecret} + : {poll_secret: session.pollSecret, grant: session.grant}, instance: session.instance, method: 'POST', origin: session.origin, diff --git a/fluxer_desktop/src/main/DeepLinks.ts b/fluxer_desktop/src/main/DeepLinks.ts index ac380b5f4..25b53a281 100644 --- a/fluxer_desktop/src/main/DeepLinks.ts +++ b/fluxer_desktop/src/main/DeepLinks.ts @@ -8,9 +8,11 @@ import {app, ipcMain} from 'electron'; import log from 'electron-log'; let initialDeepLink: string | null = null; +let handoffReturnLinkSink: ((url: URL) => void) | null = null; const DUPLICATE_URL_SUPPRESS_MS = 1500; const APP_PROTOCOL_SCHEME = `${APP_PROTOCOL}:`; +const HANDOFF_RETURN_HOST = 'handoff'; const DEEP_LINK_RENDERER_PAYLOAD_BLOCKLIST = /["'<>\\|\t\r\n]/; const INSTANCE_DESIGNATING_KEYS = new Set([ 'api', @@ -91,6 +93,25 @@ function extractDeepLinkFromArgv(argv: ReadonlyArray): string | null { return argv.find(isAppProtocolUrl) ?? null; } +export function setHandoffReturnLinkSink(sink: ((url: URL) => void) | null): void { + handoffReturnLinkSink = sink; +} + +function parseHandoffReturnLink(rawUrl: string): URL | null { + try { + const parsed = new URL(rawUrl); + if ( + parsed.protocol.toLowerCase() !== APP_PROTOCOL_SCHEME || + parsed.hostname.toLowerCase() !== HANDOFF_RETURN_HOST + ) { + return null; + } + return parsed; + } catch { + return null; + } +} + function normalizeDeepLinkForRenderer(rawUrl: string): string | null { try { const parsed = new URL(rawUrl); @@ -135,7 +156,7 @@ function deliverDeepLinkHeldByTakeover(): void { function registerInitialDeepLinkHandler(): void { const deepLinkArg = extractDeepLinkFromArgv(process.argv); - if (deepLinkArg) { + if (deepLinkArg && parseHandoffReturnLink(deepLinkArg) == null) { const normalized = normalizeDeepLinkForRenderer(deepLinkArg); if (normalized) { initialDeepLink = normalized; @@ -151,6 +172,12 @@ function registerInitialDeepLinkHandler(): void { } function dispatchDeepLink(url: string): void { + const handoffReturnLink = parseHandoffReturnLink(url); + if (handoffReturnLink != null) { + handoffReturnLinkSink?.(handoffReturnLink); + showWindow(); + return; + } const normalized = normalizeDeepLinkForRenderer(url); if (!normalized || shouldSuppressAsDuplicate(normalized)) return; recordRecentDeepLink(url); diff --git a/fluxer_desktop/src/main/IpcHandlers.ts b/fluxer_desktop/src/main/IpcHandlers.ts index c98e8472f..0e9e50507 100644 --- a/fluxer_desktop/src/main/IpcHandlers.ts +++ b/fluxer_desktop/src/main/IpcHandlers.ts @@ -1,6 +1,6 @@ // SPDX-License-Identifier: AGPL-3.0-or-later -import {DESKTOP_APP_ORIGIN, DESKTOP_PREBOOT_THEME_CHANNEL} from '@electron/common/Constants'; +import {APP_PROTOCOL, DESKTOP_APP_ORIGIN, DESKTOP_PREBOOT_THEME_CHANNEL} from '@electron/common/Constants'; import { type DesktopTroubleshootingSettings, type DesktopWindowBehaviorSettings, @@ -16,6 +16,7 @@ import type { } from '@electron/common/Types'; import {DesktopBrowserHandoff} from '@electron/main/BrowserHandoff'; import {hasEnabledBlinkFeature, MIDDLE_CLICK_AUTOSCROLL_BLINK_FEATURE} from '@electron/main/ChromiumRuntime'; +import {setHandoffReturnLinkSink} from '@electron/main/DeepLinks'; import {getDesktopAppStorage} from '@electron/main/DesktopAppStorage'; import {createDesktopAppStorageIpcRoutes} from '@electron/main/DesktopAppStorageIpc'; import {getLaunchDesktopTroubleshootingSettings} from '@electron/main/DesktopDebugInfo'; @@ -611,12 +612,15 @@ function registerBrowserHandoffHandlers(): void { if (browserHandoff !== null) { return; } - browserHandoff = new DesktopBrowserHandoff({ + const handoff = new DesktopBrowserHandoff({ logger: log, rendererDocumentOwners: createPrivilegedRendererDocumentOwners('BrowserHandoff'), selectedInstanceClient: getDesktopSelectedInstanceClient(), + returnUri: () => (app.isDefaultProtocolClient(APP_PROTOCOL) ? `${APP_PROTOCOL}://handoff` : null), }); - for (const [channel, handler] of Object.entries(browserHandoff.ipcRoutes())) { + browserHandoff = handoff; + setHandoffReturnLinkSink((url) => handoff.acceptReturnLink(url)); + for (const [channel, handler] of Object.entries(handoff.ipcRoutes())) { ipcMain.handle(channel, handler); } } @@ -646,6 +650,7 @@ export function cleanupIpcHandlers(_options: {quitting?: boolean} = {}): void { cleanupDesktopRuntimeConfigHandlers(); browserHandoff?.cleanup(); browserHandoff = null; + setHandoffReturnLinkSink(null); if (linuxAppearanceSubscription) { try { linuxAppearanceSubscription.close(); diff --git a/fluxer_desktop/src/main/WindowTrustedOrigin.test.mjs b/fluxer_desktop/src/main/WindowTrustedOrigin.test.mjs index f4d574587..1e643896e 100644 --- a/fluxer_desktop/src/main/WindowTrustedOrigin.test.mjs +++ b/fluxer_desktop/src/main/WindowTrustedOrigin.test.mjs @@ -199,6 +199,12 @@ describe('the main window only ever loads the local app document', () => { } }); + test('a sign-in return link never reaches the renderer with its grant', async () => { + ipcHandlers.delete('get-initial-deep-link'); + withArgv(['fluxer://handoff?code=ABCDEF-GHJKMN&grant=secret-grant'], () => initializeDeepLinks()); + assert.equal(await ipcHandlers.get('get-initial-deep-link')(), null); + }); + test('a deep link that names a site is not forwarded as one', async () => { ipcHandlers.delete('get-initial-deep-link'); withArgv(['https://evil.example/channels/@me'], () => initializeDeepLinks()); diff --git a/packages/desktop_ipc/src/BrowserHandoffContract.ts b/packages/desktop_ipc/src/BrowserHandoffContract.ts index b20a8d679..58cc6f182 100644 --- a/packages/desktop_ipc/src/BrowserHandoffContract.ts +++ b/packages/desktop_ipc/src/BrowserHandoffContract.ts @@ -8,11 +8,19 @@ export const DESKTOP_HANDOFF_CHANNELS = Object.freeze({ export const DesktopHandoffStatus = Object.freeze({ PENDING: 'pending', EXPIRED: 'expired', + DENIED: 'denied', COMPLETED: 'completed', } as const); export type DesktopHandoffStatus = (typeof DesktopHandoffStatus)[keyof typeof DesktopHandoffStatus]; +export const DesktopHandoffReturnMethod = Object.freeze({ + DEEP_LINK: 'deep_link', + CODE: 'code', +} as const); + +export type DesktopHandoffReturnMethod = (typeof DesktopHandoffReturnMethod)[keyof typeof DesktopHandoffReturnMethod]; + export interface DesktopHandoffInstance { readonly apiEndpoint: string; readonly apiVersion: number; @@ -23,6 +31,7 @@ export interface DesktopHandoffSession { readonly instance: DesktopHandoffInstance; readonly code: string; readonly expiresAt: string; + readonly returnMethod: DesktopHandoffReturnMethod; } export interface DesktopHandoffUser { @@ -34,7 +43,10 @@ export interface DesktopHandoffUser { } export interface DesktopHandoffIncompleteResult { - readonly status: typeof DesktopHandoffStatus.PENDING | typeof DesktopHandoffStatus.EXPIRED; + readonly status: + | typeof DesktopHandoffStatus.PENDING + | typeof DesktopHandoffStatus.EXPIRED + | typeof DesktopHandoffStatus.DENIED; } export interface DesktopHandoffCompletedResult {