From 6a0ae482d76fce827413ac65ede1f03422b248b2 Mon Sep 17 00:00:00 2001 From: Maurice Date: Tue, 10 Nov 2026 09:23:16 +0100 Subject: [PATCH] fix(login): the two-factor code field is set up for one-time codes and a password manager The code step drops the email field, so a password manager had no login to match a one-time code to; the step now keeps the address in a hidden username field. The code field names itself and sets its keyboard hints directly (characters, no autocorrect), as autoFocus gave it focus before anything could prepare it, and its placeholder is translated. --- client/src/pages/LoginPage.tsx | 24 +++++++++++++++++++++++- shared/src/i18n/ar/login.ts | 1 + shared/src/i18n/az/login.ts | 1 + shared/src/i18n/br/login.ts | 1 + shared/src/i18n/ca/login.ts | 1 + shared/src/i18n/cs/login.ts | 1 + shared/src/i18n/de/login.ts | 1 + shared/src/i18n/en/login.ts | 1 + shared/src/i18n/es/login.ts | 1 + shared/src/i18n/et/login.ts | 1 + shared/src/i18n/fr/login.ts | 1 + shared/src/i18n/gr/login.ts | 1 + shared/src/i18n/he/login.ts | 1 + shared/src/i18n/hu/login.ts | 1 + shared/src/i18n/id/login.ts | 1 + shared/src/i18n/it/login.ts | 1 + shared/src/i18n/ja/login.ts | 1 + shared/src/i18n/ko/login.ts | 1 + shared/src/i18n/nl/login.ts | 1 + shared/src/i18n/pl/login.ts | 1 + shared/src/i18n/ru/login.ts | 1 + shared/src/i18n/sk/login.ts | 1 + shared/src/i18n/sv/login.ts | 1 + shared/src/i18n/th/login.ts | 1 + shared/src/i18n/tr/login.ts | 1 + shared/src/i18n/uk/login.ts | 1 + shared/src/i18n/vi/login.ts | 1 + shared/src/i18n/zh-TW/login.ts | 1 + shared/src/i18n/zh/login.ts | 1 + 29 files changed, 51 insertions(+), 1 deletion(-) diff --git a/client/src/pages/LoginPage.tsx b/client/src/pages/LoginPage.tsx index 8f9a0886f..61703be83 100644 --- a/client/src/pages/LoginPage.tsx +++ b/client/src/pages/LoginPage.tsx @@ -751,6 +751,19 @@ export default function LoginPage(): React.ReactElement { > {t('login.mfaCodeLabel')} + {/* The account the code belongs to, for password managers: they match a + one-time code to a saved login through the username in the same form, + and the email field is gone in this step. */} +
) => setMfaCode(e.target.value.toUpperCase().slice(0, 24)) } - placeholder="000000 or XXXX-XXXX" + placeholder={t('login.mfaPlaceholder')} required autoFocus style={inputBase} diff --git a/shared/src/i18n/ar/login.ts b/shared/src/i18n/ar/login.ts index a80f4380f..2c0beef94 100644 --- a/shared/src/i18n/ar/login.ts +++ b/shared/src/i18n/ar/login.ts @@ -36,6 +36,7 @@ const login: TranslationStrings = { 'login.mfaTitle': 'المصادقة الثنائية', 'login.mfaSubtitle': 'أدخل الرمز المكون من 6 أرقام من تطبيق المصادقة.', 'login.mfaCodeLabel': 'رمز التحقق', + 'login.mfaPlaceholder': '000000 أو XXXX-XXXX', 'login.mfaCodeRequired': 'أدخل الرمز من تطبيق المصادقة.', 'login.mfaHint': 'افتح Google Authenticator أو Authy أو أي تطبيق TOTP آخر.', 'login.mfaBack': '← العودة لتسجيل الدخول', diff --git a/shared/src/i18n/az/login.ts b/shared/src/i18n/az/login.ts index 62d401796..e88a5e6d6 100644 --- a/shared/src/i18n/az/login.ts +++ b/shared/src/i18n/az/login.ts @@ -39,6 +39,7 @@ const login: TranslationStrings = { 'login.mfaTitle': 'İki faktorlu autentifikasiya', 'login.mfaSubtitle': 'Autentifikator tətbiqinizdəki 6 rəqəmli kodu daxil edin.', 'login.mfaCodeLabel': 'Doğrulama kodu', + 'login.mfaPlaceholder': '000000 və ya XXXX-XXXX', 'login.mfaCodeRequired': 'Autentifikator tətbiqinizdəki kodu daxil edin.', 'login.mfaHint': 'Google Authenticator, Authy və ya başqa TOTP tətbiqini açın.', 'login.mfaBack': '← Girişə qayıt', diff --git a/shared/src/i18n/br/login.ts b/shared/src/i18n/br/login.ts index 46e569b4f..a96966027 100644 --- a/shared/src/i18n/br/login.ts +++ b/shared/src/i18n/br/login.ts @@ -38,6 +38,7 @@ const login: TranslationStrings = { 'login.mfaTitle': 'Autenticação em duas etapas', 'login.mfaSubtitle': 'Digite o código de 6 dígitos do seu app autenticador.', 'login.mfaCodeLabel': 'Código de verificação', + 'login.mfaPlaceholder': '000000 ou XXXX-XXXX', 'login.mfaCodeRequired': 'Digite o código do app autenticador.', 'login.mfaHint': 'Abra o Google Authenticator, Authy ou outro app TOTP.', 'login.mfaBack': '← Voltar ao login', diff --git a/shared/src/i18n/ca/login.ts b/shared/src/i18n/ca/login.ts index 1750463eb..257e08aec 100644 --- a/shared/src/i18n/ca/login.ts +++ b/shared/src/i18n/ca/login.ts @@ -26,6 +26,7 @@ const login: TranslationStrings = { 'login.mfaTitle': 'Autenticació de dos factors', 'login.mfaSubtitle': "Introdueix el codi de 6 dígits de la teva app d'autenticació.", 'login.mfaCodeLabel': 'Codi de verificació', + 'login.mfaPlaceholder': '000000 o XXXX-XXXX', 'login.mfaCodeRequired': "Introdueix el codi de la teva app d'autenticació.", 'login.mfaHint': 'Obre Google Authenticator, Authy o una altra app TOTP.', 'login.mfaBack': "← Torna a l'inici de sessió", diff --git a/shared/src/i18n/cs/login.ts b/shared/src/i18n/cs/login.ts index e26f8200c..c7f9ef2e1 100644 --- a/shared/src/i18n/cs/login.ts +++ b/shared/src/i18n/cs/login.ts @@ -38,6 +38,7 @@ const login: TranslationStrings = { 'login.mfaTitle': 'Dvoufaktorové ověření', 'login.mfaSubtitle': 'Zadejte 6místný kód z vaší autentizační aplikace.', 'login.mfaCodeLabel': 'Ověřovací kód', + 'login.mfaPlaceholder': '000000 nebo XXXX-XXXX', 'login.mfaCodeRequired': 'Zadejte kód z aplikace.', 'login.mfaHint': 'Otevřete Google Authenticator, Authy nebo jinou TOTP aplikaci.', 'login.mfaBack': '← Zpět k přihlášení', diff --git a/shared/src/i18n/de/login.ts b/shared/src/i18n/de/login.ts index 895fd5146..551ea62a4 100644 --- a/shared/src/i18n/de/login.ts +++ b/shared/src/i18n/de/login.ts @@ -38,6 +38,7 @@ const login: TranslationStrings = { 'login.mfaTitle': 'Zwei-Faktor-Authentifizierung', 'login.mfaSubtitle': 'Gib den 6-stelligen Code aus deiner Authenticator-App ein.', 'login.mfaCodeLabel': 'Bestätigungscode', + 'login.mfaPlaceholder': '000000 oder XXXX-XXXX', 'login.mfaCodeRequired': 'Bitte den Code aus der Authenticator-App eingeben.', 'login.mfaHint': 'Google Authenticator, Authy oder eine andere TOTP-App öffnen.', 'login.mfaBack': '← Zurück zur Anmeldung', diff --git a/shared/src/i18n/en/login.ts b/shared/src/i18n/en/login.ts index bfeb3334b..1ee7b26bd 100644 --- a/shared/src/i18n/en/login.ts +++ b/shared/src/i18n/en/login.ts @@ -38,6 +38,7 @@ const login: TranslationStrings = { 'login.mfaTitle': 'Two-factor authentication', 'login.mfaSubtitle': 'Enter the 6-digit code from your authenticator app.', 'login.mfaCodeLabel': 'Verification code', + 'login.mfaPlaceholder': '000000 or XXXX-XXXX', 'login.mfaCodeRequired': 'Enter the code from your authenticator app.', 'login.mfaHint': 'Open Google Authenticator, Authy, or another TOTP app.', 'login.mfaBack': '← Back to sign in', diff --git a/shared/src/i18n/es/login.ts b/shared/src/i18n/es/login.ts index 3f6448083..307be27d7 100644 --- a/shared/src/i18n/es/login.ts +++ b/shared/src/i18n/es/login.ts @@ -26,6 +26,7 @@ const login: TranslationStrings = { 'login.mfaTitle': 'Autenticación de dos factores', 'login.mfaSubtitle': 'Introduce el código de 6 dígitos de tu app de autenticación.', 'login.mfaCodeLabel': 'Código de verificación', + 'login.mfaPlaceholder': '000000 o XXXX-XXXX', 'login.mfaCodeRequired': 'Introduce el código de tu app de autenticación.', 'login.mfaHint': 'Abre Google Authenticator, Authy u otra app TOTP.', 'login.mfaBack': '← Volver al inicio de sesión', diff --git a/shared/src/i18n/et/login.ts b/shared/src/i18n/et/login.ts index 92b5895fc..d4e8397bb 100644 --- a/shared/src/i18n/et/login.ts +++ b/shared/src/i18n/et/login.ts @@ -38,6 +38,7 @@ const login: TranslationStrings = { 'login.mfaTitle': 'Kaheastmeline autentimine', 'login.mfaSubtitle': 'Sisesta oma autentimisrakenduse 6-kohaline kood.', 'login.mfaCodeLabel': 'Kinnituskood', + 'login.mfaPlaceholder': '000000 või XXXX-XXXX', 'login.mfaCodeRequired': 'Sisesta autentimisrakenduse kood.', 'login.mfaHint': 'Ava Google Authenticator, Authy või muu TOTP-rakendus.', 'login.mfaBack': '← Tagasi sisselogimise juurde', diff --git a/shared/src/i18n/fr/login.ts b/shared/src/i18n/fr/login.ts index 6d7ba31e0..5f8c32149 100644 --- a/shared/src/i18n/fr/login.ts +++ b/shared/src/i18n/fr/login.ts @@ -26,6 +26,7 @@ const login: TranslationStrings = { 'login.mfaTitle': 'Authentification à deux facteurs', 'login.mfaSubtitle': "Entrez le code à 6 chiffres de votre application d'authentification.", 'login.mfaCodeLabel': 'Code de vérification', + 'login.mfaPlaceholder': '000000 ou XXXX-XXXX', 'login.mfaCodeRequired': "Entrez le code de votre application d'authentification.", 'login.mfaHint': 'Ouvrez Google Authenticator, Authy ou une autre application TOTP.', 'login.mfaBack': '← Retour à la connexion', diff --git a/shared/src/i18n/gr/login.ts b/shared/src/i18n/gr/login.ts index 584ce53af..021c86aac 100644 --- a/shared/src/i18n/gr/login.ts +++ b/shared/src/i18n/gr/login.ts @@ -40,6 +40,7 @@ const login: TranslationStrings = { 'login.mfaTitle': 'Έλεγχος ταυτότητας δύο παραγόντων', 'login.mfaSubtitle': 'Εισάγετε τον 6ψήφιο κωδικό από την εφαρμογή authenticator σας.', 'login.mfaCodeLabel': 'Κωδικός επαλήθευσης', + 'login.mfaPlaceholder': '000000 ή XXXX-XXXX', 'login.mfaCodeRequired': 'Εισάγετε τον κωδικό από την εφαρμογή authenticator σας.', 'login.mfaHint': 'Ανοίξτε το Google Authenticator, Authy ή άλλη εφαρμογή TOTP.', 'login.mfaBack': '← Πίσω στη σύνδεση', diff --git a/shared/src/i18n/he/login.ts b/shared/src/i18n/he/login.ts index 098a2245f..6261b1651 100644 --- a/shared/src/i18n/he/login.ts +++ b/shared/src/i18n/he/login.ts @@ -37,6 +37,7 @@ const login: TranslationStrings = { 'login.mfaTitle': 'אימות דו-שלבי', 'login.mfaSubtitle': 'הזינו את הקוד בן 6 הספרות מאפליקציית האימות.', 'login.mfaCodeLabel': 'קוד אימות', + 'login.mfaPlaceholder': '000000 או XXXX-XXXX', 'login.mfaCodeRequired': 'הזינו את הקוד מאפליקציית האימות.', 'login.mfaHint': 'פתחו את Google Authenticator, Authy או אפליקציית TOTP אחרת.', 'login.mfaBack': '→ חזרה להתחברות', diff --git a/shared/src/i18n/hu/login.ts b/shared/src/i18n/hu/login.ts index 8efda4cff..63ab10f3a 100644 --- a/shared/src/i18n/hu/login.ts +++ b/shared/src/i18n/hu/login.ts @@ -39,6 +39,7 @@ const login: TranslationStrings = { 'login.mfaTitle': 'Kétfaktoros hitelesítés', 'login.mfaSubtitle': 'Add meg a 6 jegyű kódot a hitelesítő alkalmazásból.', 'login.mfaCodeLabel': 'Ellenőrző kód', + 'login.mfaPlaceholder': '000000 vagy XXXX-XXXX', 'login.mfaCodeRequired': 'Add meg a kódot a hitelesítő alkalmazásból.', 'login.mfaHint': 'Nyisd meg a Google Authenticator, Authy vagy más TOTP alkalmazást.', 'login.mfaBack': '← Vissza a bejelentkezéshez', diff --git a/shared/src/i18n/id/login.ts b/shared/src/i18n/id/login.ts index 48a28c0bf..fb17ee819 100644 --- a/shared/src/i18n/id/login.ts +++ b/shared/src/i18n/id/login.ts @@ -38,6 +38,7 @@ const login: TranslationStrings = { 'login.mfaTitle': 'Autentikasi dua faktor', 'login.mfaSubtitle': 'Masukkan kode 6 digit dari aplikasi autentikator kamu.', 'login.mfaCodeLabel': 'Kode verifikasi', + 'login.mfaPlaceholder': '000000 atau XXXX-XXXX', 'login.mfaCodeRequired': 'Masukkan kode dari aplikasi autentikator kamu.', 'login.mfaHint': 'Buka Google Authenticator, Authy, atau aplikasi TOTP lainnya.', 'login.mfaBack': '← Kembali ke halaman masuk', diff --git a/shared/src/i18n/it/login.ts b/shared/src/i18n/it/login.ts index 7cb3e2e53..be4cf6cd2 100644 --- a/shared/src/i18n/it/login.ts +++ b/shared/src/i18n/it/login.ts @@ -39,6 +39,7 @@ const login: TranslationStrings = { 'login.mfaTitle': 'Autenticazione a due fattori', 'login.mfaSubtitle': 'Inserisci il codice a 6 cifre dalla tua app authenticator.', 'login.mfaCodeLabel': 'Codice di verifica', + 'login.mfaPlaceholder': '000000 o XXXX-XXXX', 'login.mfaCodeRequired': 'Inserisci il codice dalla tua app authenticator.', 'login.mfaHint': "Apri Google Authenticator, Authy o un'altra app TOTP.", 'login.mfaBack': "← Torna all'accesso", diff --git a/shared/src/i18n/ja/login.ts b/shared/src/i18n/ja/login.ts index 97ecd5f5c..1c62a3428 100644 --- a/shared/src/i18n/ja/login.ts +++ b/shared/src/i18n/ja/login.ts @@ -38,6 +38,7 @@ const login: TranslationStrings = { 'login.mfaTitle': '二要素認証', 'login.mfaSubtitle': '認証アプリの6桁コードを入力してください。', 'login.mfaCodeLabel': '確認コード', + 'login.mfaPlaceholder': '000000 または XXXX-XXXX', 'login.mfaCodeRequired': '認証アプリのコードを入力してください。', 'login.mfaHint': 'Google Authenticator、Authy などのTOTPアプリを開いてください。', 'login.mfaBack': '← サインインに戻る', diff --git a/shared/src/i18n/ko/login.ts b/shared/src/i18n/ko/login.ts index a22e19c8f..41a3d7747 100644 --- a/shared/src/i18n/ko/login.ts +++ b/shared/src/i18n/ko/login.ts @@ -37,6 +37,7 @@ const login: TranslationStrings = { 'login.mfaTitle': '2단계 인증', 'login.mfaSubtitle': '인증 앱의 6자리 코드를 입력하세요.', 'login.mfaCodeLabel': '인증 코드', + 'login.mfaPlaceholder': '000000 또는 XXXX-XXXX', 'login.mfaCodeRequired': '인증 앱의 코드를 입력하세요.', 'login.mfaHint': 'Google Authenticator, Authy 또는 다른 TOTP 앱을 열어주세요.', 'login.mfaBack': '← 로그인으로 돌아가기', diff --git a/shared/src/i18n/nl/login.ts b/shared/src/i18n/nl/login.ts index d68648b90..f1d41fc55 100644 --- a/shared/src/i18n/nl/login.ts +++ b/shared/src/i18n/nl/login.ts @@ -25,6 +25,7 @@ const login: TranslationStrings = { 'login.mfaTitle': 'Tweefactorauthenticatie', 'login.mfaSubtitle': 'Voer de 6-cijferige code van je authenticator-app in.', 'login.mfaCodeLabel': 'Verificatiecode', + 'login.mfaPlaceholder': '000000 of XXXX-XXXX', 'login.mfaCodeRequired': 'Voer de code van je authenticator-app in.', 'login.mfaHint': 'Open Google Authenticator, Authy of een andere TOTP-app.', 'login.mfaBack': '← Terug naar inloggen', diff --git a/shared/src/i18n/pl/login.ts b/shared/src/i18n/pl/login.ts index f53cbcd96..dbe685e3a 100644 --- a/shared/src/i18n/pl/login.ts +++ b/shared/src/i18n/pl/login.ts @@ -37,6 +37,7 @@ const login: TranslationStrings = { 'login.mfaTitle': 'Uwierzytelnianie dwuskładnikowe', 'login.mfaSubtitle': 'Wprowadź 6-cyfrowy kod z aplikacji uwierzytelniającej.', 'login.mfaCodeLabel': 'Kod weryfikacyjny', + 'login.mfaPlaceholder': '000000 lub XXXX-XXXX', 'login.mfaCodeRequired': 'Wprowadź kod z aplikacji uwierzytelniającej.', 'login.mfaHint': 'Otwórz Google Authenticator, Authy lub inną aplikację TOTP.', 'login.mfaBack': '← Powrót do logowania', diff --git a/shared/src/i18n/ru/login.ts b/shared/src/i18n/ru/login.ts index de3d50036..09441f1f9 100644 --- a/shared/src/i18n/ru/login.ts +++ b/shared/src/i18n/ru/login.ts @@ -26,6 +26,7 @@ const login: TranslationStrings = { 'login.mfaTitle': 'Двухфакторная аутентификация', 'login.mfaSubtitle': 'Введите 6-значный код из приложения-аутентификатора.', 'login.mfaCodeLabel': 'Код подтверждения', + 'login.mfaPlaceholder': '000000 или XXXX-XXXX', 'login.mfaCodeRequired': 'Введите код из приложения-аутентификатора.', 'login.mfaHint': 'Откройте Google Authenticator, Authy или другое TOTP-приложение.', 'login.mfaBack': '← Назад к входу', diff --git a/shared/src/i18n/sk/login.ts b/shared/src/i18n/sk/login.ts index e511b6b35..e7ef2ac9b 100644 --- a/shared/src/i18n/sk/login.ts +++ b/shared/src/i18n/sk/login.ts @@ -38,6 +38,7 @@ const login: TranslationStrings = { 'login.mfaTitle': 'Dvojfaktorové overenie', 'login.mfaSubtitle': 'Zadajte 6-miestny kód z vašej autentifikačnej aplikácie.', 'login.mfaCodeLabel': 'Overovací kód', + 'login.mfaPlaceholder': '000000 alebo XXXX-XXXX', 'login.mfaCodeRequired': 'Zadajte kód z vašej autentifikačnej aplikácie.', 'login.mfaHint': 'Otvorte Google Authenticator, Authy alebo inú TOTP aplikáciu.', 'login.mfaBack': '← Späť na prihlásenie', diff --git a/shared/src/i18n/sv/login.ts b/shared/src/i18n/sv/login.ts index e1ffd0c2f..34699d0fb 100644 --- a/shared/src/i18n/sv/login.ts +++ b/shared/src/i18n/sv/login.ts @@ -39,6 +39,7 @@ const login: TranslationStrings = { 'login.mfaTitle': 'Tvåfaktorsautentisering', 'login.mfaSubtitle': 'Ange den 6-siffriga koden från din autentiseringsapp.', 'login.mfaCodeLabel': 'Verifieringskod', + 'login.mfaPlaceholder': '000000 eller XXXX-XXXX', 'login.mfaCodeRequired': 'Ange koden från din autentiseringsapp.', 'login.mfaHint': 'Öppna Google Authenticator, Authy eller någon annan TOTP-app.', 'login.mfaBack': '← Tillbaka till inloggningen', diff --git a/shared/src/i18n/th/login.ts b/shared/src/i18n/th/login.ts index 4891b433a..e2227f472 100644 --- a/shared/src/i18n/th/login.ts +++ b/shared/src/i18n/th/login.ts @@ -38,6 +38,7 @@ const login: TranslationStrings = { 'login.mfaTitle': 'การรับรองความถูกต้องด้วยสองปัจจัย', 'login.mfaSubtitle': 'ป้อนรหัส 6 หลักจากแอปยืนยันตัวตนของคุณ', 'login.mfaCodeLabel': 'รหัสยืนยัน', + 'login.mfaPlaceholder': '000000 หรือ XXXX-XXXX', 'login.mfaCodeRequired': 'ป้อนรหัสจากแอปยืนยันตัวตนของคุณ', 'login.mfaHint': 'เปิด Google Authenticator, Authy หรือแอป TOTP อื่น', 'login.mfaBack': '← กลับไปลงชื่อเข้าใช้', diff --git a/shared/src/i18n/tr/login.ts b/shared/src/i18n/tr/login.ts index d29f9407d..3bb37404d 100644 --- a/shared/src/i18n/tr/login.ts +++ b/shared/src/i18n/tr/login.ts @@ -39,6 +39,7 @@ const login: TranslationStrings = { 'login.mfaTitle': 'İki faktörlü kimlik doğrulama', 'login.mfaSubtitle': 'Kimlik doğrulayıcı uygulamanızdan 6 haneli kodu girin.', 'login.mfaCodeLabel': 'Doğrulama kodu', + 'login.mfaPlaceholder': '000000 veya XXXX-XXXX', 'login.mfaCodeRequired': 'Kimlik doğrulayıcı uygulamanızdan kodu girin.', 'login.mfaHint': "Google Authenticator'ı, Authy'yi veya başka bir TOTP uygulamasını açın.", 'login.mfaBack': '← Oturum açmaya geri dön', diff --git a/shared/src/i18n/uk/login.ts b/shared/src/i18n/uk/login.ts index ccc70b60a..7f3f1d4a6 100644 --- a/shared/src/i18n/uk/login.ts +++ b/shared/src/i18n/uk/login.ts @@ -25,6 +25,7 @@ const login: TranslationStrings = { 'login.mfaTitle': 'Двофакторна автентифікація', 'login.mfaSubtitle': 'Введіть 6-значний код з додатка-автентифікатора.', 'login.mfaCodeLabel': 'Код підтвердження', + 'login.mfaPlaceholder': '000000 або XXXX-XXXX', 'login.mfaCodeRequired': 'Введіть код із додатка-автентифікатора.', 'login.mfaHint': 'Відкрийте Google Authenticator, Authy або інший TOTP-додаток.', 'login.mfaBack': '← Назад до входу', diff --git a/shared/src/i18n/vi/login.ts b/shared/src/i18n/vi/login.ts index a1dc0965f..527019af5 100644 --- a/shared/src/i18n/vi/login.ts +++ b/shared/src/i18n/vi/login.ts @@ -38,6 +38,7 @@ const login: TranslationStrings = { 'login.mfaTitle': 'Xác thực hai yếu tố', 'login.mfaSubtitle': 'Nhập mã gồm 6 chữ số từ ứng dụng xác thực của bạn.', 'login.mfaCodeLabel': 'Mã xác minh', + 'login.mfaPlaceholder': '000000 hoặc XXXX-XXXX', 'login.mfaCodeRequired': 'Nhập mã từ ứng dụng xác thực của bạn.', 'login.mfaHint': 'Mở Google Authenticator, Authy hoặc ứng dụng TOTP khác.', 'login.mfaBack': '← Quay lại đăng nhập', diff --git a/shared/src/i18n/zh-TW/login.ts b/shared/src/i18n/zh-TW/login.ts index 8748bfb0f..a9678ce72 100644 --- a/shared/src/i18n/zh-TW/login.ts +++ b/shared/src/i18n/zh-TW/login.ts @@ -25,6 +25,7 @@ const login: TranslationStrings = { 'login.mfaTitle': '雙因素認證', 'login.mfaSubtitle': '請輸入身份驗證器應用中的 6 位驗證碼。', 'login.mfaCodeLabel': '驗證碼', + 'login.mfaPlaceholder': '000000 或 XXXX-XXXX', 'login.mfaCodeRequired': '請輸入身份驗證器應用中的驗證碼。', 'login.mfaHint': '開啟 Google Authenticator、Authy 或其他 TOTP 應用。', 'login.mfaBack': '← 返回登入', diff --git a/shared/src/i18n/zh/login.ts b/shared/src/i18n/zh/login.ts index be6481256..072d01697 100644 --- a/shared/src/i18n/zh/login.ts +++ b/shared/src/i18n/zh/login.ts @@ -25,6 +25,7 @@ const login: TranslationStrings = { 'login.mfaTitle': '双因素认证', 'login.mfaSubtitle': '请输入身份验证器应用中的 6 位验证码。', 'login.mfaCodeLabel': '验证码', + 'login.mfaPlaceholder': '000000 或 XXXX-XXXX', 'login.mfaCodeRequired': '请输入身份验证器应用中的验证码。', 'login.mfaHint': '打开 Google Authenticator、Authy 或其他 TOTP 应用。', 'login.mfaBack': '← 返回登录',