Pluralización automática
@lingo.dev/compiler detecta automáticamente las formas plurales en tu texto y las convierte a formato ICU MessageFormat para una pluralización adecuada en todos los idiomas.
Qué hace
El compilador utiliza IA para detectar cuándo el texto contiene formas plurales (por ejemplo, "1 elemento" vs "5 elementos") y las convierte a sintaxis de formato ICU MessageFormat.
Antes (tu código):
<p>You have {count} items</p>
Después (compilado):
<p>{count, plural, one {You have 1 item} other {You have # items}}</p>
Los diferentes idiomas tienen reglas de pluralización distintas. El árabe tiene 6 formas, el ruso tiene 4, el inglés tiene 2. ICU MessageFormat las maneja todas correctamente.
Cómo funciona
- El compilador detecta interpolaciones con valores numéricos
- Envía el texto al LLM para la detección de formas plurales
- El LLM devuelve el patrón ICU MessageFormat si se detecta pluralización
- El compilador inyecta la traducción con pluralización
Esto ocurre automáticamente, no se necesitan cambios en el código.
Configuración
{
pluralization: {
enabled: true, // Default: true
model: "groq:llama-3.1-8b-instant", // Fast model for plural detection
}
}
Modelo: Utiliza un modelo separado (rápido) para la detección de plurales para mantener los costes bajos. El predeterminado es el modelo más rápido de Groq.
Ejemplos
Plurales simples
<p>You have {count} items in your cart</p>
Se convierte en:
{count, plural,
one {You have 1 item in your cart}
other {You have # items in your cart}
}
Forma cero
<p>You have {unreadCount} unread messages</p>
Se convierte en:
{unreadCount, plural,
=0 {You have no unread messages}
one {You have 1 unread message}
other {You have # unread messages}
}
Plurales complejos
<p>{days} days and {hours} hours remaining</p>
Se convierte en:
{days, plural,
one {1 day}
other {# days}
} and {hours, plural,
one {1 hour}
other {# hours}
} remaining
Reglas específicas del idioma
ICU MessageFormat maneja automáticamente las reglas de pluralización complejas:
Inglés (2 formas):
- one: 1 item
- other: 0 items, 2 items, 100 items
Ruso (4 formas):
- one: 1, 21, 31, 41... (оди́н элеме́нт)
- few: 2-4, 22-24... (два элеме́нта)
- many: 0, 5-20, 25-30... (пять элеме́нтов)
- other: 1.5, 2.5... (1.5 элеме́нта)
Árabe (6 formas):
- zero: 0
- one: 1
- two: 2
- few: 3-10
- many: 11-99
- other: 100+
El compilador genera las formas correctas para cada idioma de destino.
Desactivar la pluralización
Si tu aplicación no utiliza formas plurales o prefieres manejarlas manualmente:
{
pluralization: {
enabled: false,
}
}
Esto omite completamente la detección de plurales, reduciendo las llamadas al LLM.
Formas plurales manuales
Puedes escribir ICU MessageFormat directamente en tu código:
<p>
{formatMessage(
{ id: "items", defaultMessage: "{count, plural, one {# item} other {# items}}" },
{ count }
)}
</p>
El compilador no intentará detectar plurales: utiliza tu formato exacto.
Rendimiento
La detección de plurales añade una pequeña sobrecarga:
- Una llamada adicional al LLM por cada texto único con interpolaciones numéricas
- Utiliza un modelo rápido (predeterminado: Groq llama-3.1-8b-instant)
- Los resultados se almacenan en caché: las compilaciones posteriores reutilizan las detecciones
Coste: Insignificante. Los modelos rápidos cuestan fracciones de céntimo por solicitud.
Preguntas frecuentes
¿Funciona esto para todos los idiomas? Sí. ICU MessageFormat admite más de 200 idiomas con reglas de pluralización adecuadas.
¿Qué pasa si la IA se equivoca?
Utiliza data-lingo-override para especificar traducciones exactas con las formas plurales correctas:
<p data-lingo-override={{
es: "{count, plural, one {1 artículo} other {# artículos}}"
}}>
{count} items
</p>
¿Puedo personalizar el modelo de detección de plurales?
Sí. Configura pluralization.model con cualquier LLM compatible. El predeterminado está optimizado para velocidad y coste.
¿Esto aumenta el tamaño del bundle? Ligeramente. Los patrones de ICU MessageFormat son un poco más grandes que las cadenas simples. El impacto es mínimo.
¿Qué pasa con los plurales anidados? Son compatibles. El compilador maneja múltiples variables pluralizadas en la misma cadena.
¿Necesito marcar las formas plurales?
No. El compilador las detecta automáticamente cuando pluralization.enabled: true.
Depuración
Para ver las formas plurales detectadas, consulta .lingo/metadata.json:
{
"translations": {
"abc123": {
"source": "You have {count} items",
"pattern": "{count, plural, one {You have 1 item} other {You have # items}}",
"locales": {
"es": "{count, plural, one {Tienes 1 artículo} other {Tienes # artículos}}"
}
}
}
}
El campo pattern muestra el ICU MessageFormat detectado por el compilador.
Próximos pasos
- Sobrescrituras manuales — Sobrescribe las formas plurales manualmente
- Referencia de configuración — Opciones de pluralización
- Guía de ICU MessageFormat — Aprende la sintaxis ICU