From ef084559bbc63bf11d5e9fa0cbb6f46152dedc5e Mon Sep 17 00:00:00 2001 From: Carlos Alberto Date: Wed, 30 Sep 2026 21:20:05 +0100 Subject: [PATCH] feat(i18n): complete English Spanish and Portuguese UI --- src/front/components/AIReplyPanel.jsx | 32 +-- src/front/components/AuthLayout.jsx | 14 +- src/front/components/Sidebar.jsx | 4 +- src/front/components/WebChat.jsx | 16 +- src/front/context/LanguageContext.jsx | 46 +++- src/front/i18n/literalTranslations.mjs | 284 +++++++++++++++++++++++++ src/front/i18n/messages.mjs | 278 ++++++++++++++++++++++++ src/front/i18n/settings.mjs | 71 +++++++ src/front/pages/AcceptInvitation.jsx | 29 +-- src/front/pages/Agenda.jsx | 87 ++++---- src/front/pages/Agents.jsx | 24 ++- src/front/pages/ClientDetail.jsx | 16 +- src/front/pages/Clients.jsx | 25 ++- src/front/pages/ForgotPassword.jsx | 24 ++- src/front/pages/Inbox.jsx | 35 +-- src/front/pages/JobDetail.jsx | 11 +- src/front/pages/Jobs.jsx | 19 +- src/front/pages/Knowledge.jsx | 66 +++--- src/front/pages/Layout.jsx | 4 +- src/front/pages/Leads.jsx | 64 +++--- src/front/pages/Login.jsx | 28 +-- src/front/pages/Members.jsx | 57 ++--- src/front/pages/PlanSelection.jsx | 38 ++-- src/front/pages/Register.jsx | 32 +-- src/front/pages/ResetPassword.jsx | 24 ++- src/front/pages/Settings.jsx | 75 +------ src/front/pages/WebChatPage.jsx | 16 +- src/front/routes.jsx | 23 +- tests/frontend/i18n.test.mjs | 49 +++++ 29 files changed, 1100 insertions(+), 391 deletions(-) create mode 100644 src/front/i18n/literalTranslations.mjs create mode 100644 src/front/i18n/messages.mjs create mode 100644 src/front/i18n/settings.mjs create mode 100644 tests/frontend/i18n.test.mjs diff --git a/src/front/components/AIReplyPanel.jsx b/src/front/components/AIReplyPanel.jsx index fe92954..c2d751a 100644 --- a/src/front/components/AIReplyPanel.jsx +++ b/src/front/components/AIReplyPanel.jsx @@ -1,9 +1,10 @@ import {useEffect, useState} from 'react'; -import {aiMessages} from '../i18n/ai'; import {aiRequest} from '../services/aiService'; import {inboxService} from '../services/inboxService'; +import {useLanguage} from '../context/LanguageContext'; export function AIReplyPanel({conversationId, token, companyId, onChanged, latestInbound}) { + const {ui} = useLanguage(); const [agents, setAgents] = useState([]); const [agentId, setAgentId] = useState(''); const [question, setQuestion] = useState(''); @@ -28,28 +29,29 @@ export function AIReplyPanel({conversationId, token, companyId, onChanged, lates catch(e) {setError(e.message);} finally {setBusy(false);} } - return
- Asistente IA · revisión humana obligatoria + const statuses={pending_review:ui.pendingReview,approved:ui.approvedDraft,rejected:ui.rejectedDraft,handoff:ui.humanAttention}; + return
+ {ui.humanReview} {error &&

{error}

}
- setAgentId(e.target.value)} disabled={busy}> + {agents.map(a=>)} - +
- {!agents.length &&

Configura un agente en Agentes IA y vincula documentos procesados.

} + {!agents.length &&

{ui.configureAgentHint}

} {latestInbound && } -