2013-03-07 3 views
1

여기 내 경우입니다 : PHP 응용 프로그램을 번역하기 위해 Poedit을 통해 gettext를 사용합니다. 이 키워드와 Poedit에서 참조Gettext는 단수가 존재할 때 복수형을 파싱하지 않을 것입니다.

function ListOutput($result,$column_names,$singular='.',$plural='.',$link=false,$group=array(),$options=array()) 

: ListOutput:3,4 는 그리고 복수형에 대한 사용자 정의 기능을 가지고있다.

지금, 내 문제는 내가 번역 할 문자열이있을 때, 나는 _('example_string')를 사용하지만, 나는 단지 Poedit 나타납니다을 example_string, ListOutput($result,$column_names,'example_string', 'example_string_plural')을 통해 나중에 번역하는 경우이다.

그리고이 문제는 다른 시간에 나타납니다. 나는 복수형과 단수 형을 가질 것입니다 (그래서 단수 2 번 ...).

참고 1 : 문자열이 ListOutput()에서만 참조되는 경우 복수형이 Poedit에 올바르게 표시됩니다.

주 2 : ListOutput는() 기능은 ngettext() 3 인수로리스트의 요소의 수와를 호출합니다.

+0

아무도 자신의 함수 ListOutput()에서 어떤 일이 일어나고 있는지 생각할 수 없습니다. 문제를 재현하는 최소 코드를 작성하십시오. 매개 변수와 함께 ngettext()를 호출했을 것입니다. – akky

답변

0

나는이 xgettext 동작에 놀랄 일이 아닙니다. Gettext에서 (번역되지 않은) 문자열은 ID입니다. 카탈로그에서 동일한 ID로 두 개의 다른 항목을 가질 수 없습니다. 그건 말이 안되 겠어?

당신은 두 개의 충돌하는 정의와 ePO를 카탈로그에 msgid "example_string"를 작성 xgettext을 요구하고 : 하나합니다 (_() 발생에서) 단일 형태의 항목이나 복수형 (ListOutput() 전화에서)을 가진 항목으로. 오류를보고하면 더 나을 것이지만 첫 번째 정의 만 선택한다는 것은 전혀 놀라운 일이 아닙니다.

어쨌든 비린내 같습니다 - 같은 문자열을 어떻게 두 가지 방법으로 올바르게 사용할 수 있습니까? 두 가지 용도 중 하나가 잘못되었을 가능성이 큽니다. 실제로 합법적 인 경우 msgctxt을 사용하여 두 문자열을 모호하게 할 수 있습니다.

+1

하하, 오늘이 문제를 우연히 발견했습니다. 이것은 PO 포맷을위한 IMHO/xgettext는 msgid가 복수형과 충돌 할 수 있다고 생각합니다. 복수형의 경우 msgid는 단수와 복수의 연결이어야하며, PO 카탈로그의 두 양식 모두를 처리 할 수 ​​있어야합니다. 그렇지 않다면 충돌이 있다는 것을 알리는 오류를 던지십시오. – guillaumepotier