angular 9 $ localize를 복수형과 함께 사용하는 방법?


9

Angular 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>습니까? 그 문서에 있습니다. 당신이 원하는 것과 아주 비슷합니다
Dave Pastor

@DavePastor : 그렇습니다. 나는 지금 질문에서 그것을 바꿨다. 그럼에도 불구하고 내가 달성하고자하는 것을 설명하기 위해 의사 코드입니다.
양키

@DavePastor : (두 번째 주석 포함) : 아니요, 도움이되지 않습니다. 이것은 TypeScript가 아닌 HTML입니다.
양키

좋아, 그래서 당신은 TS 측에서 이것을 처리하고 싶다. 알았다.
데이브 목사

답변:


2

현재로서는 $localizegithub 이슈 에서 논의한 바와 같이 ICU를 사용할 수 없습니다 . 마지막 의견에서 각도 팀이 경량으로 유지되면 고려하고있는 것처럼 보입니다.

한편 제안 된 해결 방법은 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;
    } 

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.