Alpha
O Lingo.dev Compiler está em alpha. Ele é instável, não é recomendado para uso em produção e as APIs podem mudar entre versões.
O Lingo.dev Compiler detecta formas de plural no seu texto JSX e as converte automaticamente em ICU MessageFormat. Em vez de escrever manualmente regras de plural para cada idioma, basta escrever texto natural com valores numéricos, e o Compiler gera as formas corretas usando um LLM.
Como funciona#
O Compiler detecta padrões numéricos
Durante a análise da AST, o Compiler identifica nós de texto que contêm números interpolados ao lado de palavras que variam conforme a contagem. Por exemplo, You have {count} items contém uma variável numérica ao lado de uma palavra que muda de acordo com a quantidade.
O LLM classifica as formas de plural
Um LLM pequeno e rápido (configurável via pluralization.model) analisa o texto e determina quais palavras precisam de flexão de plural. Ele gera as categorias de plural do CLDR apropriadas para cada idioma de destino.
O ICU MessageFormat é gerado
O Compiler gera uma string em ICU MessageFormat que contempla todas as categorias de plural exigidas pelo idioma de destino.
Exemplo#
JSX de origem:
<p>You have {count} items in your cart</p>Saída gerada para o inglês:
{count, plural, one {You have 1 item in your cart} other {You have # items in your cart}}Saída gerada para o russo, que tem quatro categorias de plural:
{count, plural, one {У вас # товар в корзине} few {У вас # товара в корзине} many {У вас # товаров в корзине} other {У вас # товаров в корзине}}Categorias de plural do CLDR#
Cada idioma usa um subconjunto diferente das seis categorias de plural do CLDR. O Compiler gera apenas as categorias exigidas por cada idioma de destino:
| Categoria | Descrição | Idiomas de exemplo |
|---|---|---|
zero | Quantidade zero | Árabe, letão |
one | Singular | Inglês, francês, alemão, espanhol |
two | Dual | Árabe, hebraico, esloveno |
few | Paucal / pequena quantidade | Russo, tcheco, polonês |
many | Grande quantidade | Russo, árabe, polonês |
other | Geral / padrão (sempre obrigatória) | Todos os idiomas |
O inglês usa one e other. O russo usa one, few, many e other. O árabe usa todas as seis categorias. O Compiler cuida disso automaticamente para cada idioma.
Configuração#
A pluralização vem ativada por padrão. Configure-a nas opções do Compiler:
{
pluralization: {
enabled: true,
model: "groq:llama-3.1-8b-instant",
},
}| Opção | Tipo | Padrão | Descrição |
|---|---|---|---|
pluralization.enabled | boolean | true | Ativa ou desativa a detecção automática de plural. |
pluralization.model | string | "groq:llama-3.1-8b-instant" | Modelo de LLM para detectar formas de plural. Um modelo menor é suficiente, já que essa detecção é mais simples do que a tradução. |
Para desativar totalmente a pluralização:
{
pluralization: {
enabled: false,
},
}Ao desativar a pluralização, o Compiler traduz textos com números como strings simples. Nesse caso, a saída traduzida pode não ficar gramaticalmente correta para todas as quantidades em idiomas com regras de plural mais complexas.
Quando a pluralização se aplica#
O Compiler detecta padrões de plural nestes casos:
- Texto com variáveis numéricas interpoladas:
{count} items,{n} messages - Texto com literais numéricos:
You have 5 items(menos comum em UIs dinâmicas)
O Compiler não pluraliza:
- Texto sem referência numérica:
Items in cart(sem número para definir a variação) - Texto em que o número não está diretamente relacionado a uma palavra que depende da contagem
Escreva texto natural no seu JSX. O Compiler e seu LLM cuidam da detecção de plural e da formatação em ICU — você não precisa aprender a sintaxe do ICU MessageFormat.
