Desde Angular 9 podemos usar
$localize`Hello ${name}:name:` Para i18n en código mecanografiado. Esto todavía tiene algunas limitaciones ya que el comando ng xi18n no detecta las cadenas, pero si estos textos se agregan manualmente al archivo de traducción, funciona.
La función $localize está bastante bien documentada en el JSDoc en la fuente , sin embargo, no explica cómo trabajar con plurales. Lo que quiero decir es algo como esto (pseudo-código):
$localize`Hello {${count}, plural, =1 {reader} other {readers}}` ¿Es esto posible con $localize ? Si sí: ¿Cómo? Si no: ¿Cómo compila Angular tales expresiones de HTML a TypeScript?
Por ahora, no es posible usar ICU con $localize , como se explica en este problema de github . Según los últimos comentarios, parece que el equipo angular lo está considerando si sigue siendo liviano.
Mientras tanto, la solución sugerida es crear su propio método auxiliar que devuelva la traducción correcta según el parámetro de conteo.
title = $localize `Hi ${this.name}! You have ${ plural(this.users.length. { 0: $localize `no users`, 1: $localize `one user`, other: $localize`${this.users.length} users`, }.` function plural(value, options) { // Handle 0, 1, ... cases const directResult = options[value]; if (directResult !== undefined) { return directResult; } // handle zero, one, two, few, many // ... return options.other; }Acabo de leer el problema https://github.com/angular/angular/issues/35912 y creo que intl-messageformat puede hacer lo que necesita.
Consulte https://github.com/formatjs/formatjs/tree/master/packages/intl-messageformat .