2014-10-19 5 views
0

PHP에서 gettext에 문제가 있습니다. 원어로 된 단어 나 표현이 다른 의미를 가질 수있는 상황을 생각해보십시오.Gettext 다른 번역

예 : 단어 A 단어에는 두 가지 의미가 있습니다. 하나는 B이고 하나는 C입니다. 웹 사이트의 일부에서는 B을 사용해야합니다. 그리고 다른 부분에서는 C을 사용해야합니다.

우리가 쓸 때 B 또는 C을 어떻게 얻을 수 있습니까? 이 문제를 해결할 확실한 방법이 있어야합니다.

+0

데모를 게시하고 이미 시도한 코드를 표시 할 수 있습니까? – BenM

+0

쓸 내용이 없습니다. 이미 사용 했으니 까. 문제는 동일한 단어로 여러 번역이 필요하다는 것입니다. –

+0

죄송합니다. 이미 시도한 내용을 보여주고 작동하지 않는 이유를 설명하는 것이 좋습니다. 아무도 당신을 위해 그것을 쓰려고하지 않습니다. – BenM

답변

3

Gettext는 소위 message contexts을 지원합니다. PHP는 이것에 대한 기본 메소드가 없지만 it can easily be implemented입니다.

다른 컨텍스트에서 "금액"이라는 용어를 사용하려는 경우 - 한 맥락에서 "항목 세트 수"를 의미하고, 다른 컨텍스트에서는 "송장 금액"을 의미합니다.

은 여러 단계로 작동합니다

첫째, 대신 gettext() 기능을 사용하여, 당신은 사용자 정의를 사용합니다; contextGettext()이라고 부르 자.

echo contextGettext('amount', 'count of items'); 
echo contextGettext('amount', 'invoice amount'); 

이 방법은 다음과 같다 :

function contextGettext($string, $context) 
{ 
    // http://www.php.net/manual/de/book.gettext.php#89975 
    $contextString = "{$context}\004{$string}"; 
    $translation = gettext($contextString); 
    return ($translation === $contextString) ? $string : $translation; 
} 

참고 \004 :이 gettext의 사양에 따라, 상기 메시지 문자열의 컨텍스트 식별자을 구분 세퍼레이터이다. (. 아무것도 그냥 배경을 알고, 정말 걱정 할 필요가 없습니다)이 xgettext 도구로 번역 문자열을 수집 할 때

, 당신은 상황에 맞는 문자열을 다음 --keyword 인수를 추가합니다 :

xgettext … --keyword="contextGettext:2c,1" … 

카탈로그 번역 .mo 파일을 생성하고 webserve를 다시 시작

msgctxt "count of items" 
msgid "amount" 
msgstr "" 

msgctxt "invoice amount" 
msgid "amount" 
msgstr "" 

: 귀하의 .po 파일은 다음과 같은 항목이 있습니다 r을 사용하면 웹 응용 프로그램에서 올바른 문자열을 올바른 위치에 출력합니다.