2017-02-18 6 views
0

직장에서 우리 사이트를 3 개의 추가 언어로 번역하기로 결정했으며이를 수행하는 방법을 조사했습니다. 나는 하루의 더 나은 부분을 구글과 stackoverflow 검색, 모든 다른 솔루션을 시도했지만 내가 그것을 작동하게 만들 수 없습니다 보냈습니다.Windows 7 홈 및 PHP 7.0.8에서 gettext를 사용한 국제화 실패

Windows 7 Home edition (내 개발 컴퓨터)에서는 불가능하다고 두려워하기 시작합니다.

// C:\Apache24\htdocs\locale\en_GB\LC_MESSAGES\messages.mo 
// C:\Apache24\htdocs\locale\en_GB\LC_MESSAGES\messages.po 
msgid "" 
msgstr "" 
"Project-Id-Version: iArbete 1.0.0\n" 
"Report-Msgid-Bugs-To: ******** \n" 
"Last-Translator: ********\n" 
"Language: en_GB\n" 
"MIME-Version: 1.0\n" 
"Content-Type: text/plain; charset=UTF-8\n" 
"Content-Transfer-Encoding: 8bit\n" 

msgid "iArbete" 
msgstr "workIng" 


// C:\Apache24\htdocs\index.php 
if(isset($_GET["locale"])) 
{ 
    $locale = $_GET["locale"]; 
} 
else 
{ 
    $locale = 'en_GB'; 
} 

putenv("LC_ALL=$locale"); 
setlocale(LC_ALL, $locale); 
echo getenv("LC_ALL"); 

$domain = 'messages'; 
bindtextdomain($domain, './locale'); 
textdomain($domain); 
bind_textdomain_codeset($domain, 'UTF-8'); 

echo _("iArbete"); 

echo _("iArbete"); "workIng"으로 번역해야하지만 그렇지 않습니다. 또는 나는 개념을 얻지 않고 있냐?

--- 추가 정보 ----------------------------------------- ---------------

mo 파일을 약간 변경하고 다시 컴파일 했으므로 이제 어떻게 보입니까?

// C:\Apache24\htdocs\locale\en_GB\LC_MESSAGES\messages.mo 
// C:\Apache24\htdocs\locale\en_GB\LC_MESSAGES\messages.po 
msgid "" 
msgstr "" 
"Project-Id-Version: iArbete 1.0.0\n" 
"Report-Msgid-Bugs-To: ******** \n" 
"Last-Translator: ********\n" 
"Language: en_GB\n" 
"MIME-Version: 1.0\n" 
"Content-Type: text/plain; charset=UTF-8\n" 
"Content-Transfer-Encoding: 8bit\n" 

msgid "workIng" 
msgstr "iArbete" 

msgid "Menu" 
msgstr "Meny" 


// C:\Apache24\htdocs\index.php 
if(isset($_GET["locale"])) 
{ 
    $locale = $_GET["locale"]; 
} 
else 
{ 
    $locale = 'sv_SE'; 
    $locale = 'en_GB'; 
// $locale = 'ar_AE'; 
} 

putenv("LC_ALL=$locale"); 
setlocale(LC_ALL, $locale); 
// echo getenv("LC_ALL"); 

$domain = 'messages'; 
bindtextdomain($domain, './locale'); 
textdomain($domain); 
bind_textdomain_codeset($domain, 'UTF-8'); 

echo _("workIng"); 
echo _("Menu"); 

msgid "workIng"msgid "Menu"는 "Meny"로 변환되지 않습니다 "iArbete" 로 번역

무슨 일입니까? 첫 번째 단어 만 번역 될 정도로 이상하게 느껴집니다. 그래서 나는 po에있는 단어를 재정렬하고 다시 컴파일했지만 여전히 "workIng"은 번역 된 유일한 단어입니까 ??

Google 드라이브 here에 누군가 내 파일을 업로드하고 싶습니다.

+1

질문은 무엇입니까 sections 1.4 and 1.5? – Juned

+0

왜 작동하지 않습니까? – Cirshiss

+0

'bindtextdomain' 바로 전에'var_dump (__ DIR __)'을 수행하면,'locale' 서브 디렉토리가있는 디렉토리가 보여 집니까? 'messages.mo' 파일의 전체 경로는 무엇입니까? – lxg

답변

0

당신은 msgfmt를 사용하여 MO 파일로 PO 파일을 변환해야합니다 : '.mo'파일에서 그것을 구별하기 위해 '와 .po'파일

글자 PO 휴대용 객체를 의미한다, 여기서 MO는 Machine Object를 나타냅니다. 는 [...]

PO 파일은 특정 대상 언어에서의 번역 주어진 패키지의 각 원본, 번역 문자열을 읽고 인간에 의해 편집하고, 동료 되는 것을 의미한다. [...]

MO 파일은 프로그램에서 읽을 수 있도록 작성되었으며 기본적으로 이진 파일입니다. [...] PO 파일이 완전하고 신뢰할 수있다

되면, 'msgfmt에서'프로그램은 기계 중심의 형식으로 PO 파일을 끌 때 사용 , 인 일지 모른다 의해 번역 수율 효율적으로 검색 (MO Files 참조). 'msgfmt'프로그램 의 모든 실행 모드에 대한 자세한 내용은 msgfmt Invocation을 참조하십시오.

-는 GNU gettext에 설명서,

+0

나는 이것을했다. 그건 중요하지 않아. 컴파일 된 이후로 그 안에 무엇을 표시 할 수 없기 때문에 메시지의 출처를 게시했습니다 .po – Cirshiss

+0

캐시가있는 것 같아요. 하지만 내가 바꿀 때마다 나는 캐시를 없애므로, 모르겠다. 아마도 ... 아마도 다른 파일 일 것이다. 그러나 po 파일에서 뭔가를 변경하면 mo 파일을 삭제하고 재구성합니다. – Cirshiss