Açısal 9 $ nasıl çoğullarla yerelleştirilir?


10

Açısal 9'dan beri kullanabiliriz

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

Patlama kodunda i18n için. ng xi18nKomutun dizeleri algılamadığı için bunun hala bazı sınırlamaları vardır , ancak bu metinler çeviri dosyasına manuel olarak eklenirse çalışır.

$localizeFonksiyon oldukça iyi belgelenmiştir kaynağında JSDoc ancak çoğul nasıl çalışılacağını açıklamaz. Demek istediğim böyle bir şey (sözde kod):

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

Bu mümkün mü $localize? Evet ise: Nasıl? Hayır ise: Angular bu tür ifadeleri HTML'den TypeScript'e nasıl derler?


bu sana yardımcı oluyor mu <span i18n>Updated {minutes, plural, =0 {just now} =1 {one minute ago} other {{{minutes}} minutes ago}}</span>? Dokümanlardaki bu. İstediğinize oldukça benzer
Dave Pastor

@DavePastor: Evet, denedim. Bunu şimdi soruda değiştirdim. Yine de sahte kod, sadece elde etmek istediklerimi göstermek için.
yankee

@DavePastor: (ikinci yorumla ilgili olarak): Hayır, bu yardımcı olmuyor. Bu HTML'dir, TypeScript değil.
yankee

Tamam bu yüzden TS tarafında ele almak istiyorum. Anladım.
Dave Pastor

Yanıtlar:


2

Şimdilik, $localizebu github sayısında tartışıldığı gibi YBÜ'leri kullanmak mümkün değildir . Son yorumlardan, açısal ekip hafif kalıyorsa düşünüyor gibi görünüyor.

Bu arada, önerilen geçici çözüm count parametresine göre doğru çeviriyi döndüren kendi yardımcı yönteminizi oluşturmaktır.

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.