1001Ferramentas
📝 Validadores

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 other em um plural ou select.
  • Usar um tipo de argumento desconhecido (ex.: foo em vez de plural/select/number).
  • Esquecer que o # só funciona dentro de um plural/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