Validador Sintaxe ICU MessageFormat
Analise mensagens ICU MessageFormat detectando placeholders mal formados, plurais sem caso other, ramos select faltando e tipos inválidos.
Entendendo o ICU MessageFormat
O ICU MessageFormat é a sintaxe de mensagens usada para internacionalização (i18n) por ferramentas como FormatJS / react-intl, MessageFormat.js e as bibliotecas ICU4J / ICU4C. Ele permite que uma única string localizada se adapte a valores em tempo de execução — contagens, gêneros, moedas, datas — sem fixar a gramática de cada idioma. Validar uma mensagem significa checar se as chaves estão balanceadas e se cada argumento usa um tipo conhecido com subsintaxe válida.
Placeholders e tipos de argumento
O placeholder mais simples é apenas um nome entre chaves: Olá, {name}!. Argumentos tipados adicionam um tipo e opções:
- plural:
{count, plural, one {# item} other {# itens}} - select:
{g, select, male {ele} female {ela} other {elu}} - number:
{n, number, ::currency/BRL} - date / time:
{d, date, short} - Outros tipos incluem selectordinal e o obsoleto choice.
Dentro de um bloco plural, o símbolo # é substituído pela contagem formatada. Sempre forneça um ramo other — ele é o fallback obrigatório.
Escapando literais
Como as chaves e o # são especiais, você escapa caracteres literais com apóstrofos. Uma aspa simples inicia e encerra uma seção literal, e '' produz um apóstrofo literal. Assim, '{nao e um placeholder}' renderiza as chaves ao pé da letra.
Pegadinhas comuns
- Chaves desbalanceadas — um
{de abertura sem o}correspondente. - Omitir o ramo obrigatório
otherem umpluralouselect. - Usar um tipo de argumento desconhecido (ex.:
fooem vez deplural/select/number). - Esquecer que o
#só funciona dentro de umplural/selectordinal, não em outros lugares. - Colocar um apóstrofo literal sem duplicá-lo, o que inicia um escape silenciosamente.
FAQ
Qual a diferença entre plural e select? O plural casa com as categorias plurais do CLDR (one, other, etc.) para um número, enquanto o select casa com chaves de texto arbitrárias que você define, como um valor de gênero.
Por que devo sempre incluir other? É o fallback garantido quando nenhum outro caso casa, e os idiomas variam muito nas regras de plural, então o parser exige esse ramo.
Posso usar choice tranquilamente? Não — o tipo de argumento choice está obsoleto. Use plural ou select no lugar.
Ferramentas Relacionadas
Validador de CPF
Valide CPFs instantaneamente pelo algoritmo oficial da Receita Federal, sem enviar dados para nenhum servidor. Gratuito e sem cadastro.
Validador de CPF em Lote
Valida uma lista de CPFs (um por linha) e mostra quais são válidos e quais são inválidos. Sem envio para servidores.
Validador de CNPJ em Lote
Valida uma lista de CNPJs (um por linha) e mostra resumo: válidos, inválidos e total. Sem envio para servidores.