2011-04-14 7 views
1

gettext가 작동했지만 갑자기 번역되지 않습니다. 나는 무슨 일이 일어나는지 알아 낸다. 나는 /sys/locale/no_NO/LC_MESSAGES/messages.po을 사용하여 페이지를 노르웨이 언어로 번역하려고합니다.gettext 설정이 작동하지 않습니다.

putenv("LANG=ja_JP.UTF-8"); 
setlocale(LC_MESSAGES, 'ja_JP.UTF-8'); 
bindtextdomain('messages', '../locale'); 
bind_textdomain_codeset('messages', 'UTF-8'); 
textdomain('messages'); 

:

/public/home.php

$locale = "en_US"; 
if (isSet($_COOKIE['lang'])) $locale = $_COOKIE['lang']; 
putenv("LC_ALL=$locale"); 
setlocale(LC_ALL, $locale); 
bindtextdomain("messages", "../sys/locale"); 
textdomain("messages"); 

echo "<p>locale: " . $locale . " "; 
echo gettext("Home"); 
exit(); 

이 내가 다음을 수행해야

locale: no_No Home 때 일본으로 locale: no_No Hjem

+0

'putenv ("LANG = $ locale");'을 추가하십시오. 이것이 최종 레벨 환경 변수 gettext 프로브이지만 때로는 도움이됩니다. 'LC_ALL ='보다 우선 순위가 높고'no_No : nl_NL : en_GB' 대안을 허용하는'LANGUAGE =' – mario

답변

0

해야 출력한다 다른 언어를 사용하면 항상 enc를 추가 할 필요가 없습니다. 접미사가 나오지 않으면 매우 일치하지 않습니다. 마찬가지로 "en"이 잘 작동하면 "ja"를 사용할 수 없습니다.

setlocale은 로캘이 /usr/share/i18n/SUPPORTED에 나열되지 않으면 오류를 반환하지만 오류가 발생하더라도 번역이 작동하는 경우가 많습니다.

1

나는 노르웨이 사람과 싸우고있는 것을 본다. 데비안 서버에서도 nb_NO와 nn_NO를 지원하지만 no_NO는 지원하지 않는 문제가있었습니다. 당신이 로케일이 설치되어 있는지 확인

: 이 솔루션은 폴더 및 설정 등의 로케일 이름의 정확한 이름을 사용하는 것입니다

$ locale -a 
C 
POSIX 
en_US.utf8 
nb_NO.utf8 
nn_NO.utf8 

그래서 노르웨이어에 대한 PHP 설정 :

setlocale(LC_ALL, 'nb_NO.utf8'); 
putenv('LANGUAGE=nb_NO.utf8'); 

PO 파일의 경로는 같은 이름이어야합니다. 예 :

./i18n/nb_NO.utf8/LC_MESSAGES/messages.po 

동일한 솔루션이 우분투에서 작동 할 것입니다.

0

당신은 로케일을 다시 구성해야 할 수 있습니다

설치 어떤 debconf (IE 실행 apt-get을 업데이트 한 후 apt-get을 루트로, 어떤 debconf를 설치)

이 루트로

실행 때 dpkg-재구성 로케일 나를 위해 일한 코드 :

//Put this in cookie for example 

$lang = GetPrefLanguage($_SERVER["HTTP_ACCEPT_LANGUAGE"]); 

$language = $lang . '.utf8'; 

setlocale(LC_ALL, $language); 

// Set language 
putenv('LANG='.$language); 

// Specify location of translation tables 
bindtextdomain('traductions', dirname(__FILE__).'/locale'); 

// Choose domain 
textdomain("traductions"); 

// Translation is looking for in ./locale/xx_XX/LC_MESSAGES/traductions.mo now 
/*GET Pref language */ 
function GetPrefLanguage($str_http_languages) 
{ 
    $lang = substr($str_http_languages, 0, 2); 

    switch($lang) { 
     case 'fr': 
      return 'fr_FR'; 
     break; 
     case 'de': 
      return 'de_DE'; 
     break; 
     case 'en': 
      return 'en_US'; 
     break; 
     default: 
      return 'en_US'; 
    } 
} 
관련 문제