From 0d13f4645cc1e7b6c2705fc04abb00837d88f99d Mon Sep 17 00:00:00 2001 From: diegosouzapw Date: Wed, 25 Feb 2026 13:30:57 -0300 Subject: [PATCH] =?UTF-8?q?feat:=20complete=20i18n=20migration=20=E2=80=94?= =?UTF-8?q?=2021=20pages/components=20translated=20+=20PT-BR=20README=20se?= =?UTF-8?q?ction?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Full en.json and pt-BR.json with 26 namespaces (~460 strings) - Migrated: HomePageClient, Analytics, Translator (4 components), Usage (5 components), ProviderLimits, Shared (UsageStats, TokenHealthBadge, SystemMonitor, ConsoleLogViewer, Footer), Login, Callback, ForgotPassword, Forbidden - README: added PT-BR section with quick start, features, i18n docs - README: added language switcher badges at top --- README.md | 81 +++ .../(dashboard)/dashboard/HomePageClient.tsx | 38 +- .../(dashboard)/dashboard/analytics/page.tsx | 14 +- .../translator/components/ChatTesterMode.tsx | 9 +- .../translator/components/LiveMonitorMode.tsx | 25 +- .../translator/components/PlaygroundMode.tsx | 11 +- .../translator/components/TestBenchMode.tsx | 7 +- .../dashboard/usage/components/BudgetTab.tsx | 11 +- .../usage/components/BudgetTelemetryCards.tsx | 17 +- .../dashboard/usage/components/EvalsTab.tsx | 15 +- .../usage/components/ProviderLimits/index.tsx | 17 +- .../usage/components/RateLimitStatus.tsx | 7 +- .../usage/components/SessionsTab.tsx | 45 +- src/app/callback/page.tsx | 11 +- src/app/forbidden/page.tsx | 5 +- src/app/forgot-password/page.tsx | 9 +- src/app/login/page.tsx | 15 +- src/i18n/messages/en.json | 468 +++++++++++++++++- src/i18n/messages/pt-BR.json | 468 +++++++++++++++++- src/shared/components/ConsoleLogViewer.tsx | 7 +- src/shared/components/Footer.tsx | 9 +- src/shared/components/SystemMonitor.tsx | 5 +- src/shared/components/TokenHealthBadge.tsx | 15 +- src/shared/components/UsageStats.tsx | 37 +- 24 files changed, 1223 insertions(+), 123 deletions(-) diff --git a/README.md b/README.md index bb546d2639..294679d1ba 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,8 @@ # 🚀 OmniRoute — The Free AI Gateway +🌐 **[English](#-omniroute--the-free-ai-gateway)** | **[Português (BR)](#-omniroute--gateway-de-ia-gratuito)** + ### Never stop coding. Smart routing to **FREE & low-cost AI models** with automatic fallback. _Your universal API proxy — one endpoint, 36+ providers, zero downtime._ @@ -1145,6 +1147,85 @@ MIT License - see [LICENSE](LICENSE) for details. --- +--- + +## 🇧🇷 OmniRoute — Gateway de IA Gratuito + + + +### Nunca pare de codar. Roteamento inteligente para **modelos de IA GRATUITOS e de baixo custo** com fallback automático. + +_Seu proxy universal de API — um endpoint, 36+ provedores, zero downtime._ + +### 🌐 Internacionalização (i18n) + +O dashboard do OmniRoute suporta **múltiplos idiomas**. Atualmente disponível em: + +| Idioma | Código | Status | +| --------------------- | ------- | ----------- | +| 🇺🇸 English | `en` | ✅ Completo | +| 🇧🇷 Português (Brasil) | `pt-BR` | ✅ Completo | + +**Para trocar o idioma:** Clique no seletor de idioma (🇺🇸 EN) no header do dashboard → selecione o idioma desejado. + +**Para adicionar um novo idioma:** + +1. Crie `src/i18n/messages/{codigo}.json` baseado em `en.json` +2. Adicione o código em `src/i18n/config.ts` → `LOCALES` e `LANGUAGES` +3. Reinicie o servidor + +### ⚡ Início Rápido + +```bash +# Instalar via npm +npx omniroute@latest + +# Ou rodar do código-fonte +cp .env.example .env +npm install +PORT=20128 NEXT_PUBLIC_BASE_URL=http://localhost:20128 npm run dev +``` + +### 🐳 Docker + +```bash +docker run -d --name omniroute -p 20128:20128 diegosouzapw/omniroute:latest +``` + +### 🔑 Funcionalidades Principais + +- **36+ provedores de IA** — Claude, GPT, Gemini, Llama, Qwen, DeepSeek, e mais +- **Roteamento inteligente** — Fallback automático entre provedores +- **Tradução de formato** — OpenAI ↔ Claude ↔ Gemini automaticamente +- **Multi-conta** — Múltiplas contas por provedor com seleção inteligente +- **Cache semântico** — Reduz custos e latência +- **OAuth automático** — Tokens renovam automaticamente +- **Combos personalizados** — 6 estratégias de roteamento +- **Dashboard completo** — Monitoramento, logs, análises, configurações +- **CLI Tools** — Configure Claude Code, Codex, Cursor, Cline com um clique +- **100% TypeScript** — Código limpo e tipado + +### 📖 Documentação + +| Documento | Descrição | +| ----------------------------------------------- | -------------------------------------- | +| [Guia do Usuário](docs/USER_GUIDE.md) | Provedores, combos, CLI, deploy | +| [Referência da API](docs/API_REFERENCE.md) | Todos os endpoints com exemplos | +| [Solução de Problemas](docs/TROUBLESHOOTING.md) | Problemas comuns e soluções | +| [Arquitetura](docs/ARCHITECTURE.md) | Arquitetura e internos do sistema | +| [Contribuição](CONTRIBUTING.md) | Setup de desenvolvimento e guidelines | +| [Deploy em VM](docs/VM_DEPLOYMENT_GUIDE.md) | Guia completo: VM + nginx + Cloudflare | + +### 📧 Suporte + +> 💬 **Entre para a comunidade!** [Grupo WhatsApp](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Tire dúvidas, compartilhe dicas e fique atualizado. + +- **Website**: [omniroute.online](https://omniroute.online) +- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) +- **Issues**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) + +--- +
Built with ❤️ for developers who code 24/7
diff --git a/src/app/(dashboard)/dashboard/HomePageClient.tsx b/src/app/(dashboard)/dashboard/HomePageClient.tsx index 4cef9b30a9..4a1425aa01 100644 --- a/src/app/(dashboard)/dashboard/HomePageClient.tsx +++ b/src/app/(dashboard)/dashboard/HomePageClient.tsx @@ -1,5 +1,7 @@ "use client"; +import { useTranslations } from "next-intl"; + import { useState, useEffect, useMemo, useCallback } from "react"; import PropTypes from "prop-types"; import Image from "next/image"; @@ -10,6 +12,8 @@ import { AI_PROVIDERS, FREE_PROVIDERS, OAUTH_PROVIDERS } from "@/shared/constant import { useNotificationStore } from "@/store/notificationStore"; export default function HomePageClient({ machineId }) { + const t = useTranslations("home"); + const tc = useTranslations("common"); const [providerConnections, setProviderConnections] = useState([]); const [models, setModels] = useState([]); const [loading, setLoading] = useState(true); @@ -103,14 +107,14 @@ export default function HomePageClient({ machineId }) { }, [selectedProvider, models]); const quickStartLinks = [ - { label: "Documentation", href: "/docs", icon: "menu_book" }, - { label: "Providers", href: "/dashboard/providers", icon: "dns" }, + { label: t("documentation"), href: "/docs", icon: "menu_book" }, + { label: tc("provider") + "s", href: "/dashboard/providers", icon: "dns" }, { label: "Combos", href: "/dashboard/combos", icon: "layers" }, { label: "Analytics", href: "/dashboard/analytics", icon: "analytics" }, - { label: "Health Monitor", href: "/dashboard/health", icon: "health_and_safety" }, + { label: t("healthMonitor"), href: "/dashboard/health", icon: "health_and_safety" }, { label: "CLI Tools", href: "/dashboard/cli-tools", icon: "terminal" }, { - label: "Report issue", + label: t("reportIssue"), href: "https://github.com/diegosouzapw/OmniRoute/issues", external: true, icon: "bug_report", @@ -135,17 +139,15 @@ export default function HomePageClient({ machineId }) {
-

