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': '← 返回登录',