En Angular, el paquete @angular/localize
permite manejar la internacionalización (i18n) directamente en el código TypeScript mediante el marcador $localize
. Este enfoque es útil para aplicaciones que requieren traducciones tanto en las plantillas como en el código.
$localize
El marcador $localize
de Angular es una herramienta para la internacionalización que te permite definir y utilizar mensajes traducibles en tiempo de compilación o ejecución. Se integra directamente con las herramientas de i18n nativas de Angular.
1. Instalar @angular/localize:
Si tu proyecto no lo incluye, instálalo con el siguiente comando:
npm install @angular/localize --save
2. Habilitar $localize:
Angular agrega automáticamente soporte para $localize
en aplicaciones configuradas para i18n. Asegúrate de que tu aplicación esté configurada para internacionalización con comandos como:
ng add @angular/localize
3. Configurar mensajes traducibles:
Los mensajes definidos con $localize
en TypeScript serán extraídos y gestionados mediante archivos de traducción (xlf
o xlf2
).
$localize
El marcador $localize
permite definir mensajes traducibles en el código. Aquí tienes ejemplos básicos:
const mensaje = $localize`Hola, mundo!`;
console.log(mensaje); // Mostrará "Hola, mundo!" en el idioma predeterminado.
Puedes incluir variables dentro del mensaje para mayor dinamismo. Usa plantillas literales con ${}
:
const nombre = 'Juan';
const mensaje = $localize`Hola, ${nombre}! ¿Cómo estás?`;
console.log(mensaje);
Para facilitar la traducción, puedes agregar descripciones y significados en las traducciones:
const mensaje = $localize`:significado|descripción:Hola, mundo!`;
console.log(mensaje);
Ejemplo completo:
const mensaje = $localize`:greeting|Saludo mostrado en la página principal:Hola, mundo!`;
Para gestionar traducciones con $localize
, necesitas exportar los mensajes a un archivo de localización utilizando el siguiente comando:
ng extract-i18n
Esto genera un archivo messages.xlf
en la raíz del proyecto. Allí puedes definir las traducciones para diferentes idiomas.
messages.es.xlf
)
<trans-unit id="greeting" datatype="html">
<source>Hola, mundo!</source>
<target>¡Hola, mundo!</target>
</trans-unit>
const error = $localize`:error|Mensaje de error genérico:Ocurrió un error inesperado.`;
console.error(error);
const usuario = 'María';
const confirmacion = $localize`:confirmation|Confirmación para el usuario:¿Estás seguro de que quieres continuar, ${usuario}?`;
alert(confirmacion);
$localize
Jorge García
Fullstack developer