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 Cor CSS Nomeada
Valida se uma string é uma cor CSS nomeada padrão (red, rebeccapurple, …) e mostra o hex equivalente.
Validador de Base32
Verifica se uma string é Base32 válida (RFC 4648). Aceita padding =. Mostra tamanho do payload em bytes.
Validador de Base58
Valida se uma string contém apenas caracteres do alfabeto Base58 (Bitcoin: sem 0, O, I e l). Aceita endereços e transações.