Quick Start

-

- Get up and running in 4 steps. Connect providers, route models, monitor everything. -

+

{t("quickStart")}

+

{t("quickStartDesc")}

menu_book - Full Docs + {t("fullDocs")}
@@ -155,7 +157,7 @@ export default function HomePageClient({ machineId }) { key
- 1. Create API key + {t("step1Title")}

Go to{" "} @@ -170,7 +172,7 @@ export default function HomePageClient({ machineId }) { dns

- 2. Connect providers + {t("step2Title")}

Add accounts in{" "} @@ -185,7 +187,7 @@ export default function HomePageClient({ machineId }) { link

- 3. Point your client + {t("step3Title")}

Set base URL to{" "} @@ -200,7 +202,7 @@ export default function HomePageClient({ machineId }) { analytics

- 4. Monitor & optimize + {t("step4Title")}

Track tokens, cost and errors in{" "} @@ -239,7 +241,7 @@ export default function HomePageClient({ machineId }) {

-

Providers Overview

+

{t("providersOverview")}

{providerStats.filter((item) => item.total > 0).length} configured of{" "} {providerStats.length} available providers @@ -348,7 +350,7 @@ function ProviderOverviewCard({ item, metrics, onClick }) {

{item.total === 0 - ? "Not configured" + ? tc("notConfigured") : `${item.connected} active · ${item.errors} error`}

{metrics && metrics.totalRequests > 0 && ( @@ -433,7 +435,7 @@ function ProviderModelsModal({ provider, models, onClose }) { search_off -

No models available for this provider.

+

{t("noModelsAvailable")}

Configure a connection first in{" "}