From b357d89d812929159cc7fcd3703a482e4d20708d Mon Sep 17 00:00:00 2001
From: Anais Saraiva
Date: Mon, 21 Sep 2026 16:16:47 +0200
Subject: [PATCH] .
---
frontend/src/components/Login.tsx | 8 ++++----
frontend/src/components/dialogs.tsx | 3 ---
frontend/src/lib/i18n.ts | 8 ++++++--
3 files changed, 10 insertions(+), 9 deletions(-)
diff --git a/frontend/src/components/Login.tsx b/frontend/src/components/Login.tsx
index 9e05c07..06a8a9c 100644
--- a/frontend/src/components/Login.tsx
+++ b/frontend/src/components/Login.tsx
@@ -70,7 +70,7 @@ export function Login({ onLogin }: { onLogin: (user: UserType) => void }) {
setToken(res.token);
onLogin(res.user);
} catch (err) {
- setError(err instanceof Error ? err.message : "Invalid code");
+ setError(err instanceof Error ? err.message : t("login.totpInvalid"));
} finally {
setBusy(false);
}
@@ -100,7 +100,7 @@ export function Login({ onLogin }: { onLogin: (user: UserType) => void }) {
onChange={(e) => setCode(e.target.value.replace(/\D/g, "").slice(0, 6))}
autoComplete="one-time-code"
placeholder="000000"
- aria-label="Authenticator code"
+ aria-label={t("login.totpAria")}
inputMode="numeric"
required
/>
@@ -111,14 +111,14 @@ export function Login({ onLogin }: { onLogin: (user: UserType) => void }) {
)}
) : (
diff --git a/frontend/src/components/dialogs.tsx b/frontend/src/components/dialogs.tsx
index 17cb779..31eaad8 100644
--- a/frontend/src/components/dialogs.tsx
+++ b/frontend/src/components/dialogs.tsx
@@ -891,7 +891,4 @@ function SecuritySection({ onKeyRotated }: { onKeyRotated?: () => void }) {
/>
);
-}
-
- );
}
diff --git a/frontend/src/lib/i18n.ts b/frontend/src/lib/i18n.ts
index 6458f6d..0355df8 100644
--- a/frontend/src/lib/i18n.ts
+++ b/frontend/src/lib/i18n.ts
@@ -1532,8 +1532,12 @@ const pt: Dict = {
"login.forgot": "Esqueceste a chave?",
"login.perk1": "Privado por design — sem cookies nem rastreio",
"login.perk2": "Os teus modelos, em tempo real",
- "login.adminNote":
- "A chave admin vive no .env do servidor; as chaves são emitidas pelo admin.",
+ "login.adminNotePre": "A chave admin vive no .env do servidor",
+ "login.adminNotePost": "; as chaves são emitidas pelo admin.",
+ "login.totpIntro": "Dois fatores para @{user} — escreve o código de 6 dígitos da app.",
+ "login.totpAria": "Código do autenticador",
+ "login.totpInvalid": "Código inválido",
+ "login.verify": "Verificar",
"sidebar.newChat": "Novo chat",
"sidebar.collapse": "Ocultar barra lateral",