En Angular, la pluralización es una característica clave de la internacionalización (i18n). Usando $localize
, puedes manejar mensajes plurales dinámicamente de acuerdo al idioma y la cantidad. Esto se logra mediante reglas de pluralización incorporadas que se aplican automáticamente según el idioma configurado.
1. Instalar y configurar $localize:
Asegúrate de que el paquete @angular/localize
esté instalado:
ng add @angular/localize
2. Definir mensajes plurales:
Utiliza la sintaxis especial de pluralización en $localize
, basada en las opciones de ICU (International Components for Unicode).
La pluralización en $localize
se define con el marcador plural
. Aquí tienes un ejemplo:
const cantidad = 5;
const mensaje = $localize`:@@itemsMessage:Has comprado ${cantidad}:plural{
=0 {ningún artículo.}
=1 {un artículo.}
other {# artículos.}
}`;
console.log(mensaje);
:@@itemsMessage:
: Un identificador opcional único para facilitar la referencia en los archivos de traducción.
plural
: Define las reglas de pluralización.
=0, =1, other
: Casos específicos para manejar diferentes cantidades.
#
: Es reemplazado por el valor de la variable cantidad.
Salida esperada:
cantidad = 0
, muestra: "Has comprado ningún artículo."
cantidad = 1
, muestra: "Has comprado un artículo."
cantidad > 1
, muestra: "Has comprado cantidad] artículos."
Puedes incluir más variables en el mensaje. Por ejemplo:
const cantidad = 3;
const producto = 'manzanas';
const mensaje = $localize`:@@fruitMessage:Has comprado ${cantidad} ${producto}:plural{
=0 {ninguna ${producto}.}
=1 {una ${producto}.}
other {# ${producto}.}
}`;
console.log(mensaje);
Salida esperada:
cantidad = 0
, muestra: "Has comprado ninguna manzana."
cantidad = 1
, muestra: "Has comprado una manzana."
cantidad > 1
, muestra: "Has comprado cantidad] manzanas."
Cuando usas $localize
con pluralización, puedes extraer los mensajes para su traducción usando:
ng extract-i18n
En el archivo de traducción (messages.xlf
), los mensajes plurales se representan con <plural>
:
messages.xlf
<trans-unit id="itemsMessage" datatype="html">
<source>Has comprado {VAR_PLURAL, plural, =0 {ningún artículo.} =1 {un artículo.} other {# artículos.}}</source>
<target>Vous avez acheté {VAR_PLURAL, plural, =0 {aucun article.} =1 {un article.} other {# articles.}}</target>
</trans-unit>
$localize
para pluralización
1. Simplicidad: No requiere bibliotecas externas.
2. Optimización automática: Las reglas plurales se adaptan automáticamente al idioma configurado.
3. Extracción nativa: Los mensajes plurales se incluyen fácilmente en los archivos de traducción.
Jorge García
Fullstack developer