2012-07-27 2 views
1

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

그러나 PHP에서는 문제가 없습니다.

내가 첫 번째 토큰 {0}에 결정을하여 문자열의 일부를 포맷하고 싶습니다 : 텍스트가해야, {0}0 경우가 1 경우

  • 는, 텍스트 a
  • 을해야한다 다른 모든 경우를 들어, 텍스트가 있어야한다 b
  • c

0의 경우 plural, =0을 사용하여이 작업을 수행 할 수 있지만 내 테스트를 통해 작동하지 않는 것으로 이해합니다. 오프셋 및 맞춤형 복수형이 4.8에서 도입 되었기 때문일 수 있습니다.

나는 select를 사용하는 것을 달성하기 위해 노력하고, 따라서 이니

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

그러나, 어떤 이유로, 메시지 포맷터 위를 포맷 할 수 없습니다 및 false (수없는 형식)을 반환합니다.

왜 이런 경우입니까? 구문에 문제가 있습니까?


빠른 업데이트 : 일부 파고 후, 나는이 숫자로 시작하는 값과 일치하도록 선택 사용할 수없는 것으로 보인다. 이 문제를 해결할 방법이 있습니까?

다른 업데이트 : ICU 49.1.2 및 intl 3.0.0a2로 업데이트되었습니다. 지금 =0, =1 등을 사용할 수 있지만,이 작동이 중지되었습니다 (이전에 작업 한) :이 작품

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

여기서 내가 intl의 최신 버전으로 업그레이드를 종료

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

답변

1

및 ICU 49.1.2.

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

을하지만이 일을 : 그 작업이 완료 된 후

그러나이 작동하지 않을

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

그건 올바른 방법입니다. –

+0

이것은 복수형을 남용하는 것 같은 냄새가납니다. 번역가가 지구상에서 무슨 일이 일어나는지 궁금하지 않습니까? – Trejkaz

0

select 인수 유형은 정확한 문자열의 일치입니다. 문자열 인수 값을 전달하는지 확인한 다음 일치하는 절이 있어야합니다. 정확한 로케일을 찾으려면 복수형을 사용하지 마십시오. 각 로케일은 one의 의미에 대한 자체 규칙을 가지고 있기 때문에 사용하지 마십시오.

다음 이 되겠지만 원하는 것은 무엇이든 제공하지만, PHP 구현보다 형식에 대해 더 많이 알고 있습니다.

MessageFormatter::formatMessage($locale, 
    '{0, select, _0 {a} _1 {b} other {c}}', 
    array("_$value")) 
관련 문제