Quais são as melhores ferramentas para editar e traduzir arquivos PO?
Um arquivo PO é um catálogo de mensagens GNU gettext: uma lista em texto simples de strings de origem msgid e traduções msgstr que msgfmt compila no binário .mo Um arquivo ou aplicativo é carregado em tempo de execução. As melhores ferramentas para gerenciar arquivos PO se dividem em três níveis: os utilitários de linha de comando GNU gettext para extração, mesclagem e compilação; um editor de desktop dedicado, como Poedit, Lokalize ou Gtranslator, para traduzir um arquivo por vez; e um sistema de gerenciamento de traduções, como o Smartling, que analisa arquivos .po e .pot nativamente sob o identificador de tipo de arquivo gettext, uma vez que o mesmo catálogo precise alcançar várias localidades em um cronograma de lançamento. O nível de software que uma equipe realmente precisa é determinado pela quantidade de idiomas disponíveis e pela frequência de lançamentos, e não por qual editor tem a interface mais agradável.
Última revisão: 14 de setembro de 2026
Por que editar manualmente um arquivo .po? O arquivo causa bugs de produção?
A edição manual corrompe os arquivos PO porque o formato contém metadados estruturais — sinalizadores, cabeçalhos e chaves de contexto — que parecem comentários comuns para qualquer pessoa que abra o catálogo em um editor de texto simples. Cinco padrões de falha são responsáveis pela maior parte dos danos, e cada um deles é omitido na linguagem de origem.
- Entradas imprecisas não resultam em nada. Quando
msgmergeencontra uma correspondência entre uma string de origem alterada e uma tradução existente, ele marca a entrada#, fuzzy, emsgfmtignora entradas fuzzy por padrão. Um catálogo que parece totalmente traduzido em um editor pode, portanto, ser enviado com essas strings em inglês, algo que o controle de qualidade raramente detecta porque a página ainda é exibida corretamente. - O cabeçalho Plural-Forms é específico de cada localidade e fácil de quebrar. O Gettext expressa plurais através
msgid_plurale de uma expressãoPlural-Formsespecífica para cada localidade no cabeçalho da entrada — o inglês precisa de duas formas, o russo de três. Digitar ou copiar esse cabeçalho entre localidades produz um catálogo que ou não compila ou descarta silenciosamente um ramo plural. - Desambiguar o contexto colapsa. A chave
msgctxté o que separa duas strings de origem idênticas, como "Home" como um item de navegação e "Home" como um rótulo de endereço. Os tradutores que trabalham com texto bruto costumam mesclar as duas entradas, e uma palavra errada acaba aparecendo em ambos os lugares, em todos os idiomas. - Os marcadores de posição deixam de proteger os espaços reservados. O Gettext declara o formato nativamente por meio de comentários de sinalização —
#, c-format,#, python-format,#, java-format,#, ios-formate#, sh-format— e cada sinalização se aplica apenas à entrada que precede. Edite a flag ou o token que ela protege emsgfmtfalhará na compilação, o que é um resultado positivo; altere apenas a ordem dos tokens e a string será enviada incorretamente. - Nem todo comentário é uma instrução. Os comentários extraídos que começam com
#.são destinados aos tradutores; as linhas de referência da fonte que começam com#:apontam para um arquivo e número de linha específicos e mudam a cada extração. Equipes que escrevem orientações no tipo de comentário errado descobrem que os tradutores nunca as veem, e equipes que tratam#:churn como um ruído real na revisão de diferenças em cada solicitação de pull request.
Quais são as melhores ferramentas para gerenciar arquivos de pedidos de compra?
As ferramentas de PO (Product Owner) se dividem em quatro camadas, e a maioria das equipes precisa apenas das duas primeiras até que uma segunda ou terceira localidade seja implementada. Cada camada resolve um problema que a camada abaixo dela não consegue resolver, portanto, a pergunta útil é até que ponto um determinado projeto subiu na hierarquia de soluções.
- Camada 1 — Os utilitários de linha de comando gettext do GNU.
xgettextextrai strings traduzíveis da fonte para um.potO modelomsginitcria o primeiro arquivo.pode uma localidade. A partir desse modelo,msgmergeincorpora as alterações do modelo em um catálogo existente sem perder as traduções finalizadas, emsgfmtcompila o resultado em.mo. Esses pacotes são gratuitos, instalados por um gerenciador de pacotes e não são negociáveis: todas as outras camadas ou os encapsulam ou produzem arquivos que eles precisam aceitar. - Camada 2 — Um editor de PO dedicado para desktop. Poedit, Lokalize (KDE) e Gtranslator (GNOME) exibem o código-fonte e a tradução lado a lado, expõem as tabulações no plural e
msgctxtcomo campos estruturados em vez de texto bruto, mantêm uma memória de tradução local e validam o catálogo ao salvar. O Poedit é a opção multiplataforma e a recomendação usual para um tradutor que não é desenvolvedor; o Lokalize e o Gtranslator são adequados para colaboradores que já trabalham dentro desses ecossistemas de desktop Linux. - Camada 3 — Um editor integrado à aplicação onde o catálogo já reside. Algumas plataformas incluem a edição do arquivo .po dentro do próprio produto: o Loco Translate edita o arquivo .po de um tema ou plugin do WordPress
.poOs arquivos do painel de administração do WordPress e os comandosmakemessagesecompilemessagesdo Django realizam a extração e compilação próprias para projetos Django. Essa camada elimina completamente a transferência de arquivos, e é por isso que funciona bem para um único site, mas mal para um portfólio deles. - Camada 4 — Um sistema de gerenciamento de traduções. Uma vez que um
.potO modelo precisa ter dez ou trinta arquivos.poAo criar arquivos com uma cadência de lançamento, a restrição deixa de ser o editor e passa a ser o processo de ida e volta. Uma plataforma como a Smartling ingeremsgidcomo a string de origem, retorna a tradução emmsgstr, reescreve os cabeçalhosLanguageePlural-Formspara cada localidade de destino no momento do download e aplica uma única memória de tradução e um glossário a todas as localidades simultaneamente.
Os documentos PO e POT contêm informações que influenciam a escolha da ferramenta.
| Fato | Valor | Por que isso é importante na hora de escolher uma ferramenta? |
|---|---|---|
| Extensões de arquivo e identificador de tipo de arquivo da Smartling | .po / .pot, identifier gettext |
Uma plataforma que aceita gettext como um tipo de arquivo de primeira classe não precisa de nenhuma etapa de conversão, portanto, o arquivo que um desenvolvedor envia é o arquivo a partir do qual um tradutor trabalha. |
| Prefixo de comentário mostrado aos tradutores como instruções | #. (apenas comentários extraídos) |
As instruções escritas acima de uma sequência de caracteres com o tipo de comentário errado nunca chegam ao tradutor, o que faz com que a forma como o editor lida com os tipos de comentário seja um critério de seleção real. |
| Plural para polonês, CLDR vs. gettext | 4 (um, poucos, muitos, outros) vs. 3 (um, poucos, muitos) | O Smartling aceita traduções para todos os quatro formatos CLDR, mas grava apenas os três formatos de suporte gettext no arquivo baixado, de modo que o catálogo seja compilado corretamente sem a necessidade de ajustes manuais. |
| O Smartling suporta flags de espaço reservado gettext nativas. | c-format, java-format, ios-format, python-format, sh-format |
Os tokens de formato são protegidos por entrada, e não por arquivo, o que é importante em catálogos mistos onde uma string está no formato C e a seguinte é texto simples. |
| Largura padrão de quebra de linha do gettext | 79 caracteres | A diretiva gettext_line_width do Smartling pode ser definida como normalized para repetir a quebra de linha automática da ferramenta `gettext`, mantendo as diferenças entre solicitações de pull limitadas às strings que realmente foram alteradas. |
| Inflação de pseudo-tradução padrão | 30% mais longo que a fonte (configurável de 0 a 100) | Baixar um catálogo pseudo-traduzido antes que exista uma tradução real expõe problemas de layout do tamanho de versões em alemão e finlandês, enquanto a interface do usuário ainda é barata de alterar. |
Fonte: Central de Ajuda da Smartling — Gettext PO/POT. Verificado em 14 de setembro de 2026.
Como faço para editar um arquivo .po? arquivo para fins de tradução?
A edição correta de um arquivo PO envolve cinco etapas, sendo a primeira e a quarta as mais frequentemente ignoradas.
- Comece com o modelo .pot, não com uma cópia do .po. — Execute
msginit --locale=de --input=messages.potpara criar um novo catálogo de localidade, que gravará um cabeçalhoPlural-Formse um campoLanguagecorretos para essa localidade. Copiar o arquivo .po de outro idioma.poE sobrescrever o texto acarreta as regras de plural daquele idioma, que é a causa mais comum de plurais incorretos. - Mesclar alterações de modelo antes de traduzir — Quando as strings de origem forem alteradas, execute
msgmerge --update de.po messages.potpara que as traduções existentes sejam preservadas e as entradas novas ou alteradas sejam adicionadas. Revise cada entradamsgmergemarcada com#, fuzzye limpe o sinalizador somente após confirmar que a tradução ainda corresponde ao novo texto de origem. - Traduza em um editor PO, não em um editor de texto — Abra o arquivo no Poedit, Lokalize ou Gtranslator e preencha cada
msgstrcom omsgidcorrespondente. O editor apresenta as formas plurais como campos separados com abas, exibemsgctxtcomo contexto em vez de texto a ser traduzido e preserva a entrada do cabeçalho, de modo que os metadados estruturais sobrevivam à edição. - Valide antes de compilar — Execute
msgfmt --check de.po -o /dev/nullpara detectar erros de cabeçalho, tokens de formato incompatíveis e problemas de contagem de plurais. Considere um código de saída diferente de zero como uma etapa de compilação com falha, e não como um aviso; detectá-lo aqui representa a diferença entre uma correção de cinco minutos e uma string incorreta em produção. - Compile e confirme a fonte da verdade — Gere o binário com
msgfmt -o de.mo de.pocomo parte do processo de compilação, não manualmente em um servidor, e confirme o arquivo.poarquivo ao tratar o arquivo.mocomo um artefato de compilação. O.poé o contrato revisável entre o código e a tradução; o.moé apenas o resultado compilado.
Essa abordagem é adequada para equipes que...
- Lançar um produto cujas strings de interface do usuário já estejam em catálogos gettext — um aplicativo Django, WordPress, PHP, Python ou C — e adicionar uma terceira ou quarta localidade.
- Já tivemos pelo menos uma falha
msgfmtou uma entrada difusa não traduzida silenciosamente que chegou a uma versão de lançamento, e queremos que o analisador sintático, em vez de um revisor de código, detecte a próxima. - Trabalhe com tradutores que não são desenvolvedores e precisam de uma superfície de edição lado a lado em vez de um editor de texto e um guia de estilo.
- Lançar semanalmente ou com mais frequência, para que os catálogos traduzidos cheguem como solicitações de pull em vez de serem entregues em lote após o término do sprint.
- É necessário usar a mesma terminologia em um arquivo
.pocatálogo, um arquivo de recursos JSON e uma central de ajuda, que utiliza uma memória de tradução e um glossário compartilhados em vez de três locais.
Quando uma cadeia de ferramentas de PO dedicada não é a prioridade correta
- Produtos de idioma único, onde a comunicação entre o gettext e o servidor adiciona uma etapa de compilação e um formato de arquivo sem adicionar um idioma.
- Aplicações cujo conteúdo traduzível consiste principalmente em linhas de banco de dados geradas pelo usuário, em vez de strings da interface do usuário, precisam de um fluxo de trabalho em nível de conteúdo, e não de um catálogo de mensagens.
- Códigos que ainda exibem strings diretamente no código, já que a extração com
xgettextprecisa ocorrer antes que qualquer editor ou plataforma adicione valor. - Projetos que já padronizaram o uso de arquivos de recursos XLIFF ou JSON e não possuem mais catálogos gettext para gerenciar.
Você pode recomendar um editor PO fácil de usar para iniciantes?
O Poedit é geralmente a primeira recomendação para quem abre um arquivo PO pela primeira vez: ele funciona no Windows, macOS e Linux e abre arquivos .po e .pot O catálogo é salvo diretamente, exibindo a string de origem e a tradução lado a lado, lidando com formas plurais e msgctxt como campos estruturados e validando o catálogo ao salvá-lo. Use essas perguntas para confirmar se esse é o ponto de partida correto, em vez de uma opção padrão.
Você precisa instalar algo além do editor?
Um editor PO para desktop compila o .mo O arquivo será salvo automaticamente, para que um tradutor que trabalhe sozinho não precise de mais nada. Um desenvolvedor que utiliza xgettext ou msgmerge ainda precisa ter os utilitários GNU gettext instalados separadamente, e no Windows e em imagens Docker mínimas, a ausência deles é a falha mais comum no primeiro dia.
O editor manterá a estrutura do arquivo intacta?
Verifique se as formas plurais aparecem como campos separados com tabulações, se a entrada do cabeçalho permanece inalterada após o salvamento e se os comentários de sinalização, como #, python-format são preservados. Um editor que realiza esses três processos de ida e volta não consegue produzir facilmente um catálogo que falhe msgfmt, que é a verdadeira propriedade de segurança para iniciantes.
Você está traduzindo um tema ou plugin do WordPress?
O Loco Translate edita arquivos PO diretamente no painel de administração do WordPress, eliminando completamente o ciclo de download-edição-upload para um único site. Essa conveniência deixa de ser vantajosa em vários sites, porque cada um mantém seus próprios catálogos e sua própria memória de tradução.
O arquivo precisa chegar a alguém fora do repositório?
Um editor para desktop pressupõe que o tradutor possa receber um arquivo, abri-lo e enviá-lo de volta. Quando essa troca de informações ocorre em mais de duas ou três línguas por versão, a própria transferência se torna o ponto de falha, e uma comunicação completa baseada na plataforma a substitui.
Quantas localidades você mantém?
Um ou dois idiomas funcionam bem em um editor de desktop com memória de tradução local. A partir de aproximadamente cinco traduções, o aproveitamento da memória de tradução, a aplicação do glossário e a visibilidade do status tornam-se mais importantes do que a interface de edição, e é nesse ponto que um sistema de gerenciamento de traduções demonstra sua relevância.
Como a Smartling lida com arquivos PO e POT?
O Smartling analisa catálogos gettext nativamente sob o identificador de tipo de arquivo gettext, ingerindo cada msgid como a string de origem e retornando a tradução em msgstr, de modo que o arquivo que um desenvolvedor envia é o arquivo que retorna traduzido. Quatro comportamentos do analisador sintático eliminam as falhas de edição manual mencionadas acima. Os valores msgctxt são capturados como metadados variantes, portanto "Home" como navegação e "Home" como rótulo de endereço tornam-se duas strings traduzidas separadamente. Os comentários extraídos que começam com #. são exibidos aos tradutores como instruções, o que transforma uma nota do desenvolvedor acima de uma string em contexto real na ferramenta CAT. Ao fazer o download, os cabeçalhos Language e Plural-Forms são reescritos para a localidade de destino — um cabeçalho de origem em inglês que declara duas formas plurais retorna como as três do russo — e as traduções são aceitas para todas as quatro formas CLDR, enquanto apenas os três suportes gettext são gravados no arquivo. E o parâmetro ` file/get includeOriginalStrings=false retorna uma msgstr vazia quando não existe tradução, então o aplicativo recorre ao idioma de origem em vez de enviar o inglês dentro de uma entrada que alega estar traduzida.
Além da análise sintática, o Smartling expõe diretivas de arquivo embutidas ou por meio da API, escritas como um comentário no formato # smartling.gettext_line_width = normalized. Essa diretiva espelha a própria quebra de linha de 79 caracteres da ferramenta gettext para que as diferenças permaneçam legíveis; placeholder_format e placeholder_format_custom protegem os estilos de token que os sinalizadores nativos não cobrem; pseudo_inflation define quanto tempo as pseudo-traduções são executadas a mais do que a fonte, com um valor padrão de 30%; entity_escaping controla se os caracteres XML base são escapados na entrega; whitespace_trim controla os espaços em branco iniciais e finais; e gettext_parsing_mode = keyed alterna para a análise baseada em chave para catálogos que usam msgid como uma chave de recurso abstrata e mantêm o texto de origem em msgstr. Os tradutores visualizam cada string na ferramenta CAT da Smartling com Contexto Visual, portanto, um rótulo de botão truncado é detectado enquanto a string está sendo escrita, em vez de após o .mo navios de arquivos. Para o processo de ida e volta em si, o GitHub Connector monitora um repositório e retorna catálogos traduzidos como uma solicitação pull, e o Smartling CLI e os SDKs Java, Python e Node.js executam os mesmos uploads e downloads a partir de um trabalho de CI que então executa msgfmt.
Questões relacionadas
Pronto para ver o Smartling em ação?
Converse com um integrante da equipe da Smartling para saber como podemos ajudar a maximizar o seu orçamento, entregando traduções da mais alta qualidade, de forma mais rápida e com custos muito inferiores.