브라우저의 선호 언어 구하는 방법은 $_SERVER 변수의 HTTP_ACCEPT_LANGUAGE 값을 이용해서 구할 수 있습니다.
PHP 에서 $_SERVER 변수를 찍어보면, 아래처럼 보입니다.
[HTTP_ACCEPT_LANGUAGE] => ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7,ja;q=0.6
각 항목은 , 콤마로 구분할 수 있습니다.
ko-KR,
ko;q=0.9,
en-US;q=0.8,
en;q=0.7,
ja;q=0.6
언어코드 뒤에 ; 세미콜론 찍고, q 값을 보여주고 있는데, 이 q 값은 선호정도로 이해하면 되겠습니다.
가장 처음에 나오는 ko-KR 은 q 값이 없는데, 이 경우에는 1 을 의미합니다.
q 값에 따라 위 내용을 다음처럼 이해할 수 있습니다.
난 ko-KR 이 제일 좋아, 그 다음은 ko, 그 다음은 미국식 영어(en-US), 아니면 그냥 영어(en)도 괜찮지.
정 안 되면 일본어(ja)...
이런 식으로 브라우저는 서버에 정보를 줍니다.
서버측에서는 이 정보를 이용해서 클라이언트 브라우저로 적합한 언어로 웹 페이지를 만들어서 보내줄 수 있습니다.
php 로 함수를 만들어보면, 아래처럼 작성해 볼 수 있겠습니다.(버그 있을지도...)
function getBrowserPreferredLanguage()
{
$top_language = "";
$top_weight = 0;
$langs = explode(",",$_SERVER['HTTP_ACCEPT_LANGUAGE']);
foreach($langs as $lang)
{
list($lang_code, $weight) = explode(";", $lang);
if($weight == NULL) {
$weight = 1.0;
}
else {
$weight = substr($weight, 2);
}
echo $lang_code.' : '.$weight.'<br/>';
if($weight > $top_weight) {
$top_weight = $weight;
$top_language = $lang_code;
}
}
return $top_language;
}
하지만!!!
구글링을 하다보니, HTTP_ACCEPT_LANGUAGE 값을 이용해서 브라우저의 언어를 구하는 방법은 부정확할 수 있다는 말들이 있더군요. 더 깊이 알아보지는 않았습니다. 그냥 HTTP_ACCEPT_LANGUAGE 공부한 셈치고..이만...
'PHP' 카테고리의 다른 글
session_save_path() 설정되지 않을 때 (2) | 2013.06.13 |
---|---|
[PHP] trim (0) | 2013.02.14 |
php.ini 설정 항목들의 의미 - (추가중) (0) | 2013.02.13 |
[설정] date.timezone (0) | 2013.02.05 |
[PHP] array_push(), array_pop() (0) | 2013.01.23 |
댓글