Wie verwende ich eckige 9 $ Lokalisierung mit Pluralformen?


9

Seit Angular 9 können wir verwenden

$localize`Hello ${name}:name:`

Für i18n im Typoskript-Code. Dies hat immer noch einige Einschränkungen, da der ng xi18nBefehl die Zeichenfolgen nicht erkennt. Wenn diese Texte jedoch manuell zur Übersetzungsdatei hinzugefügt werden, funktioniert dies.

Die $localizeFunktion ist im JSDoc in der Quelle recht gut dokumentiert , erklärt jedoch nicht, wie mit Pluralformen gearbeitet wird. Was ich meine ist so etwas (Pseudocode):

$localize`Hello {${count}, plural, =1 {reader} other {readers}}`

Ist das möglich mit $localize? Wenn ja: wie? Wenn nein: Wie kompiliert Angular solche Ausdrücke von HTML nach TypeScript?


Hilft Ihnen das <span i18n>Updated {minutes, plural, =0 {just now} =1 {one minute ago} other {{{minutes}} minutes ago}}</span>? Das steht in den Dokumenten. Ziemlich ähnlich zu dem, was Sie wollen
Dave Pastor

@ DavePastor: Ja, das habe ich versucht. Das habe ich jetzt in der Frage geändert. Trotzdem ist es Pseudocode, nur um zu veranschaulichen, was ich erreichen möchte.
Yankee

@ DavePastor: (bezüglich des zweiten Kommentars): Nein, das hilft nicht. Dies ist HTML, nicht TypeScript.
Yankee

Ok, Sie möchten dies auf der TS-Seite erledigen. Ich habs.
Dave Pastor

Antworten:


2

Derzeit ist es nicht möglich, Intensivstationen mit zu verwenden $localize, wie in dieser Github-Ausgabe erläutert . Aus den letzten Kommentaren geht hervor, dass das eckige Team darüber nachdenkt, ob es leicht bleibt.

In der Zwischenzeit wird empfohlen, eine eigene Hilfsmethode zu erstellen, die die korrekte Übersetzung basierend auf dem Parameter count zurückgibt.

    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;
    } 

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.