feat(i18n): traduzir as 43 telas restantes — i18n completa - #37
Merged
Conversation
Fecha a internacionalizacao: 73 arquivos passam a traduzir, e nenhum arquivo do frontend fica com texto fixo em portugues. 644 chaves novas, pt e en com 1551 chaves cada, sem divergencia. A reescrita foi feita por script, mas o script errou num ponto que so quebraria em runtime: ele injetava o hook numa unica funcao por arquivo. Onde havia um componente auxiliar definido ANTES do principal (MenuBar em RichTextEditor, Comment em KBComments, PropertyModal, ProtectedRoute/PublicRoute em App.jsx, e mais quatro), o t() ficava fora de escopo - ReferenceError ao renderizar, com o build passando. Foram 9 componentes; todos corrigidos e reconferidos. Reverte dois casos que o extrator pegou indevidamente: e-mail de exemplo em placeholder e igual em qualquer idioma. A catraca do teste deixa de ser uma lista fixa de arquivos e passa a ser 'todo arquivo que chama useTranslation' - o que ja foi traduzido nao pode regredir, e o que ainda nao foi entra sozinho quando chegar a vez. Verificado: 7 testes de i18n, vite build, e login no navegador sem chave crua na tela nem erro no console.
Contributor
There was a problem hiding this comment.
Pull request overview
Conclui a internacionalização do frontend, removendo textos fixos das telas/componentes e fortalecendo a “catraca” de regressão via teste para garantir que arquivos que já usam useTranslation não voltem a ter strings literais.
Changes:
- Substitui strings literais por
t('…')em dezenas de páginas e componentes (admin, GPS, KB, importação, analytics, etc.). - Ajusta o teste de i18n para derivar automaticamente a lista de arquivos “traduzidos” a partir do uso de
useTranslation. - Refatora pequenos detalhes correlatos (ex.: renome de variáveis para evitar colisão com
t, normalização de algumas chaves).
Reviewed changes
Copilot reviewed 46 out of 46 changed files in this pull request and generated 7 comments.
Show a summary per file
| File | Description |
|---|---|
| frontend/tests/i18n.test.js | Atualiza “catraca” para usar useTranslation como critério. |
| frontend/src/pages/Webhooks.jsx | Internacionaliza UI e confirmações da tela de webhooks. |
| frontend/src/pages/Templates.jsx | Internacionaliza título/descrição da tela de templates. |
| frontend/src/pages/settings/TagsSettings.jsx | Internacionaliza UI do settings de tags. |
| frontend/src/pages/settings/CategoriesSettings.jsx | Internacionaliza UI do settings de categorias. |
| frontend/src/pages/postmortem/PostMortemList.jsx | Internacionaliza UI e mensagens de post-mortems. |
| frontend/src/pages/KBRequests.jsx | Internacionaliza UI e toasts da tela de solicitações de KB. |
| frontend/src/pages/kb/KBVersionHistory.jsx | Internacionaliza UI/alertas do histórico de versões. |
| frontend/src/pages/kb/KBPermissions.jsx | Internacionaliza textos/labels de permissões do KB. |
| frontend/src/pages/kb/KBEdit.jsx | Internacionaliza UI do editor de KB (parcial). |
| frontend/src/pages/kb/KBCreate.jsx | Internacionaliza UI de criação de KB (parcial). |
| frontend/src/pages/Import.jsx | Internacionaliza UI de importação (Markdown/JSON/Confluence/Notion). |
| frontend/src/pages/HelpCenter.jsx | Internacionaliza a central de ajuda e atalhos. |
| frontend/src/pages/gps/GPSSessions.jsx | Internacionaliza UI de sessões GPS; inclui toast HTML. |
| frontend/src/pages/gps/GPSPlayer.jsx | Internacionaliza UI/alertas do player GPS. |
| frontend/src/pages/gps/GPSFlowList.jsx | Internacionaliza UI da lista de fluxos; inclui toast HTML. |
| frontend/src/pages/Gamification.jsx | Internacionaliza a tela de gamificação. |
| frontend/src/pages/AuditLogs.jsx | Internacionaliza logs de auditoria e filtros. |
| frontend/src/pages/Analytics.jsx | Internacionaliza o dashboard de analytics. |
| frontend/src/pages/Admin.jsx | Internacionaliza a página de administração (tabs/avisos). |
| frontend/src/hooks/useRealTimeNotifications.js | Internacionaliza títulos de notificações em tempo real (parcial). |
| frontend/src/components/VoiceRecorderButton.jsx | Internacionaliza tooltips/erros do botão de ditado. |
| frontend/src/components/templates/TemplateSelector.jsx | Internacionaliza seletor/manager/editor de templates. |
| frontend/src/components/tags/TagSelector.jsx | Internacionaliza placeholders e vazios de tags/categorias. |
| frontend/src/components/tags/TagsCategoriesManager.jsx | Internacionaliza gerenciador de tags/categorias. |
| frontend/src/components/RichTextEditor.jsx | Internacionaliza tooltips do editor rico (parcial). |
| frontend/src/components/relations/KBRelations.jsx | Internacionaliza UI de relações de KB (inclui modal). |
| frontend/src/components/related/RelatedKBs.jsx | Internacionaliza UI/labels de KBs relacionados. |
| frontend/src/components/properties/PropertyManager.jsx | Internacionaliza gerenciador de propriedades (parcial). |
| frontend/src/components/properties/CustomPropertyFields.jsx | Internacionaliza select “Selecione…”. |
| frontend/src/components/notifications/NotificationDropdown.jsx | Internacionaliza dropdown de notificações. |
| frontend/src/components/NotificationBell.jsx | Internacionaliza bell de notificações. |
| frontend/src/components/kb/TableOfContents.jsx | Internacionaliza cabeçalho do índice (TOC). |
| frontend/src/components/kb/KBViewStats.jsx | Internacionaliza estatísticas de visualização. |
| frontend/src/components/kb/KBBreadcrumb.jsx | Internacionaliza breadcrumb específico de KB. |
| frontend/src/components/ImageAttachments.jsx | Internacionaliza instruções/tooltips de anexos de imagem. |
| frontend/src/components/export/BatchExportModal.jsx | Internacionaliza modal/export button (parcial). |
| frontend/src/components/comments/KBComments.jsx | Internacionaliza UI/ações de comentários. |
| frontend/src/components/Breadcrumb.jsx | Internacionaliza “Home” no breadcrumb genérico. |
| frontend/src/components/admin/UsersTab.jsx | Internacionaliza aba de usuários do admin. |
| frontend/src/components/admin/KBAccessTab.jsx | Internacionaliza aba de controle de acesso do admin. |
| frontend/src/components/admin/GroupsTab.jsx | Internacionaliza aba de grupos do admin. |
| frontend/src/components/admin/DepartmentsTab.jsx | Internacionaliza aba de departamentos do admin. |
| frontend/src/App.jsx | Internacionaliza texto acessível do spinner em rotas. |
Suppressed comments (1)
frontend/src/components/export/BatchExportModal.jsx:173
- These helper texts are still hardcoded in English. If the goal is to keep the UI fully translated, they should be moved into i18n locale keys and referenced via t().
{format === 'markdown' && 'Best for documentation and editing'}
{format === 'html' && 'Best for viewing and printing'}
{format === 'json' && 'Best for data backup and import'}
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| <div class="toast-body"> | ||
| <i class="bi bi-check-circle me-2"></i> | ||
| Sessão excluída com sucesso! | ||
| {t('gpsSessions.sessaoExcluidaComSucesso')} |
| <div class="toast-body"> | ||
| <i class="bi bi-check-circle me-2"></i> | ||
| Fluxo excluído com sucesso! | ||
| {t('gpsFlowList.fluxoExcluidoComSucesso')} |
| @@ -176,7 +178,7 @@ export default function KBCreate() { | |||
| <Button type="submit" variant="primary" disabled={loading}> | |||
| {loading ? 'Creating...' : 'Create KB'} | |||
| @@ -144,7 +146,7 @@ export default function KBEdit() { | |||
| <Button type="submit" variant="primary" disabled={saving}> | |||
| {saving ? 'Saving...' : 'Save Changes'} | |||
| <div className="alert alert-info"> | ||
| <h5>Nenhuma propriedade customizada criada</h5> | ||
| <h5>{t('propertyManager.nenhumaPropriedadeCustomizadaCriad')}</h5> | ||
| <p className="mb-0">Crie propriedades personalizadas para adicionar campos aos seus registros, como prioridade, categoria, responsável, etc.</p> |
| <strong>Você foi mencionado</strong> | ||
| <strong>{t('useRealTimeNotifications.voceFoiMencionado')}</strong> | ||
| <br /> | ||
| <small>Por {data.by} em {data.context}</small> |
| @@ -208,6 +210,7 @@ function MenuBar({ editor, onImageUpload, onToggleFullscreen, isFullscreen }) { | |||
| } | |||
|
|
|||
| export default function RichTextEditor({ value, onChange, placeholder = 'Digite aqui...', height = '300px' }) { | |||
This was referenced Aug 3, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fecha a internacionalização. 73 arquivos passam a traduzir e nenhum
arquivo do frontend fica com texto fixo em português. São 644 chaves novas;
pt e en ficam com 1551 chaves cada, sem divergência.
Telas: KBRequests, Import, KBPermissions, GPSSessions, PostMortemList,
HelpCenter, TemplateSelector, AuditLogs, Webhooks, Gamification, Analytics,
painel admin (usuários, grupos, departamentos, controle de acesso), settings de
tags e categorias, GPSPlayer, GPSFlowList, histórico de versões, editor de
texto, comentários, relações, propriedades e mais.
Um erro que o script cometeu — e que o build não pegaria
A reescrita foi automatizada, mas o script injetava o hook em uma única
função por arquivo. Onde havia um componente auxiliar definido antes do
principal, os
t()desse auxiliar ficavam fora de escopo:ReferenceErroraorenderizar, com o build verde.
Nove componentes nessa situação:
MenuBar(RichTextEditor),Comment(KBComments),
PropertyModal,ProtectedRouteePublicRoute(App.jsx),ExportButton,AddRelationModal, três exports do TagSelector e dois doTemplateSelector. Todos corrigidos e reconferidos — a varredura final acusa 0
componentes usando
t()sem o hook.Vale registrar: minha primeira tentativa de verificação foi um analisador de
escopo por equilíbrio de chaves, e ele acusou 240 problemas — incluindo telas
já em produção e validadas no navegador. Equilibrar chaves com regex não
funciona (strings, comentários e regex contêm chaves). Troquei por um filtro
preciso — hook declarado depois do primeiro uso, que é o sintoma exato do
bug — e aí a lista caiu para 10 arquivos, revisados um a um.
Outros ajustes
email@example.come
seu@email.comsão iguais em qualquer idiomatcomo parâmetro renomeados (o teste já barrava)kBRequests→kbRequests,gPSPlayer→gpsPlayerA catraca mudou de forma
Antes era uma lista fixa de arquivos traduzidos. Agora é todo arquivo que
chama
useTranslation— o que já foi traduzido não pode regredir, e o queainda não foi entra sozinho quando chegar a vez. Não há mais lista para
esquecer de atualizar.
Verificação
npm test→ 7 testes, 0 falhas (inclui: toda chave citada no código existe —agora 1367 referências)
vite buildok