From b36fe09932608ad363ea7cff2a9f0c6f404bce7b Mon Sep 17 00:00:00 2001 From: LuisMIguelFurlanettoSousa Date: Mon, 23 Mar 2026 11:19:41 -0300 Subject: [PATCH] =?UTF-8?q?feat(i18n):=20adicionar=20suporte=20a=20interna?= =?UTF-8?q?cionaliza=C3=A7=C3=A3o=20com=20react-i18next?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Implementa infraestrutura de i18n com suporte inicial a English e Português (Brasil). Seletor de idioma em Settings > System > Preferences. - Instala react-i18next e i18next - Cria arquivos de tradução (en, pt-BR) para common, home, settings, layout - Traduz layout (sidebar, header, footer), home e settings/system - Persiste idioma via localStorage + KVStore (ui.language) - Seletor de idioma na página Settings/System Closes #486 --- admin/constants/kv_store.ts | 2 +- admin/inertia/app/app.tsx | 1 + admin/inertia/components/Footer.tsx | 6 +- admin/inertia/layouts/AppLayout.tsx | 6 +- admin/inertia/layouts/SettingsLayout.tsx | 24 ++-- admin/inertia/lib/i18n.ts | 46 ++++++++ admin/inertia/locales/en/common.json | 29 +++++ admin/inertia/locales/en/home.json | 24 ++++ admin/inertia/locales/en/layout.json | 25 ++++ admin/inertia/locales/en/settings.json | 57 ++++++++++ admin/inertia/locales/pt-BR/common.json | 29 +++++ admin/inertia/locales/pt-BR/home.json | 24 ++++ admin/inertia/locales/pt-BR/layout.json | 25 ++++ admin/inertia/locales/pt-BR/settings.json | 57 ++++++++++ admin/inertia/pages/home.tsx | 126 +++++++++++---------- admin/inertia/pages/settings/system.tsx | 132 +++++++++++++--------- admin/package-lock.json | 87 ++++++++++++++ admin/package.json | 2 + admin/types/kv_store.ts | 1 + 19 files changed, 573 insertions(+), 130 deletions(-) create mode 100644 admin/inertia/lib/i18n.ts create mode 100644 admin/inertia/locales/en/common.json create mode 100644 admin/inertia/locales/en/home.json create mode 100644 admin/inertia/locales/en/layout.json create mode 100644 admin/inertia/locales/en/settings.json create mode 100644 admin/inertia/locales/pt-BR/common.json create mode 100644 admin/inertia/locales/pt-BR/home.json create mode 100644 admin/inertia/locales/pt-BR/layout.json create mode 100644 admin/inertia/locales/pt-BR/settings.json diff --git a/admin/constants/kv_store.ts b/admin/constants/kv_store.ts index 69872ff..84718d4 100644 --- a/admin/constants/kv_store.ts +++ b/admin/constants/kv_store.ts @@ -1,3 +1,3 @@ import { KVStoreKey } from "../types/kv_store.js"; -export const SETTINGS_KEYS: KVStoreKey[] = ['chat.suggestionsEnabled', 'chat.lastModel', 'ui.hasVisitedEasySetup', 'ui.theme', 'system.earlyAccess', 'ai.assistantCustomName']; \ No newline at end of file +export const SETTINGS_KEYS: KVStoreKey[] = ['chat.suggestionsEnabled', 'chat.lastModel', 'ui.hasVisitedEasySetup', 'ui.theme', 'system.earlyAccess', 'ai.assistantCustomName', 'ui.language']; \ No newline at end of file diff --git a/admin/inertia/app/app.tsx b/admin/inertia/app/app.tsx index b71ab64..13a1d37 100644 --- a/admin/inertia/app/app.tsx +++ b/admin/inertia/app/app.tsx @@ -1,6 +1,7 @@ /// /// +import '~/lib/i18n' import '../css/app.css' import { createRoot } from 'react-dom/client' import { createInertiaApp } from '@inertiajs/react' diff --git a/admin/inertia/components/Footer.tsx b/admin/inertia/components/Footer.tsx index e74c3a2..41b3426 100644 --- a/admin/inertia/components/Footer.tsx +++ b/admin/inertia/components/Footer.tsx @@ -1,4 +1,5 @@ import { useState } from 'react' +import { useTranslation } from 'react-i18next' import { usePage } from '@inertiajs/react' import { UsePageProps } from '../../types/system' import ThemeToggle from '~/components/ThemeToggle' @@ -6,6 +7,7 @@ import { IconBug } from '@tabler/icons-react' import DebugInfoModal from './DebugInfoModal' export default function Footer() { + const { t } = useTranslation('layout') const { appVersion } = usePage().props as unknown as UsePageProps const [debugModalOpen, setDebugModalOpen] = useState(false) @@ -13,7 +15,7 @@ export default function Footer() {