Skip to content

feat(i18n): traduzir as 43 telas restantes — i18n completa - #37

Merged
janeiaraujo merged 2 commits into
mainfrom
feat/i18n-telas-secundarias
Aug 3, 2026
Merged

feat(i18n): traduzir as 43 telas restantes — i18n completa#37
janeiaraujo merged 2 commits into
mainfrom
feat/i18n-telas-secundarias

Conversation

@janeiaraujo

Copy link
Copy Markdown
Owner

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: ReferenceError ao
renderizar, com o build verde.

Nove componentes nessa situação: MenuBar (RichTextEditor), Comment
(KBComments), PropertyModal, ProtectedRoute e PublicRoute (App.jsx),
ExportButton, AddRelationModal, três exports do TagSelector e dois do
TemplateSelector. 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

  • Revertidos dois casos que o extrator pegou indevidamente: email@example.com
    e seu@email.com são iguais em qualquer idioma
  • Quatro callbacks usando t como parâmetro renomeados (o teste já barrava)
  • Nomes de seção normalizados: kBRequestskbRequests, gPSPlayergpsPlayer

A 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 que
ainda 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 build ok
  • login no navegador: nenhuma chave crua na tela, nenhum erro no console
  • varredura final: 73 arquivos traduzem, 0 com texto fixo restante

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.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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' }) {
@janeiaraujo
janeiaraujo merged commit 89a79aa into main Aug 3, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants