2010-05-26 3 views
6

웹 사이트가 있습니다. 나는 영어, 스웨덴, 노르웨이 사이트가 올 수 있도록 gettext를 작동 시키려고 노력하고 있습니다. 나는 그것을 작동시킬 수 없다. 나는 무엇을 잘못 했는가?내 서버에서 PHP와 Gettext가 작동하지 않습니다.

이 내 설정 코드 :

// define constants (defualt - danish) 
$lang = 'da_DA'; 
$lang_short = ''; 
$lang_prefix = 'da'; 

if (isset($_GET['lang'])) 
{ 
    switch($_GET['lang']) 
    { 
     case 'en': 
      $lang = 'en_EN'; 
      $lang_short = 'en/'; 
      $lang_prefix = 'en'; 
      break; 
     case 'se': 
      $lang = 'se_SE'; 
      $lang_short = 'se/'; 
      $lang_prefix = 'se'; 
      break; 
     case 'no': 
      $lang = 'no_NO'; 
      $lang_short = 'no/'; 
      $lang_prefix = 'no'; 
      break; 
    } 
} 
define('LANG', $lang_short); 
define('LANG_PREFIX', $lang_prefix); 

putenv("LC_ALL=". $lang); 
bindtextdomain('messages', ROOT .'lang/'); 

그리고 내 경로 /var/www/rssbot.dk/lang/입니다. 내가 직접 chmod를 만들어야합니까, 아니면 ...?

+0

어디에서 .mo 파일을'lang'에 넣었습니까? '/ var/www/rssbot.dk/lang/en_EN/LC_MESSAGES/messages.mo'를 가지고 있습니까? 또한'locale -a'를 사용하여 모든 로케일을 사용할 수 있는지 확인하십시오. –

+0

예 "경로"와 -a에게 그것의 반환을 로케일에 내가 틀렸다하지만 en_EN 유효한 로케일 모르겠어요 경우 (en_GB.utf8 en_US.utf8 POSIX 는 C ) 정정 해줘 – ParisNakitaKejser

+3

. 'en_US' 또는 아마도 단지 region을 중립적으로해야만하는'en'을 시도하십시오. 다른 언어를 작동 시키려면 OS에 영어가 아닌 다른 로켈을 설치해야 할 수도 있습니다. –

답변

3

일부 gettext 설치에 사용하려는 각 로케일에 대해 locale-gen이 실행되어야 함을 발견했습니다. 특히 Ubuntu에서이 사실을 발견했습니다. locale-gen을 실행 한 후 PHP (apache)를 다시 시작해야 할 수도 있습니다.

sudo locale-gen se_SE 
sudo locale-gen no_NO 

내가 가진했습니다 test setup (와 로케일 파일을 작업)을 gettext의 설치가 작동하는지 확인 할 수 있습니다.

<?php 

//Depending on your OS, putenv/setlocale/both will set your language. 
putenv('LC_ALL=es_MX'); 
setlocale(LC_ALL, 'es_MX'); 

bindtextdomain("su", "./locale"); //set the locale folder for a textdomain 
bind_textdomain_codeset("su", "UTF-8"); //set the codeset for a textdomain 
textdomain("su"); //choose a textdomain 

if(gettext("Hello World!") === "Hola a todos!") { 
    print "We translated it correctly"; 
} else { 
    print "Gettext setup isn't working"; 
} 

?> 
+0

이것은 나를 위해 일했습니다!나는 도커 컨테이너 (Ubuntu 14.04 LTS)를 사용하여 램프 스택을 실행 중입니다. 이 질문에 대한 궁극적 인 답은 다음과 같습니다. https://bugs.php.net/bug.php?id=66265 –

0

잘못 될 수있는 몇 가지 사항이 있습니다.

1 대부분의 시스템을 수용하려면 다음 줄 필요 LC_ALL과 대신 의 LC_MESSAGES을 setlocale에를 사용하는 경우 Linux에서

<?php 
$newlocale = setlocale(LC_MESSAGES, "sv_SE"); 
putenv("LANG=$newlocale"); 
?> 

2를, 당신은 로케일이 설치되어 있어야합니다 서버에!

그것은 이것

sudo locale-gen sv_SE 

-3- 같은 명령을 다시 구성 단지

aptitude install language-pack-sv 

OR (우분투)이 같은 명령에 설치 될 수 지정 .mo 파일 및 로케일 디렉토리의 이름

<?php 
// Use default.mo located at ./locale/LC_MESSAGES/default.mo 
bindtextdomain("domain", "./locale"); 
?> 

4- gettext() 또는 _()를 사용하여 작은 따옴표와 큰 따옴표를 섞으면 두 개의 bindtextdomain!

<?php 
// Double quote _("Hello world") is matched 
bindtextdomain("domain", "./locale"); 
// Single quote _('Hello world') is matched 
bindtextdomain('domain', "./locale"); 
?> 

5 인코딩이 많은 곳에서 문제가 될 수 있습니다. .mo 파일이 PHP 스크립트와 동일한 인코딩 (예 : utf-8)이 아닌 경우 일치하지 않을 수 있습니다!