Verifique traduções com pre-commit
Com pre-commit, um commit que altera um arquivo de localidade executa kaeris check primeiro e é recusado quando uma tradução perdeu um placeholder ou uma chave. É offline e gratuito: sem chave de API, sem conta.
KAERIS traduziu esta página e verificou cada linha traduzindo-a de volta. Um falante nativo ainda não revisou. Original em inglês
A receita
O hook
Salve como .pre-commit-config.yaml na raiz do projeto. É um hook local: pre-commit constrói seu próprio ambiente e instala kaeris do PyPI nele, então nada mais precisa ser instalado. files limita a commits que adicionam algo em locales/ ao stage.
repos:
- repo: local
hooks:
- id: kaeris-check
name: kaeris check (translations)
entry: kaeris check --source locales/en.json --langs de,fr --ci
language: python
additional_dependencies: ["kaeris==0.2.35"]
files: ^locales/
pass_filenames: false
O que ele imprime, em execuções reais
Saída do kaeris 0.2.35, capturada em 27 de outubro de 2026. A última linha de cada caixa é o código de saída que o job CI vê.
O que um commit imprime
À esquerda: um commit com arquivos corretos. À direita: um commit com de.json que tem {nam} em vez de {name} e a chave checkout ausente; o commit é recusado.
$ git commit -m "add locales" kaeris check (translations)..............................................Passed [main (root-commit) 96c8a87] add locales 4 files changed, 25 insertions(+) create mode 100644 .pre-commit-config.yaml create mode 100644 locales/de.json create mode 100644 locales/en.json create mode 100644 locales/fr.json exit code: 0
$ git commit -m "break de"
kaeris check (translations)..............................................Failed
- hook id: kaeris-check
- exit code: 1
✗ de: 1 missing key(s): checkout
✗ de: 1 placeholder mismatch(es):
greeting: missing ['{name}'], added ['{nam}']
✗ de: 2 translation fault(s):
greeting: lost placeholder {name}
greeting: invented placeholder {nam} (not in source)
✓ fr: complete & placeholder-safe
✗ 1 missing key, 1 placeholder mismatch, 2 translation faults
exit code: 1
Um commit que não altera arquivo de localidade
O hook é ignorado, então commits não relacionados continuam rápidos.
$ git commit -m "readme" # nothing under locales/ is staged kaeris check (translations)..........................(no files to check)Skipped [main e82b41d] readme 1 file changed, 1 insertion(+) create mode 100644 README.md exit code: 0
Configure em três passos
Adicione o hook
Salve a configuração acima como
.pre-commit-config.yamle defina seu próprio--sourcee--langs. Mantenha a versão fixa e atualize-a quando fizer upgrade.Instale o git hook
Execute
pip install pre-commite depoispre-commit installuma vez por clone.Faça commits normalmente
Um commit que adiciona um arquivo dentro de
locales/executa a verificação e é recusado se falhar.pre-commit run --all-filesexecuta a mesma verificação sob demanda, por exemplo, em CI.
Como verificamos isso
Todos os comandos desta página foram executados antes de serem escritos aqui. O que não foi executado também está listado.
O que foi executado
pre-commit 4.7.0 com exatamente a configuração acima em um repositório git novo:
pre-commit install, depois execuções reais degit commit. O ambiente do hook foi construído a partir do PyPI (kaeris 0.2.35). Arquivos bons: o commit foi aceito.de.jsoncom erro: o hook falhou com código de saída 1 e o git recusou o commit. Commit sem arquivo de localidade: ignorado.O que não foi executado
Um job de CI que chama
pre-commit run --all-filesnão foi executado em um runner. Não há repositório de hook publicado para kaeris, então a receita usa um hook local; não há linharepo: https://github.com/…para adicionar.
Opções que vale a pena conhecer
Falhar também em chaves obsoletas
--stricttambém falha quando uma tradução tem chaves que a fonte não possui mais.Mantenha nomes de marcas como estão
--glossary 'KAERIS,GitHub'falha se um termo for removido no destino. A mesma lista pode ficar emkeepnokaeris.json.Layout de arquivo diferente
--outé a pasta com as traduções e--pattern '{lang}/common.json'seus nomes de arquivo. Padrão: o layout quekaeris translategera.Sem flags
Com um
kaeris.jsonno projeto (kaeris initcria um),kaeris checkusa a fonte, idiomas e pasta definidos nele.
Perguntas
Precisa de chave API ou conta?
Não. kaeris check é descrito em sua ajuda como estático, local e sem API, então o job não precisa de segredo. Traduzir é um comando separado que precisa de chave.
O que a verificação detecta?
Um placeholder perdido ou inventado ({name}, %s, {{x}}, plurais ICU), uma chave ausente e um arquivo de localidade que não existe. A comparação é local e estática. O que é verificado, com todas as flags
Isso deixa cada commit mais lento?
Apenas commits que adicionam um arquivo que corresponde a files. A primeira execução constrói o ambiente do hook, que precisa de rede; execuções posteriores reutilizam esse ambiente. Não medimos o tempo, então não há número aqui.
Continue
Outras receitas: GitHub Actions · GitLab CI · Make e scripts npm
Referência CLI · Referência Check · Referência GitHub Action · Check gratuito no navegador · Traduzir no navegador