2014-10-19 8 views
0

zf2에는보기 도우미 translatePlural이 있습니다. 다음과 같이 사용할 수 있습니다. ZF2 복수 번역자, 왜 배열입니까?

echo $this->translatePlural('car', 'cars', $num); 

그래서 $num == 1 그것은 말할 때 다른 car cars (현재 영어 규칙을 사용하기위한 복수의 규칙에 따라하지만).

파일로 번역하려면. 다음과 같은 배열을 사용해야합니다.

'car' => [ 
    'auto', 
    'autos', 
], 

그래서 지금 당신은 다른 auto 경우 $num == 1autos 얻을.

car을 코드에서 변환 할 수있는 곳이 있다면 translate('car')을 할 수 있지만 이는 분명히 우리가 원하는 것이 아닌 array to string coverstion 고지로 돌아갑니다.

car도 번역 할 수 있도록 복수형을 사용하면 코드를 다음과 같이 수정할 수 있습니다.

echo $this->translatePlural('car_plural', 'cars', $num); 

그리고 언어 설정;

'car_plural' => [ 
    'auto', 
    'autos', 
], 
'car' => 'auto', 

그리고 car_plural에 대한 영어 번역을 추가해야합니다. 그러므로 translatePlural 기본 메시지는 기본 설정에서 translatePlural을 사용하지 않고또는 cars 중 하나만 선택하고 번역하지 않는 한, 기본 설정에서는 거의 유용하지 않게됩니다.

translatePlural 대신 $num을 보면 pluralRule을 사용하여 단수 (자동차) 또는 복수형 (자동차) 중에서 선택할 수 있습니다. 그런 다음 translate 도우미를 사용하여 단수 또는 복수를 번역하십시오. 예를 들어 갑작스러운 작업과 같은 기본 설정과 같은 쉬운 구성을 가질 수 있습니다.

'car' => 'auto', 
'cars' => 'autos', 

이상한 키가 없으므로 영어 번역이나 별난 것이 필요하지 않습니다.

그래서/tldr;

왜 ZF2 복수형은 배열을 사용하며, 어느 것이 사용하고 하나만 번역하는지 확인하지 않는 이유는 무엇입니까? 더 나은 방법으로 보입니다.

+0

https://github.com/zendframework/zf2/issues/4939 –

답변

1

나도 이것으로 당황했다. 직장 동료와 많은 연구를 통해 도움을 얻은 후에, 나는 건전한 건축 적 이유가 있음을 발견했다. (나는 놀랐다!)

일부 언어는 단수 대 복수형의 다른 정의가 있음이 드러났다. 일부는 단수형과 복수형의 두 가지 형식을 가지고 있으며 다른 유형은 3 가지 이상의 복수형을 가지고 있습니다.

translatePlural 메서드는 이러한 다른 언어 형식을 충족시킬 수 없으므로 대신이 메서드를 처리하는 Gettext 방법을 참조하십시오.에 gettext 파일에서 영어 복수의 번역은 다음과 같이 처리됩니다

msgid "Found %d Result" 
msgid_plural "Found %d Results" 
msgstr[0] "Found %d Result" 
msgstr[1] "Found %d Results" 

그래서 단수/복수의 값이 (가) MSGID로 배열 한 다음, 언어의 복수의 인덱스 중 하나 msgstr를 선택하는 데 사용됩니다를 검색하는 데 사용됩니다 [0] 또는 msgstr [1]. 젠드는 배열을 사용하는 이유

msgid "Found %d Result" 
msgid_plural "Found %d Results" 
msgstr[0] "singular translation" 
msgstr[1] "plural translation" 
msgstr[2] "super plural translation" 

그래서 이것이, 왜 단지 단수 및 $ 복수는 $ 사이에 불충분 뒤집기 : 3 개 복수 형태가있는 언어에서

, 현지화는 다음과 같이한다. (내 블로그에이 답변의 버전을 게시했지만 답변에 블로그를 연결하는 것이 정직한 지 여부는 알 수 없음)