2010-03-11 2 views
7

gettext를 사용하여 내 웹 사이트에 현지화 지원을 추가하려고합니다. 내가 설정하는 방법에 gettext에 다양한 가이드를 따라 한 다음 수행 한 : 나는 Poedit을 사용했습니다PHP gettext 함수는 원래 번역되지 않은 문자열을 반환합니다.

test.php 

locale/ 
    de_DE 
    LC_MESSAGES 
     messages.mo 
     messages.po 

    en_GB 
    LC_MESSAGES 
     messages.mo 
     messages.po 

: 내 프로젝트 디렉토리의 루트에 다음 파일과 디렉토리를 만든

위의 .po 및 mo 파일을 만듭니다. 유닉스 라인 엔딩, UTF-8을 사용하여 고소했고 언어와 국가를 적절히 설정했습니다.

나는 다음 코드가 test.php라는 PHP 스크립트를 만들었습니다. "이것은 테스트입니다"나는 텍스트를 가져온

<?php 

    define('LOCALE', 'de_DE'); 

    // Set up environmental variables 
    putenv("LC_ALL=" . LOCALE); 
    setlocale(LC_ALL, LOCALE); 
    bindtextdomain("messages", "./locale"); 
    bind_textdomain_codeset("messages", LOCALE .".utf8"); 
    textdomain("messages"); 

    die(gettext('This is a test.')); 

?> 

을 Poedit에 번역을 제공하고 저장했습니다.

그러나 어떤 이유로 test.php 스크립트는 원본 텍스트를 번역되지 않은 상태로만 출력합니다. 변환 파일의 버전로드를 거부합니다.

서버가 리눅스 (Ubuntu), 아파치 2.2.11 및 PHP 5.2.6-3ubuntu4.5를 실행하고 있다는 점은 주목할 가치가 있습니다. phpinfo()을 확인하고 gettext를 사용할 수 있습니다.

나를 도와 줄 사람이 있습니까? 감사.

답변

14

시스템에 누락 된 로켈과 관련된 문제 일 수 있습니다. 독일 로케일을 설치하고 모든 작업을해야하십시오 :

sudo apt-get install language-pack-de-base 

그런 다음, 다음 명령을 실행하고 독일 로케일 표시되어야 그 후

locale -a 

는, 다음과 같은 코드가 작동해야, 여전히 당신을 가정 위에서 설명한 디렉토리 구조에 .po 및 .mo 파일이 있어야합니다.

<?php 

    setlocale(LC_ALL, 'de_DE.UTF-8'); 
    bindtextdomain('messages', './locale'); 
    textdomain('messages'); 

    echo gettext('This is a test.'); 

    ?> 
+0

그럼 작동 했나요? 실종 로케일이나 다른 것과 관련된 문제였습니까? – bpedro

+0

예! 효과가 있습니다. 당신의 도움을 주셔서 대단히 감사합니다. – Camsoft

+0

괜찮습니다. 내가 도울 수있어서 기뻐! – bpedro

0

는 다음

<?php 

    define(LC_MESSAGES, 'de_DE'); 

    // Set up environmental variables 
    putenv("LANGUAGE=de_DE"); 
    bindtextdomain("*", dirname(__FILE__).'/locale'); 
    bind_textdomain_codeset("messages", 'UTF-8');  

    die(gettext('This is a test.')); 

?> 
+0

불행히도 이것은 작동하지 않았습니다. 여전히 영어 버전 만 표시됩니다. – Camsoft

1

시도 예, 예, PHP의 gettext를 지원 다시.

PHP의 끔찍한 gettext 구현으로 인해 WordPress와 같은 많은 오픈 소스 프로젝트가 http://savannah.nongnu.org/projects/php-gettext/으로 전환되었고 원래 버전을 완전히 무시했습니다.

나는 내 프로젝트 중 하나에서 그것을 또한했는데, 나는 무엇이든 놓친다 고 말할 수 없다.

상업 프로젝트의 단점 : GPL에 의거합니다.

+0

흥미 롭습니다. 이것 좀 봐. 아, GPL로 인해 문제가 될 수 있습니다. – Camsoft

+0

당신이 GPL이라고 말했듯이 이것을 사용할 수 없으며이 문제는 상용 프로젝트에서 발생합니다. – Camsoft

+0

나는 그 문제를 안다. 우리는 여기도 닫힌 소스 프로젝트를 가지고 있습니다. 우리는 php-gettext를 사용할 수 없기 때문에 (또는 PHP의 gettext 모듈에 의존하기를 원하기 때문에) 뭔가를 구현해야합니다.그러나 다른 GPL이 적용된 PHP 소프트웨어에 통합하는 것이 중요한 프로젝트이므로 대답 할만한 가치가 있다고 생각했습니다. – Boldewyn