팁 내용:
PHP의 변수를 이용 웹 브라우저가 어느 나라 언어로 인코딩(encoding)이 설정되어 있는지 알아보기
팁 배경:
이번에 브라우저로 노는 웹 게임을 한글화/개발하면서, 영어 한국어 사용자 모두 놀 수 있도록 다국어 지원을 넣었습니다. (게임 소스 보고 싶으신 분은 오픈 소스이니 http://digirave.net 에서 다운 받을 수 있습니다)
팁 내용:
브라우저가 기본 encoding type을 서버에게 보내줍니다. 이것은 $HTTP_ACCEPT_LANGUAGE 라는 전역 변수를 통해 볼 수 있습니다.
팁 실제 예( http://digirave.net 의 index file):
예제 내용: 브라우저의 인코딩으로 쿠키 설정을 함으로써 영문 방문자와 한글 방문자에게 알맞은 페이지를 보여줍니다. 나중에 영문인지 한글인지 인식이 쉽도록 lang 으로 쿠키를 하나 설정합니다
$gamedomain = ".digirave.net";
$gamepath = "/";
$host = getenv("HTTP_HOST");
if (preg_match("/www.digirave.net/", $host) || preg_match("/gagaspace/", $host)) {
Header("Location: http://digirave.net" );
exit;
}
//이 부분을 보세요..................... 한글 방문자의 경우 kr_frame으로 가게 되고
if(preg_match('/ko/', $HTTP_ACCEPT_LANGUAGE)) {
if((!preg_match('/korean/', $GLOBALS[lang])) && (!preg_match('/english/', $GLOBALS[lang]))) {
$lang = 'korean';
SetCookie("lang",$lang,time()+(3600*24)*365,"/");
}
header("Location: http://digirave.net/digibbs/php/kr_frame.php" );
exit;
}
//이 부분을 보세요............... 영문 방문자의 경우 en_frame으로 가게 됩니다.
else {
if((!preg_match('/korean/', $GLOBALS[lang])) && (!preg_match('/english/', $GLOBALS[lang]))) {
$lang = 'english';
SetCookie("lang",$lang,time()+(3600*24)*365,"/");
}
header("Location: http://digirave.net/digibbs/php/en_frame.php" );
exit;
}
?>
팁 코멘트:
왜
if(preg_match('/ko/', $HTTP_ACCEPT_LANGUAGE)) {
로 하고
if($HTTP_ACCEPT_LANGUAGE == "ko") {
로 안 했냐구요?
phpschool의 L.S 님의 지적:
HTTP_ACCEPT_LANGUAGE 값은 단순히 "ko" 하나만 넘어오지 않는 경우도 있습니다. 브라우저에서 추가하면 여러개가 동시에 넘어오는 경우도 있지요.(지금 집이 아니라 확인을 못하겠는데, 제 컴퓨터의 경우는 ko와 ja가 함께 넘어값니다) HTTP 규격을 확인하면 자세한 사항이 나와있지요. q=xx 을 이용한 우선순위 같은 설정이 있으므로, 주의하셔야 할 부분입니다.