Alfa
El Compiler de Lingo.dev está en alfa. Es inestable, no se recomienda para uso en producción y las API pueden cambiar entre versiones.
El Compiler de Lingo.dev detecta las formas plurales en tu texto JSX y las convierte automáticamente a ICU MessageFormat. En lugar de escribir manualmente las reglas de plural para cada idioma, escribe texto natural con valores numéricos y el Compiler genera las formas plurales correctas con ayuda de un LLM.
Cómo funciona#
El Compiler detecta patrones numéricos
Durante el análisis del AST, el Compiler identifica nodos de texto que contienen números interpolados junto con palabras que dependen de la cantidad. Por ejemplo, You have {count} items contiene una variable numérica junto a una palabra que cambia según la cantidad.
El LLM clasifica las formas plurales
Un LLM pequeño y rápido (configurable mediante pluralization.model) analiza el texto y determina qué palabras necesitan flexión de plural. Genera las categorías plurales de CLDR adecuadas para cada idioma de destino.
Se genera ICU MessageFormat
El Compiler genera una cadena en ICU MessageFormat que cubre todas las categorías plurales requeridas por el idioma de destino.
Ejemplo#
JSX de origen:
<p>You have {count} items in your cart</p>Salida generada para inglés:
{count, plural, one {You have 1 item in your cart} other {You have # items in your cart}}Salida generada para ruso (que tiene cuatro categorías plurales):
{count, plural, one {У вас # товар в корзине} few {У вас # товара в корзине} many {У вас # товаров в корзине} other {У вас # товаров в корзине}}Categorías plurales de CLDR#
Los distintos idiomas usan diferentes subconjuntos de las seis categorías plurales de CLDR. El Compiler genera solo las categorías requeridas por cada idioma de destino:
| Categoría | Descripción | Idiomas de ejemplo |
|---|---|---|
zero | Cantidad cero | Árabe, letón |
one | Singular | Inglés, francés, alemán, español |
two | Dual | Árabe, hebreo, esloveno |
few | Paucal / cantidad reducida | Ruso, checo, polaco |
many | Cantidad grande | Ruso, árabe, polaco |
other | General / predeterminada (siempre obligatoria) | Todos los idiomas |
El inglés usa one y other. El ruso usa one, few, many y other. El árabe usa las seis categorías. El Compiler se encarga de esto automáticamente según el idioma.
Configuración#
La pluralización está habilitada de forma predeterminada. Configúrala en las opciones del Compiler:
{
pluralization: {
enabled: true,
model: "groq:llama-3.1-8b-instant",
},
}| Opción | Tipo | Predeterminado | Descripción |
|---|---|---|---|
pluralization.enabled | boolean | true | Activa o desactiva la detección automática de plurales. |
pluralization.model | string | "groq:llama-3.1-8b-instant" | Modelo de LLM para detectar formas plurales. Un modelo más pequeño es suficiente, ya que esta detección es más simple que la traducción. |
Para desactivar por completo la pluralización:
{
pluralization: {
enabled: false,
},
}Desactivar la pluralización significa que el Compiler traduce como cadenas simples los textos que contienen números. Es posible que la salida traducida no sea gramaticalmente correcta para todas las cantidades en idiomas con reglas de plural complejas.
Cuándo se aplica la pluralización#
El Compiler detecta patrones de plural en estos casos:
- Texto con variables numéricas interpoladas:
{count} items,{n} messages - Texto con literales numéricos:
You have 5 items(menos común en interfaces dinámicas)
El Compiler no pluraliza:
- Texto sin referencia numérica:
Items in cart(no hay ningún número a partir del cual ramificar) - Texto donde el número no está directamente relacionado con una palabra que depende de la cantidad
Escribe texto natural en tu JSX. El Compiler y su LLM se encargan de detectar los plurales y darles formato ICU; no necesitas aprender la sintaxis de ICU MessageFormat.
