Alpha
El Compiler de Lingo.dev está en fase alpha. Es inestable, no se recomienda para entornos de producción y las API pueden cambiar entre versiones.
El Compiler de Lingo.dev detecta las formas de plural en tu texto JSX y las convierte automáticamente a ICU MessageFormat. En lugar de escribir a mano las reglas de plural de cada idioma, escribe texto natural con valores numéricos y el compilador generará las formas correctas con ayuda de un LLM.
Cómo funciona#
El Compiler detecta patrones numéricos
Durante el análisis del AST, el compilador identifica nodos de texto que contienen números interpolados junto a palabras que dependen de la cantidad. Por ejemplo, You have {count} items contiene una variable numérica junto a una palabra que cambia en función de la cantidad.
El LLM clasifica las formas de plural
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 de plural de CLDR adecuadas para cada idioma de destino.
Se genera ICU MessageFormat
El compilador genera una cadena en ICU MessageFormat que cubre todas las categorías de plural 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 de plural):
{count, plural, one {У вас # товар в корзине} few {У вас # товара в корзине} many {У вас # товаров в корзине} other {У вас # товаров в корзине}}Categorías de plural de CLDR#
Cada idioma utiliza un subconjunto distinto de las seis categorías de plural de CLDR. El compilador genera solo las categorías necesarias para 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 / por defecto (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 compilador lo gestiona automáticamente según el idioma.
Configuración#
La pluralización está activada por defecto. Puedes configurarla en las opciones del compilador:
{
pluralization: {
enabled: true,
model: "groq:llama-3.1-8b-instant",
},
}| Opción | Tipo | Por defecto | 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 LLM para detectar formas de plural. Un modelo más pequeño es suficiente, ya que esta detección es más sencilla que la traducción. |
Para desactivar por completo la pluralización:
{
pluralization: {
enabled: false,
},
}Desactivar la pluralización significa que el compilador traducirá como cadenas simples los textos que contengan números. Puede 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 compilador 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 habitual en interfaces dinámicas)
El compilador no pluraliza:
- Texto sin referencia numérica:
Items in cart(no hay ningún número a partir del que ramificar) - Texto en el que el número no está directamente relacionado con una palabra que depende de la cantidad
Escribe texto natural en tu JSX. El compilador y su LLM se encargan de detectar los plurales y aplicar el formato ICU; no necesitas aprender la sintaxis de ICU MessageFormat.
