Verifique traduções no GitLab CI
O job instala o pacote kaeris e roda kaeris check em merge requests que alteram seus arquivos de localidade. Placeholder perdido ou chave faltando falha o pipeline. É offline e gratuito: sem chave 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 job
Adicione em .gitlab-ci.yml. Altere --source para seu arquivo da língua base e --langs para os locais que você distribui. O bloco rules roda o job só em merge requests que mudam algo em locales/; remova as linhas changes para rodar em todo merge request.
i18n-check:
stage: test
image: python:3.12-slim
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
changes:
- locales/**/*
script:
- pip install kaeris
- kaeris check --source locales/en.json --langs de,fr --ci
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 o job imprime
As duas linhas script, executadas em ordem. À esquerda: arquivos que estão corretos. À direita: de.json com {nam} em vez de {name} e a chave checkout faltando; o job para com código de saída 1.
$ pip install kaeris Collecting kaeris Using cached kaeris-0.2.35-py3-none-any.whl.metadata (26 kB) Using cached kaeris-0.2.35-py3-none-any.whl (131 kB) Installing collected packages: kaeris Successfully installed kaeris-0.2.35 $ kaeris check --source locales/en.json --langs de,fr --ci ✓ de: complete & placeholder-safe ✓ fr: complete & placeholder-safe ✓ all locales complete & placeholder-safe Job succeeded exit code: 0
$ pip install kaeris
Requirement already satisfied: kaeris in C:\Users\Inzagi\AppData\Local\Temp\claude\C--Users-Inzagi-projects-kaeris\bfeebe69-3cfd-4f28-bbe7-e5600be082b9\scratchpad\venv-gl2\Lib\site-packages (0.2.35)
$ kaeris check --source locales/en.json --langs de,fr --ci
✗ 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
ERROR: Job failed: exit code 1
exit code: 1
Configure em três passos
Adicione o job
Cole o job no
.gitlab-ci.ymle defina seu próprio--sourcee--langs.Abra um merge request
Altere um arquivo de localidade em um branch e abra um merge request. O job é executado e mostra todas as ocorrências no seu log.
Exija o pipeline
Nas configurações do projeto, em merge requests, ative que os pipelines devem ser bem-sucedidos. Um job vermelho então bloqueia o merge.
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
Ambas as linhas
script, extraídas do YAML analisado e executadas uma após a outra em um ambiente virtual Python limpo, parando na primeira linha que falhar, como um job do GitLab faz.pip install kaerisbaixou o kaeris 0.2.35 do PyPI. Arquivos limpos: código de saída 0. Ode.jsoncom erro: código de saída 1.O que não foi executado
Nenhum runner do GitLab e nenhuma imagem Docker foram usados (o log acima vem de um PC Windows com Python 3.14, não do
python:3.12-slim). O blocorulesechangesfoi apenas analisado como YAML; o GitLab não o avaliou. O pacote declara Python 3.8 ou superior.
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
Posso salvar o resultado em um arquivo?
Sim: --json imprime o resultado em JSON e --sarif PATH grava um relatório SARIF. Adicione o arquivo em artifacts se quiser mantê-lo. Ambas as flags estão na ajuda do kaeris check; não executamos upload de artifact no GitLab.
Continue
Outras receitas: GitHub Actions · pre-commit · Make e scripts npm
Referência CLI · Referência Check · Referência GitHub Action · Check gratuito no navegador · Traduzir no navegador