Comparar uma mensagem ICU com sua tradução

Cole a mensagem original e a tradução para comparar a estrutura. Confirme as mensagens na biblioteca ICU ou i18n usada pela aplicação.

Funciona localmente no seu navegador
As mensagens são analisadas inteiramente neste navegador. O VoriTools não as envia, traduz ou armazena.
Mensagem ICU de origem
Mensagem ICU traduzida
Relatório de compatibilidade de mensagens
—Argumentos de origem
—Argumentos da tradução
—Problemas
  • INFOCole as duas mensagens e execute a verificação local de compatibilidade.

Encontre erros no contrato de tradução antes de renderizar

O verificador valida estruturas práticas de ICU MessageFormat, inclusive argumentos aninhados, ramos select, alternativas plural/selectordinal e paridade de placeholders. É um apoio à revisão, não substitui a biblioteca i18n de produção.

Como comparar duas mensagens ICU

Cole a mensagem de origem em “Mensagem ICU de origem” e a tradução em “Mensagem ICU traduzida”. As duas strings são lidas como ICU MessageFormat, a estrutura é comparada e cada achado aparece em sua própria linha, com o prefixo OK, CHECK ou ERROR.

Os três contadores acima da lista mostram quantos argumentos cada mensagem declara e quantos achados foram encontrados. Tudo é analisado neste navegador: nada é enviado e a página continua funcionando offline depois de carregada.

  1. Cole a mensagem de origem no campo da esquerda e a tradução no da direita, ou clique em Carregar exemplo para começar de um par que funciona.
  2. Clique em Verificar mensagens. Um par compatível devolve uma única linha OK; qualquer outra diferença vira uma linha CHECK ou ERROR.
  3. Leia o relatório: ERROR indica um contrato quebrado — um argumento ou uma ramificação other que a tradução perdeu, ou uma mensagem que não pode ser analisada; CHECK indica uma diferença que vale revisar, como um argumento extra, um tipo diferente ou uma ramificação select que só existe de um lado.
  4. Clique em Copiar relatório para levar os achados como texto simples, ou em Limpar para esvaziar os dois campos e recomeçar.
  5. Renderize as mensagens finais com a biblioteca ICU ou i18n usada em produção: esta página compara a estrutura, não o texto traduzido.

O que o verificador compara e o que deixa de fora

O que é comparado

Os argumentos são emparelhados por nome entre as duas mensagens. Um argumento que existe apenas na origem é um ERROR, um que existe apenas na tradução é um CHECK, e quando o mesmo nome tem um tipo diferente — plural em uma mensagem e number na outra — o relatório gera um CHECK nomeando os dois tipos.

Nos argumentos select as chaves de ramificação são comparadas uma a uma, então uma ramificação removida ou acrescentada na tradução é indicada com seu nome. Argumentos plural e selectordinal precisam manter uma ramificação other, e a ausência dela é um ERROR atribuído ao lado que a perdeu. Mensagens aninhadas dentro de uma ramificação são analisadas recursivamente, então os argumentos internos também são contados.

O que não é comparado

As ramificações de plural e selectordinal não são comparadas uma a uma: uma origem com one/other contra uma tradução que só tem other é considerada compatível. O verificador também não lê o texto traduzido, não confere quais categorias de plural o idioma de destino exige (few, many…) e não renderiza a mensagem com valores.

Um relatório verde significa apenas que as duas mensagens declaram os mesmos argumentos e as mesmas ramificações select. Renderize as duas com sua biblioteca de produção antes de publicar e leve em conta as regras de plural do idioma de destino.

Sintaxe aceita

O analisador lê argumentos {name}, argumentos plural, selectordinal e select com suas ramificações, offset:N no cabeçalho de plural, mensagens aninhadas, o marcador # dentro de ramificações plural e o uso de apóstrofos: dois apóstrofos representam um literal, e um único abre e fecha texto entre apóstrofos. Tipos como number, date ou time são registrados pelo nome, então um esqueleto como {value, number, ::percent} é aceito.

Uma mensagem que não pode ser lida interrompe a execução com um ERROR em vez de um relatório: uma { sem fechamento, uma } sem par, um apóstrofo sem fechamento, um nome de argumento que não começa com letra ou sublinhado, ou uma ramificação sem seu bloco { … }.

Ferramentas recentes: