2013-06-07 4 views
0

이 신비를 해결하는 데 도움이 필요합니다 : Windows 컴퓨터에서 XAMPP를 사용하고 "echo _ ("message ")"방법을 사용하여 헤브라이 사람. 로케일 디렉토리가 있습니다 root/locale/Hebrew_Israel.1255/LC_MESSAGESPHP - 번역 - 하나의 PHP 파일에서 작동하지만 다른 언어에서는 작동하지 않습니다

번역은 사이트 루트에있는 index.php 파일에서 올바르게 작동합니다.

그러나/php 디렉토리 아래에있는 다른 PHP 파일에서는 번역이 작동하지 않습니다. 상대 경로 문제로 인한 것 같지만 루트로 설정하더라도 변환에 실패합니다.

로케일의 작동 방식과이 모든 내용이 의미하는 바는 확실하지 않습니다. 적절한 문서를 찾을 수 없습니다. 모든 PHP를 실행하거나 한 번만 실행한다고 가정합니까?

어쨌든 이것은 각 PHP 파일 앞에 포함 된 "config.php"파일입니다. 통지 경로는 절대적입니다.

// language stuff: 
$locale = "Hebrew_Israel.1255"; // this might change on server 
$domain = "messages"; 
putenv("LANG=$locale"); 
putenv("LANGUAGE=$locale"); 
putenv("LC_ALL={$locale}"); // Returns TRUE 
putenv("LC_MESSAGES=$locale"); 
setlocale(LC_ALL, $locale); 
$path = $_SERVER['DOCUMENT_ROOT'] . "/locale"; 
bindtextdomain($domain, $path); 
textdomain($domain); 

답변

0

로케일에 $ _SESSION을 사용하고 전환하려면 $ _GET으로 전달해야합니다.

예를 들어, 나는 스페인어와 영어로 사용하고 웹 페이지는이있다 : 이것은 당신이 당신의 파일을 전달해야하는 기본 언어 인 경우

session_start(); 

    if(!$_GET["locale"] || $_GET["locale"] == "es_LA") 
    { 
     $_SESSION["locale"] = "es_LA"; 
    } 
    else 
    { 
     $_SESSION["locale"] = $_GET["locale"]; 
    } 

    putenv("LC_ALL=".$_SESSION["locale"].".utf8"); 
    setlocale(LC_ALL, $_SESSION["locale"].".utf8"); 
    bindtextdomain("messages", "./locale"); 
    bind_textdomain_codeset("messages", "UTF-8"); 
    textdomain("messages"); 

그래서 내 header.php에서

로케일 변수.

RewriteRule   ^/     index.php?locale=es_LA [L] 
RewriteRule   ^en/    index.php?locale=en_US [L] 

가 지금은 더 프로 사용 gettext를 해요

htaccess로 파일 그러나 이것은 나를 위해 일했다 : 당신이 가장 쉬운 방법 htaccess로 처리하는 경우이다.

+0

안녕하세요, mihali_ov, 저는 문제를 해결하기 위해 노력했습니다. 그것은 성가신 PHP 현금이었습니다. PHP 서버 (아파치)를 다시 시작해야만했습니다. –

+0

@HananShteingart 로캘의 $ _SESSION 처리를 시도해야합니다. –

0

해결 : 계속해서 성가신 캐싱이 진행되었습니다. 아파치 서버를 다시 시작해야만 작동합니다 :-)