Alpha
O Lingo.dev Compiler está em alpha. É instável, não é recomendado para uso em produção e as APIs podem mudar entre versões.
O Lingo.dev Compiler deteta formas de plural no seu texto JSX e converte-as 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 de plural corretas com recurso a um LLM.
Como funciona#
O Compiler deteta padrões numéricos
Durante a análise da AST, o Compiler identifica nós de texto que contêm números interpolados juntamente com palavras que dependem da contagem. Por exemplo, You have {count} items contém uma variável numérica ao lado de uma palavra que muda consoante a quantidade.
O LLM classifica as formas de plural
Um LLM pequeno e rápido (configurável através de pluralization.model) analisa o texto e determina que palavras precisam de flexão no plural. Gera depois as categorias de plural do CLDR adequadas para cada idioma de destino.
É gerado ICU MessageFormat
O Compiler gera uma string em ICU MessageFormat que cobre todas as categorias de plural exigidas pelo idioma de destino.
Exemplo#
JSX de origem:
<p>You have {count} items in your cart</p>Resultado gerado para inglês:
{count, plural, one {You have 1 item in your cart} other {You have # items in your cart}}Resultado gerado para russo (que tem quatro categorias de plural):
{count, plural, one {У вас # товар в корзине} few {У вас # товара в корзине} many {У вас # товаров в корзине} other {У вас # товаров в корзине}}Categorias de plural do CLDR#
Idiomas diferentes usam subconjuntos distintos 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, checo, polaco |
many | Grande quantidade | Russo, árabe, polaco |
other | Geral / predefinido (sempre obrigatório) | Todos os idiomas |
O inglês usa one e other. O russo usa one, few, many e other. O árabe usa as seis categorias. O Compiler trata disto automaticamente para cada idioma.
Configuração#
A pluralização está ativada por predefinição. Pode configurá-la nas opções do Compiler:
{
pluralization: {
enabled: true,
model: "groq:llama-3.1-8b-instant",
},
}| Opção | Tipo | Predefinição | Descrição |
|---|---|---|---|
pluralization.enabled | boolean | true | Ativa ou desativa a deteção automática de plural. |
pluralization.model | string | "groq:llama-3.1-8b-instant" | Modelo de LLM para deteção de formas de plural. Um modelo mais pequeno é suficiente, já que a deteção é mais simples do que a tradução. |
Para desativar completamente a pluralização:
{
pluralization: {
enabled: false,
},
}Desativar a pluralização significa que o Compiler traduz texto com números como strings simples. O resultado traduzido pode não estar gramaticalmente correto para todas as quantidades em idiomas com regras de plural complexas.
Quando a pluralização se aplica#
O Compiler deteta 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 interfaces dinâmicas)
O Compiler não pluraliza:
- Texto sem referência numérica:
Items in cart(não há nenhum número que permita ramificar) - Texto em que o número não está diretamente relacionado com uma palavra dependente da contagem
Escreva texto natural no seu JSX. O Compiler e o respetivo LLM tratam da deteção de plural e da formatação em ICU — não precisa de aprender a sintaxe do ICU MessageFormat.
