Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP로 클라이언트 로케일을 감지하는 가장 쉬운 방법

PHP 5.3.0 버전부터는 별도의 복잡한 파싱 작업 없이 $_SERVER['HTTP_ACCEPT_LANGUAGE'] 변수를 로케일(locale) 값으로 손쉽게 변환할 수 있는 내장 기능을 제공합니다. 핵심은 바로 Locale::acceptFromHttp() 메서드입니다.

예제 코드

$locale = Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']);
echo $locale;

Locale::acceptFromHttp() 함수는 현재 요청의 언어 정보를 담고 있는 Accept-Language 헤더 값을 매개변수로 받아, 해당 사용자의 로케일을 자동으로 판별해 줍니다.

실행 결과

en_US

브라우저별 동작 방식 이해하기

대부분의 브라우저는 HTTP 요청 시 Accept-Language 헤더를 함께 전송합니다. 예를 들어 미국에 위치한 사용자의 브라우저는 일반적으로 en-us 값을 보내며, 일부 구형 브라우저는 국가 코드 없이 en만 전송하기도 합니다.

영국(영국 영어) 기반 사용자는 보통 시스템 또는 사용자 로케일을 English-UK로 설정하는데, 이것이 브라우저의 기본 설정이기도 합니다. 이 경우 Accept-Language 헤더에는 en-gb가 담기게 됩니다. 같은 방식으로 남아프리카공화국의 en-za처럼 영어를 사용하는 다른 국가들도 고유한 en 계열 로케일을 가집니다.

Geo-IP 방식과의 비교

IP 주소 기반 지역 추정(Geo-IP) 방식으로 선호 언어나 로케일을 추측하는 것보다, Accept-Language 헤더를 활용하는 위 방법이 훨씬 정확도가 높습니다. 사용자가 직접 설정한 언어 환경을 그대로 반영하기 때문입니다.