문제

나는 사용하고있다 메시지 형식 (일부 intl 확장자) PHP에서.확장 프로그램은 ICU 4.6.1을 사용합니다.

그러나 문제는 PHP에 있지 않습니다.

첫 번째 토큰에 대한 결정을 내려 문자열의 형식을 지정하고 싶습니다. {0}:

  • 언제 {0} ~이다 0, 텍스트는 다음과 같아야 합니다. a
  • 그럴 때 1, 텍스트는 다음과 같아야 합니다. b
  • 다른 모든 경우에는 텍스트가 다음과 같아야 합니다. c

나는 이것이 다음과 같이 이루어질 수 있다는 것을 이해합니다. plural, =0 에 대한 0 그러나 테스트를 통해 작동하지 않는 것 같습니다. 아마도 오프셋과 사용자 정의 복수형이 4.8에 도입되었기 때문일 것입니다.

따라서 나는 다음을 사용하여 그것을 달성하려고 노력하고 있습니다. select:

{0, select, 0 {a} other {{0,plural,one{b}other{c}}}}

그러나 어떤 이유로 메시지 포맷터가 위의 형식을 지정하지 못하고 반환되었습니다. false (포맷할 수 없습니다).

왜 이런가요?내 구문에 문제가 있나요?


빠른 업데이트:좀 더 조사한 결과 숫자로 시작하는 값을 일치시키기 위해 select를 사용할 수 없는 것 같습니다.이 문제를 해결할 수 있는 방법이 있나요?

또 다른 업데이트:ICU 49.1.2로 업데이트되었으며 intl 3.0.0a2.이제 사용할 수 있습니다 =0, =1, 등이 작동을 멈췄습니다(이전에는 작동 중이었습니다).

{0}{0, plural, one{a} other{b}}

이것이 작동하는 곳 :

{0, plural, one{a} other{b}}
도움이 되었습니까?

해결책

결국 최신 버전으로 업그레이드를 했습니다. intl 및 ICU 49.1.2.

그러나 일단 완료되면 작동하지 않습니다.

{0}{0, plural, one{a} other{b}}

그러나 이것은 효과가 있었습니다:

{0, plural, =0{a} one{# b} other {# c}}

다른 팁

그만큼 select 인수 유형이 정확한 문자열 일치입니다.문자열 인수 값을 전달하고 있는지 확인한 다음 일치하는 절이 있는지 확인해야 합니다.정확한 대소문자 일치를 위해 복수형을 사용하지 마세요. 각 로케일에는 대상에 대한 고유한 규칙이 있기 때문입니다. one 수단.

다음과 같은 ~해야 한다 당신이 원하는 것을 제공하지만 나는 PHP 구현보다 형식에 대해 더 많이 알고 있습니다.

MessageFormatter::formatMessage($locale,
  '{0, select, _0 {a} _1 {b} other {c}}',
  array( "_$value" ))
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top