2013-06-21 2 views
0

Drupal 6을 사용하여 다국어를 제작하려고합니다. 내 사이트는 Windows IIS 7.5 Server에서 호스팅됩니다.Dreaded ???? 중국어 텍스트를 표시 할 때 문자 대신. 간체 한자 문제

내 .po 파일을 업로드했는데 모든 것이 잘 작동합니다. 지금 내가 처음 사이트를 번역 할 때 내 고지에서 벗어난 것을 시도하고 제거하기 위해 사이트 조각을 통과하는 단계에서 지금.

내가 겪고있는 문제는 로케일 형식으로 날짜를 표시하려고 시도하는 데 있습니다.

$format = "%A, %b %#d, %Y : %H:%M%p" 

if($language->language == 'zh-hans') 
{ 
    $loc=setlocale(LC_TIME, 'chs'); 
}else{ 
    $loc=setlocale(LC_TIME, 'de'); 
} 
$mytime = strftime($format, $time); 
$mytime = iconv(mb_detect_encoding($mytime), 'utf-8', $mytime); 

echo $mytime; 

위의 코드가 현재의 언어의 로컬 포맷의 일자를 표시한다 (독일어 중국어)

독일어 : 여기

난 로컬 날짜를 표시하는 데 사용하는 PHP 코드 디스플레이는 예상대로 :

프라이 탁 이세 (21) : 2013 16시 48분

하지만 중국 출력은 다음과 같습니다.

??? 21, 2013 : 16:48 ??

해결 방법에 대한 아이디어가 있으십니까?

+0

곳이 생겼 :

우리는 단순히 문자열이 UTF-8이 같은를 변환 할 수 있습니까? 콘솔에서? 웹 페이지에? 데이터베이스에? –

+0

내 생각 엔 웹 페이지에있을 것이고 문서 상단에'header ('Content-Type : text/html; charset = utf-8');를 포함하는 표준 수정이 아마도 그것을 해결할 것입니다 ... 아마도;) – CD001

+0

위의 결과는 웹 사이트에 표시됩니다. 좀 더 명확하게하기 위해 echo 문을 추가했습니다. charset은 utf-8로 설정됩니다.나머지 페이지는 중국어 텍스트로 완벽하게 표시해야한다고 덧붙여 야합니다. strftime이 반환 한 날짜는 물음표로 표시됩니다. –

답변

3

첫 번째 문제는 LC_TIME 카테고리를 설정하는 것만으로는 충분하지 않습니다. strftime 함수는 적절한 언어로 시간을 포맷하려고 시도하지만 기본적으로 1252 코드 페이지를 사용하는 것으로 보이므로 중국어와 같은 문자에 필요한 문자를 생성 할 수 없습니다.

LC_TIME 및 아마도 LC_CTYPE으로 설정하면 충분하지만 작동하도록 설정할 수있는 유일한 방법은 LC_ALL입니다. 그래서 setlocale 호출은 다음과 같아야합니다

if($language->language == 'zh-hans') 
{ 
    $loc=setlocale(LC_ALL, 'chs'); 
}else{ 
    $loc=setlocale(LC_ALL, 'de'); 
} 

다음 문제가 mb_detect_encoding 항상 올바른 인코딩을 감지 할 것입니다. Windows에서 나에게 맞는 것은 setlocale(LC_CTYPE, 0)을 사용하여 현재 코드 페이지를 되 찾는 것입니다.

$codepage = explode('.',setlocale(LC_CTYPE, 0)); 
$codepage = 'cp'.$codepage[1]; 

setlocale(LC_CTYPE, 0)에 호출로부터 리턴 된 값은 언어 이름 및 도트로 구분 코드 페이지 번호의 조합이다. 두 부분을 explode으로 분할 한 다음 cp이라는 접두사를 붙이면 iconv이 이해할 수있는 형태로 코드 페이지가 생성됩니다.

$mytime = iconv($codepage, 'utf-8', $mytime); 
+0

나는이 사이트에서 필자가받은만큼 완전하고 유익한 대답이라고 말할 수있다. 당신의 시간과 노력은 대단히 감사합니다! –