Traduz arquivos gettext .po
Um arquivo .po é baseado em chaves de texto: a frase em inglês é a chave. Contextos, espaços para plurais e variáveis no estilo Python ficam ao redor desse texto. KAERIS os mantém e escreve os espaços para plurais que a linguagem de destino precisa.
KAERIS traduziu esta página e verificou cada linha traduzindo-a de volta. Um falante nativo ainda não revisou. Original em inglês
Como um arquivo .po é construído
Cada entrada tem um msgid (o texto de origem) e um msgstr (a tradução). msgctxt diferencia duas frases idênticas. Plurais usam msgid_plural e um msgstr[n] por forma, e a linha Plural-Forms do cabeçalho diz quantas formas a linguagem tem.
msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: app/views.py:12
msgid "Welcome back, %(name)s!"
msgstr ""
#: app/views.py:20
msgid "%(count)d file"
msgid_plural "%(count)d files"
msgstr[0] ""
msgstr[1] ""
msgctxt "menu"
msgid "Open"
msgstr ""
msgctxt "verb"
msgid "Open"
msgstr ""
O que observar nas traduções de .po
O contexto muda a palavra
“Abrir” como item de menu e “Abrir” como verbo traduzem de forma diferente. KAERIS lê o contexto junto com o texto e o sinaliza quando a mesma palavra de origem retorna traduzida de duas maneiras. Na execução real abaixo, ambas retornaram como “Öffnen”, o que está correto em alemão, e os contextos permaneceram no arquivo.
Espaços para plurais diferem por idioma
O inglês tem dois, o russo três, o árabe seis. Em uma execução em russo, o cabeçalho se torna
nplurals=3e cada entrada plural recebe três espaçosmsgstr.Variáveis nos estilos Python e C
%(name)s,%d,{name}devem retornar inalterados, ou o aplicativo gerará um erro em tempo de execução.O cabeçalho e as referências
O cabeçalho é reconstruído com a regra de idioma e plural. Comentários de referência de origem (
#:) não são transportados para o arquivo traduzido.
Uma execução real: traduzido para Alemão e verificado
Uma execução real, 27 de outubro de 2026, nada editado manualmente: kaeris translate en.po --langs de com kaeris 0.2.35, 3,9 segundos, modelo google/gemini-2.5-flash-lite, o padrão do nível gratuito. Abaixo, o arquivo alemão que ele escreveu e o que kaeris check diz sobre ele.
# Generated by KAERIS i18n Tool # Language: de msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "Language: de\n" msgid "Welcome back, %(name)s!" msgstr "Willkommen zurück, %(name)s!" msgid "%(count)d file" msgid_plural "%(count)d files" msgstr[0] "%(count)d Datei" msgstr[1] "%(count)d Dateien" msgctxt "menu" msgid "Open" msgstr "Öffnen" msgctxt "verb" msgid "Open" msgstr "Öffnen"
$ kaeris check --source en.po --langs de ✓ de: complete & placeholder-safe ✓ all locales complete & placeholder-safe
O que o KAERIS faz com isso
Entradas e contextos mantidos
Chaves de texto,
msgctxte pares de plurais retornam na mesma ordem.Espaços para plurais do idioma de destino
O número de espaços
msgstr[n]segue o idioma, verificado em uma execução com russo.Verificação gratuita para este formato
A verificação gratuita em /check lê este formato e executa sem chave ou conta. O comando de terminal
kaeris checktambém o lê: ele aceita todos os 13 formatos desde kaeris 0.2.35, com as mesmas regras e nada enviado para lugar nenhum.
Execute em três etapas
Instale o CLI
Execute
pip install kaeris.Traduzir o catálogo
Execute
kaeris translate django.po --langs de,ja. Os arquivos de saída são nomeados por idioma.Verificar o resultado
Faça o upload da origem e de um .po traduzido na página de verificação gratuita para ver variáveis perdidas e termos inconsistentes.
pip install kaeris kaeris translate locale/en/LC_MESSAGES/django.po --langs de,ja --verify
Perguntas
Ele lida com formas plurais para russo ou árabe?
O cabeçalho de plural e o número de espaços msgstr[n] são escritos para o idioma de destino. Em uma execução com russo, o exemplo de origem produziu nplurals=3 e três espaços.
E quanto ao msgctxt?
O contexto permanece anexado à entrada, então duas origens idênticas com contextos diferentes são strings separadas. A verificação avisa quando elas retornam traduzidas de forma diferente.
É gratuito?
Sim, sem conta: 10.000 caracteres por arquivo e até 8 idiomas por execução. Uma chave API gratuita eleva o limite para 50.000 caracteres. A licença vitalícia custa $79 uma vez, usando sua própria chave OpenRouter; planos mensais começam em $19. Preços
Posso rodar pelo terminal ou em CI?
Sim. pip install kaeris, depois kaeris translate django.po --langs de,ja. Veja também Django. O GitHub Action executa a mesma tradução em um pull request. Docs da CLI · GitHub Action
Continue
Referência do CLI · Referência de verificação · Traduzir no navegador · Verificação gratuita · Converter formatos · Pseudo-localização
Outros formatos: JSON · YAML · ARB · XLIFF · .strings · .xcstrings · .properties · .resx · CSV · Markdown · Fluent · Android XML