diff --git a/docs/i18n-tasks/01-home.md b/docs/i18n-tasks/01-home.md new file mode 100644 index 0000000000..84b7765f1b --- /dev/null +++ b/docs/i18n-tasks/01-home.md @@ -0,0 +1,36 @@ +# Task 01 — Home Page (Dashboard) + +**Status:** `[ ]` Não iniciado +**Namespace JSON:** `home` + +## Arquivos +| Arquivo | Linhas | Strings | +|---------|--------|---------| +| `src/app/(dashboard)/dashboard/page.tsx` | 17 | 0 (wrapper) | +| `src/app/(dashboard)/dashboard/HomePageClient.tsx` | 500 | ~25 | + +## Strings a Traduzir + +### HomePageClient.tsx +| Linha | String EN | Chave i18n | String PT-BR | +|-------|-----------|------------|--------------| +| 138 | "Quick Start" | `home.quickStart` | "Início Rápido" | +| 242 | "Providers Overview" | `home.providersOverview` | "Visão Geral dos Provedores" | +| 436 | "No models available for this provider." | `home.noModelsAvailable` | "Nenhum modelo disponível para este provedor." | +| — | "Total Requests" | `home.totalRequests` | "Total de Requisições" | +| — | "Active Providers" | `home.activeProviders` | "Provedores Ativos" | +| — | "Success Rate" | `home.successRate` | "Taxa de Sucesso" | +| — | "Avg Latency" | `home.avgLatency` | "Latência Média" | +| — | "Configure Endpoint" | `home.configureEndpoint` | "Configurar Endpoint" | +| — | "Add Provider" | `home.addProvider` | "Adicionar Provedor" | +| — | "View Docs" | `home.viewDocs` | "Ver Documentação" | +| — | "Copied!" | `common.copied` | ✅ já existe | +| — | "requests" | `home.requests` | "requisições" | +| — | "models" | `home.models` | "modelos" | +| — | "accounts" | `home.accounts` | "contas" | + +## Checklist +- [ ] Adicionar chaves no `en.json` (namespace `home`) +- [ ] Adicionar traduções no `pt-BR.json` +- [ ] Substituir strings por `t()` no `HomePageClient.tsx` +- [ ] Testar em EN e PT-BR diff --git a/docs/i18n-tasks/02-analytics.md b/docs/i18n-tasks/02-analytics.md new file mode 100644 index 0000000000..b8f1f52efa --- /dev/null +++ b/docs/i18n-tasks/02-analytics.md @@ -0,0 +1,25 @@ +# Task 02 — Analytics Page + +**Status:** `[ ]` Não iniciado +**Namespace JSON:** `analytics` + +## Arquivos +| Arquivo | Linhas | Strings | +|---------|--------|---------| +| `src/app/(dashboard)/dashboard/analytics/page.tsx` | 46 | ~8 | + +## Strings a Traduzir + +| Linha | String EN | Chave i18n | String PT-BR | +|-------|-----------|------------|--------------| +| 11 | "Monitor your API usage patterns..." | `analytics.overviewDescription` | "Monitore padrões de uso da API..." | +| 13 | "Run evaluation suites to test..." | `analytics.evalsDescription` | "Execute suítes de avaliação..." | +| 24 | "Analytics" | `analytics.title` | "Análises" | +| 32 | "Overview" | `analytics.overview` | "Visão Geral" | +| 33 | "Evals" | `analytics.evals` | "Avaliações" | + +## Checklist +- [ ] Adicionar chaves no `en.json` +- [ ] Adicionar traduções no `pt-BR.json` +- [ ] Substituir strings por `t()` em `page.tsx` +- [ ] Testar em EN e PT-BR diff --git a/docs/i18n-tasks/03-api-manager.md b/docs/i18n-tasks/03-api-manager.md new file mode 100644 index 0000000000..95a225529e --- /dev/null +++ b/docs/i18n-tasks/03-api-manager.md @@ -0,0 +1,31 @@ +# Task 03 — API Manager Page + +**Status:** `[ ]` Não iniciado +**Namespace JSON:** `apiManager` + +## Arquivos +| Arquivo | Linhas | Strings | +|---------|--------|---------| +| `src/app/(dashboard)/dashboard/api-manager/ApiManagerPageClient.tsx` | ~400 | ~20 | + +## Strings a Traduzir (levantamento parcial — abrir código para completar) + +| String EN | Chave i18n | String PT-BR | +|-----------|------------|--------------| +| "API Keys" | `apiManager.title` | "Chaves de API" | +| "Create API Key" | `apiManager.createKey` | "Criar Chave de API" | +| "Name" | `apiManager.name` | "Nome" | +| "Key" | `apiManager.key` | "Chave" | +| "Created" | `apiManager.created` | "Criado em" | +| "Last Used" | `apiManager.lastUsed` | "Último Uso" | +| "Actions" | `apiManager.actions` | "Ações" | +| "Delete" | `common.delete` | ✅ já existe | +| "No API keys found" | `apiManager.noKeys` | "Nenhuma chave de API encontrada" | +| ~11 strings adicionais | — | Levantar no código | + +## Checklist +- [ ] Levantar todas as strings do `ApiManagerPageClient.tsx` +- [ ] Adicionar chaves no `en.json` +- [ ] Adicionar traduções no `pt-BR.json` +- [ ] Substituir strings por `t()` +- [ ] Testar em EN e PT-BR diff --git a/docs/i18n-tasks/04-audit-log.md b/docs/i18n-tasks/04-audit-log.md new file mode 100644 index 0000000000..bf4ca8e981 --- /dev/null +++ b/docs/i18n-tasks/04-audit-log.md @@ -0,0 +1,31 @@ +# Task 04 — Audit Log Page + +**Status:** `[ ]` Não iniciado +**Namespace JSON:** `auditLog` + +## Arquivos +| Arquivo | Linhas | Strings | +|---------|--------|---------| +| `src/app/(dashboard)/dashboard/audit-log/page.tsx` | 241 | ~12 | +| `src/app/(dashboard)/dashboard/logs/AuditLogTab.tsx` | ~100 | ~3 | + +## Strings a Traduzir + +| String EN | Chave i18n | String PT-BR | +|-----------|------------|--------------| +| "Audit Log" | `auditLog.title` | "Log de Auditoria" | +| "Search actions..." | `auditLog.searchPlaceholder` | "Buscar ações..." | +| "Action" | `auditLog.action` | "Ação" | +| "Actor" | `auditLog.actor` | "Autor" | +| "Target" | `auditLog.target` | "Alvo" | +| "Details" | `auditLog.details` | "Detalhes" | +| "IP Address" | `auditLog.ipAddress` | "Endereço IP" | +| "Timestamp" | `auditLog.timestamp` | "Data/Hora" | +| "No audit entries found" | `auditLog.noEntries` | "Nenhum registro de auditoria" | +| "Load More" | `auditLog.loadMore` | "Carregar Mais" | + +## Checklist +- [ ] Adicionar chaves no `en.json` +- [ ] Adicionar traduções no `pt-BR.json` +- [ ] Substituir strings em `audit-log/page.tsx` e `AuditLogTab.tsx` +- [ ] Testar em EN e PT-BR diff --git a/docs/i18n-tasks/05-cli-tools.md b/docs/i18n-tasks/05-cli-tools.md new file mode 100644 index 0000000000..a7491fcd22 --- /dev/null +++ b/docs/i18n-tasks/05-cli-tools.md @@ -0,0 +1,37 @@ +# Task 05 — CLI Tools Page + +**Status:** `[ ]` Não iniciado +**Namespace JSON:** `cliTools` + +## Arquivos +| Arquivo | Strings | +|---------|---------| +| `cli-tools/components/AntigravityToolCard.tsx` | ~3 | +| `cli-tools/components/ClaudeToolCard.tsx` | ~3 | +| `cli-tools/components/ClineToolCard.tsx` | ~4 | +| `cli-tools/components/CodexToolCard.tsx` | ~3 | +| `cli-tools/components/DefaultToolCard.tsx` | ~3 | +| `cli-tools/components/DroidToolCard.tsx` | ~2 | +| `cli-tools/components/KiloToolCard.tsx` | ~4 | +| `cli-tools/components/OpenClawToolCard.tsx` | ~2 | + +## Strings comuns entre Tool Cards + +| String EN | Chave i18n | String PT-BR | +|-----------|------------|--------------| +| "Status" | `cliTools.status` | "Status" | +| "Connected" | `cliTools.connected` | "Conectado" | +| "Not Connected" | `cliTools.notConnected` | "Não Conectado" | +| "Configure" | `cliTools.configure` | "Configurar" | +| "Test Connection" | `cliTools.testConnection` | "Testar Conexão" | +| "Models" | `cliTools.models` | "Modelos" | +| "Map Models" | `cliTools.mapModels` | "Mapear Modelos" | +| "Save" | `common.save` | ✅ já existe | +| "Cancel" | `common.cancel` | ✅ já existe | + +## Checklist +- [ ] Levantar strings de cada ToolCard +- [ ] Adicionar chaves no `en.json` +- [ ] Adicionar traduções no `pt-BR.json` +- [ ] Substituir por `t()` em cada componente +- [ ] Testar em EN e PT-BR diff --git a/docs/i18n-tasks/06-combos.md b/docs/i18n-tasks/06-combos.md new file mode 100644 index 0000000000..c81b4f5c09 --- /dev/null +++ b/docs/i18n-tasks/06-combos.md @@ -0,0 +1,34 @@ +# Task 06 — Combos Page + +**Status:** `[ ]` Não iniciado +**Namespace JSON:** `combos` + +## Arquivos +| Arquivo | Linhas | Strings | +|---------|--------|---------| +| `src/app/(dashboard)/dashboard/combos/page.tsx` | ~1000 | ~20 | + +## Strings a Traduzir + +| Linha | String EN | Chave i18n | String PT-BR | +|-------|-----------|------------|--------------| +| 207 | "Combos" | `combos.title` | "Combos" | +| 372 | "No models" | `combos.noModels` | "Sem modelos" | +| 747 | "Routing Strategy" | `combos.routingStrategy` | "Estratégia de Roteamento" | +| 791 | "Models" | `combos.models` | "Modelos" | +| 807 | "No models added yet" | `combos.noModelsYet` | "Nenhum modelo adicionado" | +| 922 | "Max Retries" | `combos.maxRetries` | "Máximo de Tentativas" | +| 959 | "Timeout (ms)" | `combos.timeout` | "Timeout (ms)" | +| 977 | "Healthcheck" | `combos.healthcheck` | "Verificação de Saúde" | +| — | "Create Combo" | `combos.create` | "Criar Combo" | +| — | "Edit Combo" | `combos.edit` | "Editar Combo" | +| — | "Delete Combo" | `combos.deleteCombo` | "Excluir Combo" | +| — | "Add Model" | `combos.addModel` | "Adicionar Modelo" | +| — | "Priority" | `combos.priority` | "Prioridade" | +| — | "Fallback" | `combos.fallback` | "Fallback" | + +## Checklist +- [ ] Adicionar chaves no `en.json` +- [ ] Adicionar traduções no `pt-BR.json` +- [ ] Substituir strings por `t()` em `combos/page.tsx` +- [ ] Testar em EN e PT-BR diff --git a/docs/i18n-tasks/07-costs.md b/docs/i18n-tasks/07-costs.md new file mode 100644 index 0000000000..65c82ad296 --- /dev/null +++ b/docs/i18n-tasks/07-costs.md @@ -0,0 +1,23 @@ +# Task 07 — Costs Page + +**Status:** `[ ]` Não iniciado +**Namespace JSON:** `costs` + +## Arquivos +| Arquivo | Linhas | Strings | +|---------|--------|---------| +| `src/app/(dashboard)/dashboard/costs/page.tsx` | ~200 | ~5 | + +## Strings a Traduzir + +| String EN | Chave i18n | String PT-BR | +|-----------|------------|--------------| +| "Costs" | `costs.title` | "Custos" | +| "Total Cost" | `costs.totalCost` | "Custo Total" | +| "Cost Breakdown" | `costs.breakdown` | "Detalhamento de Custos" | +| "No cost data" | `costs.noData` | "Sem dados de custo" | + +## Checklist +- [ ] Levantar strings completas do código +- [ ] Adicionar chaves no `en.json` / `pt-BR.json` +- [ ] Substituir por `t()` e testar diff --git a/docs/i18n-tasks/08-endpoint.md b/docs/i18n-tasks/08-endpoint.md new file mode 100644 index 0000000000..c0358d5414 --- /dev/null +++ b/docs/i18n-tasks/08-endpoint.md @@ -0,0 +1,30 @@ +# Task 08 — Endpoint Page + +**Status:** `[ ]` Não iniciado +**Namespace JSON:** `endpoint` + +## Arquivos +| Arquivo | Linhas | Strings | +|---------|--------|---------| +| `src/app/(dashboard)/dashboard/endpoint/EndpointPageClient.tsx` | ~750 | ~20 | + +## Strings a Traduzir + +| Linha | String EN | Chave i18n | String PT-BR | +|-------|-----------|------------|--------------| +| 320 | "API Endpoint" | `endpoint.title` | "Endpoint da API" | +| 403 | "Available Endpoints" | `endpoint.available` | "Endpoints Disponíveis" | +| 561 | "Cloud Proxy" | `endpoint.cloudProxy` | "Proxy na Nuvem" | +| 632 | "Note" | `endpoint.note` | "Nota" | +| 717 | "Warning" | `endpoint.warning` | "Aviso" | +| 740 | "Are you sure you want to disable cloud proxy?" | `endpoint.disableConfirm` | "Tem certeza que deseja desativar o proxy na nuvem?" | +| — | "Copy" | `common.copy` | ✅ já existe | +| — | "Base URL" | `endpoint.baseUrl` | "URL Base" | +| — | "Connected" | `endpoint.connected` | "Conectado" | +| — | "Enable" | `endpoint.enable` | "Ativar" | +| — | "Disable" | `endpoint.disable` | "Desativar" | + +## Checklist +- [ ] Levantar strings restantes +- [ ] Adicionar chaves no `en.json` / `pt-BR.json` +- [ ] Substituir por `t()` e testar diff --git a/docs/i18n-tasks/09-health.md b/docs/i18n-tasks/09-health.md new file mode 100644 index 0000000000..13e45d338e --- /dev/null +++ b/docs/i18n-tasks/09-health.md @@ -0,0 +1,30 @@ +# Task 09 — Health Page + +**Status:** `[ ]` Não iniciado +**Namespace JSON:** `health` + +## Arquivos +| Arquivo | Linhas | Strings | +|---------|--------|---------| +| `src/app/(dashboard)/dashboard/health/page.tsx` | ~350 | ~15 | + +## Strings a Traduzir + +| String EN | Chave i18n | String PT-BR | +|-----------|------------|--------------| +| "System Health" | `health.title` | "Saúde do Sistema" | +| "Healthy" | `health.healthy` | "Saudável" | +| "Degraded" | `health.degraded` | "Degradado" | +| "Down" | `health.down` | "Offline" | +| "Uptime" | `health.uptime` | "Tempo Ativo" | +| "Memory" | `health.memory` | "Memória" | +| "CPU" | `health.cpu` | "CPU" | +| "Database" | `health.database` | "Banco de Dados" | +| "Last Check" | `health.lastCheck` | "Última Verificação" | +| "Refresh" | `common.refresh` | ✅ já existe | +| ~5 strings adicionais | — | Levantar | + +## Checklist +- [ ] Levantar strings restantes +- [ ] Adicionar chaves / traduções +- [ ] Substituir por `t()` e testar diff --git a/docs/i18n-tasks/10-limits.md b/docs/i18n-tasks/10-limits.md new file mode 100644 index 0000000000..29b0dfae8a --- /dev/null +++ b/docs/i18n-tasks/10-limits.md @@ -0,0 +1,24 @@ +# Task 10 — Limits Page + +**Status:** `[ ]` Não iniciado +**Namespace JSON:** `limits` + +## Arquivos +| Arquivo | Linhas | Strings | +|---------|--------|---------| +| `src/app/(dashboard)/dashboard/limits/page.tsx` | ~150 | ~5 | + +## Strings a Traduzir + +| String EN | Chave i18n | String PT-BR | +|-----------|------------|--------------| +| "Limits & Quotas" | `limits.title` | "Limites e Cotas" | +| "Rate Limit" | `limits.rateLimit` | "Limite de Taxa" | +| "Provider" | `limits.provider` | "Provedor" | +| "Remaining" | `limits.remaining` | "Restante" | +| "Reset" | `limits.reset` | "Reiniciar" | + +## Checklist +- [ ] Levantar strings completas +- [ ] Adicionar chaves / traduções +- [ ] Substituir por `t()` e testar diff --git a/docs/i18n-tasks/11-logs.md b/docs/i18n-tasks/11-logs.md new file mode 100644 index 0000000000..3b1ef1c40b --- /dev/null +++ b/docs/i18n-tasks/11-logs.md @@ -0,0 +1,24 @@ +# Task 11 — Logs Page + +**Status:** `[ ]` Não iniciado +**Namespace JSON:** `logs` + +## Arquivos +| Arquivo | Linhas | Strings | +|---------|--------|---------| +| `src/app/(dashboard)/dashboard/logs/` | ~200 | ~5 | + +## Strings a Traduzir + +| String EN | Chave i18n | String PT-BR | +|-----------|------------|--------------| +| "Logs" | `logs.title` | "Logs" | +| "Request Logs" | `logs.requestLogs` | "Logs de Requisições" | +| "Proxy Logs" | `logs.proxyLogs` | "Logs do Proxy" | +| "Audit Log" | `logs.auditLog` | "Log de Auditoria" | +| "Console" | `logs.console` | "Console" | + +## Checklist +- [ ] Levantar strings completas +- [ ] Adicionar chaves / traduções +- [ ] Substituir por `t()` e testar diff --git a/docs/i18n-tasks/12-onboarding.md b/docs/i18n-tasks/12-onboarding.md new file mode 100644 index 0000000000..1abbcdd253 --- /dev/null +++ b/docs/i18n-tasks/12-onboarding.md @@ -0,0 +1,26 @@ +# Task 12 — Onboarding Page + +**Status:** `[ ]` Não iniciado +**Namespace JSON:** `onboarding` + +## Arquivos +| Arquivo | Linhas | Strings | +|---------|--------|---------| +| `src/app/(dashboard)/dashboard/onboarding/page.tsx` | ~300 | ~10 | + +## Strings a Traduzir + +| String EN | Chave i18n | String PT-BR | +|-----------|------------|--------------| +| "Welcome to OmniRoute" | `onboarding.welcome` | "Bem-vindo ao OmniRoute" | +| "Set Password" | `onboarding.setPassword` | "Definir Senha" | +| "Add Provider" | `onboarding.addProvider` | "Adicionar Provedor" | +| "Get Started" | `onboarding.getStarted` | "Começar" | +| "Skip" | `onboarding.skip` | "Pular" | +| "Next" | `common.next` | ✅ já existe | +| ~4 strings adicionais | — | Levantar | + +## Checklist +- [ ] Levantar strings completas +- [ ] Adicionar chaves / traduções +- [ ] Substituir por `t()` e testar diff --git a/docs/i18n-tasks/13-providers.md b/docs/i18n-tasks/13-providers.md new file mode 100644 index 0000000000..6b376c58d2 --- /dev/null +++ b/docs/i18n-tasks/13-providers.md @@ -0,0 +1,35 @@ +# Task 13 — Providers Pages + +**Status:** `[ ]` Não iniciado +**Namespace JSON:** `providers` + +## Arquivos +| Arquivo | Strings | +|---------|---------| +| `providers/page.tsx` | ~5 | +| `providers/[id]/page.tsx` | ~12 | +| `providers/new/page.tsx` | ~3 | +| `providers/components/ModelAvailabilityPanel.tsx` | ~3 | +| `providers/components/ModelAvailabilityBadge.tsx` | ~1 | + +## Strings a Traduzir + +| String EN | Chave i18n | String PT-BR | +|-----------|------------|--------------| +| "Providers" | `providers.title` | "Provedores" | +| "Add Provider" | `providers.add` | "Adicionar Provedor" | +| "Edit Provider" | `providers.edit` | "Editar Provedor" | +| "Test Connection" | `providers.testConnection` | "Testar Conexão" | +| "Connected" | `providers.connected` | "Conectado" | +| "Disconnected" | `providers.disconnected` | "Desconectado" | +| "Models" | `providers.models` | "Modelos" | +| "Accounts" | `providers.accounts` | "Contas" | +| "Delete Provider" | `providers.deleteProvider` | "Excluir Provedor" | +| "No providers configured" | `providers.noProviders` | "Nenhum provedor configurado" | +| "Model Availability" | `providers.modelAvailability` | "Disponibilidade de Modelos" | +| ~9 strings adicionais | — | Levantar | + +## Checklist +- [ ] Levantar strings completas de todos os arquivos +- [ ] Adicionar chaves / traduções +- [ ] Substituir por `t()` e testar diff --git a/docs/i18n-tasks/14-settings.md b/docs/i18n-tasks/14-settings.md new file mode 100644 index 0000000000..b1344c39d6 --- /dev/null +++ b/docs/i18n-tasks/14-settings.md @@ -0,0 +1,51 @@ +# Task 14 — Settings Page (MAIOR TAREFA) + +**Status:** `[ ]` Não iniciado +**Namespace JSON:** `settings` + +## Arquivos (20 componentes!) +| Arquivo | Strings | +|---------|---------| +| `settings/components/AppearanceTab.tsx` | ~4 | +| `settings/components/CacheStatsCard.tsx` | ~4 | +| `settings/components/ComboDefaultsTab.tsx` | ~8 | +| `settings/components/FallbackChainsEditor.tsx` | ~2 | +| `settings/components/IPFilterSection.tsx` | ~2 | +| `settings/components/PoliciesPanel.tsx` | ~5 | +| `settings/components/PricingTab.tsx` | ~8 | +| `settings/components/ProxyTab.tsx` | ~2 | +| `settings/components/ResilienceTab.tsx` | ~7 | +| `settings/components/RoutingTab.tsx` | ~4 | +| `settings/components/SecurityTab.tsx` | ~5 | +| `settings/components/SessionInfoCard.tsx` | ~5 | +| `settings/components/SystemPromptTab.tsx` | ~2 | +| `settings/components/SystemStorageTab.tsx` | ~8 | +| `settings/components/ThinkingBudgetTab.tsx` | ~5 | +| `settings/pricing/page.tsx` | ~17 | + +## Strings a Traduzir (amostra) + +| String EN | Chave i18n | String PT-BR | +|-----------|------------|--------------| +| "General" | `settings.general` | "Geral" | +| "Security" | `settings.security` | "Segurança" | +| "Appearance" | `settings.appearance` | "Aparência" | +| "Routing" | `settings.routing` | "Roteamento" | +| "Cache" | `settings.cache` | "Cache" | +| "Resilience" | `settings.resilience` | "Resiliência" | +| "System Prompt" | `settings.systemPrompt` | "Prompt do Sistema" | +| "Thinking Budget" | `settings.thinkingBudget` | "Orçamento de Raciocínio" | +| "Proxy" | `settings.proxy` | "Proxy" | +| "Pricing" | `settings.pricing` | "Preços" | +| "Storage" | `settings.storage` | "Armazenamento" | +| "Policies" | `settings.policies` | "Políticas" | +| "IP Filter" | `settings.ipFilter` | "Filtro de IP" | +| "Combo Defaults" | `settings.comboDefaults` | "Padrões de Combo" | +| "Fallback Chains" | `settings.fallbackChains` | "Cadeias de Fallback" | +| ~40 strings adicionais | — | Levantar em cada tab | + +## Checklist +- [ ] Levantar strings de CADA componente (16 arquivos) +- [ ] Adicionar chaves / traduções +- [ ] Substituir por `t()` em todos os 16 arquivos +- [ ] Testar cada aba em EN e PT-BR diff --git a/docs/i18n-tasks/15-translator.md b/docs/i18n-tasks/15-translator.md new file mode 100644 index 0000000000..3a5199e781 --- /dev/null +++ b/docs/i18n-tasks/15-translator.md @@ -0,0 +1,41 @@ +# Task 15 — Translator Page + +**Status:** `[ ]` Não iniciado +**Namespace JSON:** `translator` + +## Arquivos +| Arquivo | Strings | +|---------|---------| +| `translator/components/LiveMonitorMode.tsx` | ~11 | +| `translator/components/PlaygroundMode.tsx` | ~5 | +| `translator/components/TestBenchMode.tsx` | ~3 | +| `translator/components/ChatTesterMode.tsx` | ~4 | + +## Strings a Traduzir + +| String EN | Chave i18n | String PT-BR | +|-----------|------------|--------------| +| "Real-Time Translation Activity" | `translator.realtime` | "Atividade de Tradução em Tempo Real" | +| "Chat Tester" | `translator.chatTester` | "Testador de Chat" | +| "Test Bench" | `translator.testBench` | "Bancada de Testes" | +| "Recent Translations" | `translator.recentTranslations` | "Traduções Recentes" | +| "No translations yet" | `translator.noTranslations` | "Nenhuma tradução ainda" | +| "Time" | `translator.time` | "Tempo" | +| "Source" | `translator.source` | "Origem" | +| "Target" | `translator.target` | "Destino" | +| "Model" | `translator.model` | "Modelo" | +| "Status" | `translator.status` | "Status" | +| "Latency" | `translator.latency` | "Latência" | +| "Format Converter" | `translator.formatConverter` | "Conversor de Formato" | +| "Input" | `translator.input` | "Entrada" | +| "Output" | `translator.output` | "Saída" | +| "Example Templates" | `translator.exampleTemplates` | "Modelos de Exemplo" | +| "Compatibility Tester" | `translator.compatibilityTester` | "Testador de Compatibilidade" | +| "Compatibility Report" | `translator.compatibilityReport` | "Relatório de Compatibilidade" | +| "Pipeline Debugger" | `translator.pipelineDebugger` | "Depurador de Pipeline" | +| "Translation Pipeline" | `translator.translationPipeline` | "Pipeline de Tradução" | + +## Checklist +- [ ] Adicionar chaves / traduções +- [ ] Substituir por `t()` em cada componente +- [ ] Testar em EN e PT-BR diff --git a/docs/i18n-tasks/16-usage.md b/docs/i18n-tasks/16-usage.md new file mode 100644 index 0000000000..3921dc9a7c --- /dev/null +++ b/docs/i18n-tasks/16-usage.md @@ -0,0 +1,57 @@ +# Task 16 — Usage Page + +**Status:** `[ ]` Não iniciado +**Namespace JSON:** `usage` + +## Arquivos +| Arquivo | Strings | +|---------|---------| +| `usage/components/BudgetTab.tsx` | ~4 | +| `usage/components/BudgetTelemetryCards.tsx` | ~9 | +| `usage/components/EvalsTab.tsx` | ~6 | +| `usage/components/RateLimitStatus.tsx` | ~2 | +| `usage/components/SessionsTab.tsx` | ~7 | +| `usage/components/ProviderLimits/index.tsx` | ~7 | +| `usage/components/ProviderLimits/ProviderLimitCard.tsx` | ~1 | +| `usage/components/ProviderLimits/QuotaTable.tsx` | ~1 | + +## Strings a Traduzir + +| String EN | Chave i18n | String PT-BR | +|-----------|------------|--------------| +| "Budget Management" | `usage.budgetManagement` | "Gerenciamento de Orçamento" | +| "API Key" | `usage.apiKey` | "Chave de API" | +| "This Month" | `usage.thisMonth` | "Este Mês" | +| "Set Limits" | `usage.setLimits` | "Definir Limites" | +| "Total requests" | `usage.totalRequests` | "Total de requisições" | +| "No data yet" | `usage.noData` | "Sem dados ainda" | +| "Entries" | `usage.entries` | "Entradas" | +| "Hit Rate" | `usage.hitRate` | "Taxa de Acerto" | +| "Circuit Breakers" | `usage.circuitBreakers` | "Disjuntores" | +| "Locked IPs" | `usage.lockedIPs` | "IPs Bloqueados" | +| "How It Works" | `usage.howItWorks` | "Como Funciona" | +| "Define" | `usage.define` | "Definir" | +| "Run" | `usage.run` | "Executar" | +| "Evaluate" | `usage.evaluate` | "Avaliar" | +| "Evaluation Suites" | `usage.evalSuites` | "Suítes de Avaliação" | +| "Model Evaluations" | `usage.modelEvals` | "Avaliações de Modelos" | +| "Model Lockouts" | `usage.modelLockouts` | "Bloqueios de Modelo" | +| "No models currently locked" | `usage.noLockouts` | "Nenhum modelo bloqueado" | +| "Active Sessions" | `usage.activeSessions` | "Sessões Ativas" | +| "No active sessions" | `usage.noSessions` | "Sem sessões ativas" | +| "Session" | `usage.session` | "Sessão" | +| "Age" | `usage.age` | "Idade" | +| "Requests" | `usage.requests` | "Requisições" | +| "Connection" | `usage.connection` | "Conexão" | +| "Provider Limits" | `usage.providerLimits` | "Limites do Provedor" | +| "No Providers Connected" | `usage.noProviders` | "Nenhum Provedor Conectado" | +| "Account" | `usage.account` | "Conta" | +| "Model Quotas" | `usage.modelQuotas` | "Cotas de Modelo" | +| "Last Used" | `usage.lastUsed` | "Último Uso" | +| "Actions" | `usage.actions` | "Ações" | +| "No quota data" | `usage.noQuota` | "Sem dados de cota" | + +## Checklist +- [ ] Adicionar chaves / traduções +- [ ] Substituir por `t()` em cada componente +- [ ] Testar em EN e PT-BR diff --git a/docs/i18n-tasks/17-shared-modals.md b/docs/i18n-tasks/17-shared-modals.md new file mode 100644 index 0000000000..c4c6743e09 --- /dev/null +++ b/docs/i18n-tasks/17-shared-modals.md @@ -0,0 +1,44 @@ +# Task 17 — Shared Modals + +**Status:** `[ ]` Não iniciado +**Namespace JSON:** `modals` + +## Arquivos +| Arquivo | Strings | +|---------|---------| +| `shared/components/OAuthModal.tsx` | ~6 | +| `shared/components/KiroAuthModal.tsx` | ~10 | +| `shared/components/KiroSocialOAuthModal.tsx` | ~3 | +| `shared/components/CursorAuthModal.tsx` | ~2 | +| `shared/components/PricingModal.tsx` | ~10 | +| `shared/components/ModelSelectModal.tsx` | ~2 | +| `shared/components/ProxyConfigModal.tsx` | ~1 | + +## Strings a Traduzir + +| String EN | String PT-BR | +|-----------|--------------| +| "Waiting for Authorization" | "Aguardando Autorização" | +| "Verification URL" | "URL de Verificação" | +| "Your Code" | "Seu Código" | +| "Remote access:" | "Acesso remoto:" | +| "Connected Successfully!" | "Conectado com Sucesso!" | +| "Connection Failed" | "Falha na Conexão" | +| "Choose your authentication method:" | "Escolha seu método de autenticação:" | +| "AWS Builder ID" | "AWS Builder ID" | +| "AWS IAM Identity Center" | "AWS IAM Identity Center" | +| "Google Account" | "Conta Google" | +| "GitHub Account" | "Conta GitHub" | +| "Import Token" | "Importar Token" | +| "Auto-detecting tokens..." | "Detectando tokens automaticamente..." | +| "Pricing Configuration" | "Configuração de Preços" | +| "Loading pricing data..." | "Carregando dados de preços..." | +| "Model" / "Input" / "Output" / "Cached" | "Modelo" / "Entrada" / "Saída" / "Em Cache" | +| "Combos" | "Combos" | +| "No models found" | "Nenhum modelo encontrado" | +| "Connected" | "Conectado" | + +## Checklist +- [ ] Adicionar chaves / traduções +- [ ] Substituir por `t()` em cada modal +- [ ] Testar cada modal em EN e PT-BR diff --git a/docs/i18n-tasks/18-shared-loggers.md b/docs/i18n-tasks/18-shared-loggers.md new file mode 100644 index 0000000000..29dc5769c0 --- /dev/null +++ b/docs/i18n-tasks/18-shared-loggers.md @@ -0,0 +1,37 @@ +# Task 18 — Shared Loggers + +**Status:** `[ ]` Não iniciado +**Namespace JSON:** `loggers` + +## Arquivos +| Arquivo | Strings | +|---------|---------| +| `shared/components/RequestLoggerV2.tsx` | ~12 | +| `shared/components/RequestLoggerDetail.tsx` | ~4 | +| `shared/components/ProxyLogger.tsx` | ~7 | +| `shared/components/ProxyLogDetail.tsx` | ~6 | +| `shared/components/ConsoleLogViewer.tsx` | ~2 | + +## Strings a Traduzir + +| String EN | String PT-BR | +|-----------|--------------| +| "All Providers" | "Todos os Provedores" | +| "All Models" | "Todos os Modelos" | +| "All Accounts" | "Todas as Contas" | +| "All API Keys" | "Todas as Chaves de API" | +| "Newest" / "Oldest" | "Mais Recente" / "Mais Antigo" | +| "Model A-Z" / "Model Z-A" | "Modelo A-Z" / "Modelo Z-A" | +| "Columns" | "Colunas" | +| "Loading logs..." | "Carregando logs..." | +| "All Types" | "Todos os Tipos" | +| "All Levels" | "Todos os Níveis" | +| "Proxy Event" | "Evento do Proxy" | +| "Time" / "Model" / "Combo" | "Tempo" / "Modelo" / "Combo" | +| "No log entries found" | "Nenhuma entrada de log encontrada" | +| "No payload data available" | "Nenhum dado de payload disponível" | + +## Checklist +- [ ] Adicionar chaves / traduções +- [ ] Substituir por `t()` em cada logger +- [ ] Testar em EN e PT-BR diff --git a/docs/i18n-tasks/19-shared-charts.md b/docs/i18n-tasks/19-shared-charts.md new file mode 100644 index 0000000000..fac07cb072 --- /dev/null +++ b/docs/i18n-tasks/19-shared-charts.md @@ -0,0 +1,36 @@ +# Task 19 — Shared Charts & Stats + +**Status:** `[ ]` Não iniciado +**Namespace JSON:** `stats` + +## Arquivos +| Arquivo | Strings | +|---------|---------| +| `shared/components/UsageStats.tsx` | ~6 | +| `shared/components/analytics/charts.tsx` | ~15 | +| `shared/components/TokenHealthBadge.tsx` | ~6 | +| `shared/components/SystemMonitor.tsx` | ~1 | +| `shared/components/Footer.tsx` | ~3 | + +## Strings a Traduzir + +| String EN | String PT-BR | +|-----------|--------------| +| "Usage Overview" | "Visão Geral de Uso" | +| "Output Tokens" | "Tokens de Saída" | +| "Total Cost" | "Custo Total" | +| "Usage by Model" | "Uso por Modelo" | +| "Usage by Account" | "Uso por Conta" | +| "Failed to load usage statistics." | "Falha ao carregar estatísticas." | +| "Token Health" | "Saúde dos Tokens" | +| "Total OAuth" | "Total OAuth" | +| "Healthy" / "Errored" / "Warning" | "Saudável" / "Com Erro" / "Aviso" | +| "Last check" | "Última verificação" | +| "No data" / "Share" | "Sem dados" / "Compartilhar" | +| "Unable to load system metrics" | "Não foi possível carregar métricas" | +| "Product" / "Resources" / "Company" (Footer) | "Produto" / "Recursos" / "Empresa" | + +## Checklist +- [ ] Adicionar chaves / traduções +- [ ] Substituir por `t()` em cada componente +- [ ] Testar em EN e PT-BR diff --git a/docs/i18n-tasks/20-login-auth.md b/docs/i18n-tasks/20-login-auth.md new file mode 100644 index 0000000000..5910266bcf --- /dev/null +++ b/docs/i18n-tasks/20-login-auth.md @@ -0,0 +1,36 @@ +# Task 20 — Login & Auth Pages + +**Status:** `[ ]` Não iniciado +**Namespace JSON:** `auth` + +## Arquivos +| Arquivo | Strings | +|---------|---------| +| `src/app/login/page.tsx` | ~8 | +| `src/app/forgot-password/page.tsx` | ~3 | +| `src/app/callback/page.tsx` | ~5 | +| `src/app/forbidden/page.tsx` | ~1 | + +## Strings a Traduzir + +| String EN | String PT-BR | +|-----------|--------------| +| "Welcome" | "Bem-vindo" | +| "OmniRoute" | "OmniRoute" (não traduzir) | +| "Sign in" | "Entrar" | +| "Enter your password to continue" | "Digite sua senha para continuar" | +| "Password" | "Senha" | +| "Unified AI API Proxy" | "Proxy Unificado de API de IA" | +| "Loading..." | "Carregando..." | +| "Password protection is not enabled" | "Proteção por senha não está ativada" | +| "Reset Password" | "Redefinir Senha" | +| "Choose a method to recover access" | "Escolha um método para recuperar acesso" | +| "Processing..." | "Processando..." | +| "Authorization Successful!" | "Autorização bem-sucedida!" | +| "Copy This URL" | "Copiar esta URL" | +| "Access Denied" | "Acesso Negado" | + +## Checklist +- [ ] Adicionar chaves / traduções +- [ ] Substituir por `t()` em cada página +- [ ] Testar em EN e PT-BR diff --git a/docs/i18n-tasks/21-landing.md b/docs/i18n-tasks/21-landing.md new file mode 100644 index 0000000000..8a0631d0d4 --- /dev/null +++ b/docs/i18n-tasks/21-landing.md @@ -0,0 +1,34 @@ +# Task 21 — Landing Page + +**Status:** `[ ]` Não iniciado +**Namespace JSON:** `landing` + +## Arquivos +| Arquivo | Strings | +|---------|---------| +| `landing/components/HeroSection.tsx` | ~3 | +| `landing/components/Features.tsx` | ~10 | +| `landing/components/HowItWorks.tsx` | ~5 | +| `landing/components/GetStarted.tsx` | ~5 | +| `landing/components/Navigation.tsx` | ~2 | +| `landing/components/FlowAnimation.tsx` | ~2 | +| `landing/components/Footer.tsx` | ~5 | + +## Strings a Traduzir (amostra) + +| String EN | String PT-BR | +|-----------|--------------| +| "All AI Providers" | "Todos os Provedores de IA" | +| "One Endpoint" | "Um Endpoint" | +| "Powerful Features" | "Recursos Poderosos" | +| "How OmniRoute Works" | "Como o OmniRoute Funciona" | +| "Install OmniRoute" | "Instalar o OmniRoute" | +| "Open Dashboard" | "Abrir Painel" | +| "Route Requests" | "Rotear Requisições" | +| "Data Location:" | "Local dos Dados:" | +| "Product" / "Resources" / "Legal" | "Produto" / "Recursos" / "Legal" | + +## Checklist +- [ ] Levantar strings completas de cada componente +- [ ] Adicionar chaves / traduções +- [ ] Substituir por `t()` e testar diff --git a/docs/i18n-tasks/22-docs.md b/docs/i18n-tasks/22-docs.md new file mode 100644 index 0000000000..5c668173c2 --- /dev/null +++ b/docs/i18n-tasks/22-docs.md @@ -0,0 +1,32 @@ +# Task 22 — Docs Page + +**Status:** `[ ]` Não iniciado +**Namespace JSON:** `docs` + +## Arquivos +| Arquivo | Strings | +|---------|---------| +| `src/app/docs/page.tsx` | ~25 | + +## Strings a Traduzir + +| String EN | String PT-BR | +|-----------|--------------| +| "Quick Start" | "Início Rápido" | +| "Features" | "Recursos" | +| "Supported Providers" | "Provedores Suportados" | +| "Common Use Cases" | "Casos de Uso Comuns" | +| "Client Compatibility" | "Compatibilidade de Clientes" | +| "Cherry Studio" | "Cherry Studio" (não traduzir) | +| "Codex / GitHub Copilot Models" | "Modelos Codex / GitHub Copilot" | +| "Cursor IDE" | "Cursor IDE" (não traduzir) | +| "Claude Code / Antigravity" | "Claude Code / Antigravity" | +| "API Reference" | "Referência da API" | +| "Method" / "Path" / "Notes" | "Método" / "Caminho" / "Notas" | +| "Model Prefixes" | "Prefixos de Modelo" | +| "Prefix" / "Provider" / "Type" | "Prefixo" / "Provedor" / "Tipo" | +| "Troubleshooting" | "Solução de Problemas" | + +## Checklist +- [ ] Adicionar chaves / traduções +- [ ] Substituir por `t()` e testar diff --git a/docs/i18n-tasks/23-legal.md b/docs/i18n-tasks/23-legal.md new file mode 100644 index 0000000000..8f98f362bc --- /dev/null +++ b/docs/i18n-tasks/23-legal.md @@ -0,0 +1,31 @@ +# Task 23 — Legal Pages (Privacy & Terms) + +**Status:** `[ ]` Não iniciado +**Namespace JSON:** `legal` + +## Arquivos +| Arquivo | Strings | +|---------|---------| +| `src/app/privacy/page.tsx` | ~10 | +| `src/app/terms/page.tsx` | ~5 | + +## Strings a Traduzir + +| String EN | String PT-BR | +|-----------|--------------| +| "Privacy Policy" | "Política de Privacidade" | +| "Terms of Service" | "Termos de Serviço" | +| "Provider configurations" | "Configurações de provedores" | +| "API keys" | "Chaves de API" | +| "Usage logs" | "Logs de uso" | +| "Application settings" | "Configurações do aplicativo" | +| "View and export usage analytics" | "Visualizar e exportar análises de uso" | +| "Clear usage history at any time" | "Limpar histórico de uso a qualquer momento" | +| "Configure log retention policies" | "Configurar políticas de retenção de logs" | +| "Back up and restore your database" | "Fazer backup e restaurar seu banco de dados" | + +## Checklist +- [ ] Adicionar chaves / traduções +- [ ] Substituir por `t()` e testar + +> **Nota:** Textos legais podem requerer revisão jurídica para tradução formal. diff --git a/docs/i18n-tasks/README.md b/docs/i18n-tasks/README.md new file mode 100644 index 0000000000..67d3ec49c7 --- /dev/null +++ b/docs/i18n-tasks/README.md @@ -0,0 +1,51 @@ +# i18n Translation Tasks + +Cada arquivo `.md` nesta pasta representa **uma tarefa de tradução** para uma página ou componente do OmniRoute. + +## Status Legend + +- `[ ]` — Não iniciado +- `[/]` — Em progresso +- `[x]` — Concluído + +## Dashboard Pages (~260 strings) + +| # | Tarefa | Arquivo | Strings | Status | +| --- | ---------------------------------- | ----------------------------------------------------- | ------- | ------ | +| 01 | [Home](./01-home.md) | `HomePageClient.tsx` | ~25 | `[ ]` | +| 02 | [Analytics](./02-analytics.md) | `analytics/page.tsx` | ~8 | `[ ]` | +| 03 | [API Manager](./03-api-manager.md) | `api-manager/` | ~20 | `[ ]` | +| 04 | [Audit Log](./04-audit-log.md) | `audit-log/page.tsx`, `logs/AuditLogTab.tsx` | ~15 | `[ ]` | +| 05 | [CLI Tools](./05-cli-tools.md) | `cli-tools/components/*.tsx` | ~20 | `[ ]` | +| 06 | [Combos](./06-combos.md) | `combos/page.tsx` | ~20 | `[ ]` | +| 07 | [Costs](./07-costs.md) | `costs/page.tsx` | ~5 | `[ ]` | +| 08 | [Endpoint](./08-endpoint.md) | `endpoint/EndpointPageClient.tsx` | ~20 | `[ ]` | +| 09 | [Health](./09-health.md) | `health/page.tsx` | ~15 | `[ ]` | +| 10 | [Limits](./10-limits.md) | `limits/page.tsx` | ~5 | `[ ]` | +| 11 | [Logs](./11-logs.md) | `logs/` | ~5 | `[ ]` | +| 12 | [Onboarding](./12-onboarding.md) | `onboarding/page.tsx` | ~10 | `[ ]` | +| 13 | [Providers](./13-providers.md) | `providers/page.tsx`, `[id]/page.tsx`, `new/page.tsx` | ~20 | `[ ]` | +| 14 | [Settings](./14-settings.md) | `settings/components/*.tsx` | ~55 | `[ ]` | +| 15 | [Translator](./15-translator.md) | `translator/components/*.tsx` | ~25 | `[ ]` | +| 16 | [Usage](./16-usage.md) | `usage/components/*.tsx` | ~35 | `[ ]` | + +## Shared Components (~95 strings) + +| # | Tarefa | Arquivo(s) | Strings | Status | +| --- | ---------------------------------------------- | ---------------------------------------------------- | ------- | ------ | +| 17 | [Shared Modals](./17-shared-modals.md) | `OAuthModal`, `KiroAuthModal`, `PricingModal`, etc. | ~40 | `[ ]` | +| 18 | [Shared Loggers](./18-shared-loggers.md) | `RequestLoggerV2`, `ProxyLogger`, `ProxyLogDetail` | ~30 | `[ ]` | +| 19 | [Shared Charts & Stats](./19-shared-charts.md) | `UsageStats`, `analytics/charts`, `TokenHealthBadge` | ~25 | `[ ]` | + +## Non-Dashboard Pages (~75 strings) + +| # | Tarefa | Arquivo(s) | Strings | Status | +| --- | ---------------------------------- | ------------------------------------------------------- | ------- | ------ | +| 20 | [Login & Auth](./20-login-auth.md) | `login/`, `forgot-password/`, `callback/`, `forbidden/` | ~20 | `[ ]` | +| 21 | [Landing Page](./21-landing.md) | `landing/components/*.tsx` | ~25 | `[ ]` | +| 22 | [Docs Page](./22-docs.md) | `docs/page.tsx` | ~25 | `[ ]` | +| 23 | [Legal Pages](./23-legal.md) | `privacy/`, `terms/` | ~15 | `[ ]` | + +--- + +**Total estimado: ~460 strings em 23 tarefas**