Як використовувати кутову локалізацію 9 $ за допомогою множини?


10

Оскільки Кутовий 9 ми можемо використовувати

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

Для i18n у коді машинопису. Це все ще має деякі обмеження, оскільки ng xi18nкоманда не виявляє рядки, але якщо ці тексти додаються в файл перекладу вручну, вона працює.

Ця $localizeфункція досить добре зафіксована в JSDoc у джерелі , проте вона не пояснює, як працювати з множинами. Я маю на увазі щось подібне (псевдо-код):

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

Це можливо за допомогою $localize? Якщо так: як? Якщо ні: Як Angular збирає такі вирази з HTML у TypeScript?


це вам допомагає <span i18n>Updated {minutes, plural, =0 {just now} =1 {one minute ago} other {{{minutes}} minutes ago}}</span>? Це в документах. Досить схоже на те, що ви хочете
Дейв Пастор

@DavePastor: Так, я спробував це. Я змінив це в питанні зараз. Тим не менш, це псевдокод, просто для ілюстрації того, чого я хочу досягти.
янкі

@DavePastor: (щодо другого коментаря): Ні, це не допомагає. Це HTML, а не TypeScript.
янкі

Гаразд, ви хочете впоратися з цим на стороні TS. Зрозумів.
Пастор Дейв

Відповіді:


2

Поки що неможливо використовувати ІКС $localize, як це обговорювалося в цьому випуску Github . З останніх коментарів схоже, що кутова команда розглядає це, якщо вона залишається легкою.

Тим часом, пропоноване рішення полягає у створенні власного допоміжного методу, який повертає правильний переклад на основі параметра count.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.