Microsoft 社는 2022년 6월 15일 Internet Explorer 11의 지원을 종료했습니다.

서버에서 웹브라우저 사용자가 선호하는 언어를 알아내는 방법

제목

서버에서 웹브라우저 사용자가 선호하는 언어를 알아내는 방법

1. 기술적인 방법

1.1. 서버에서 Java로 알아내는 방법

request.getHeader("Accept-Language")

출력결과는 다음과 같다.

ko-KR,ko;q=0.8,en-US;q=0.5,en;q=0.3

혹은

fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5

q 는 quality value 의 약자이다.

"," 로 자른다음, ";"로 다시 잘라서, quality value 가 가장 높은 값(q 가 없으면 1)을 취하면 된다.

1.2. 클라이언트에서 Javascript로 알아내는 방법

navigator.language

Javascript 는 quality value 를 반환하지는 않는다.

다음은 결과를 배열로 반환한다.

navigator.languages

legacy 지원을 위해서 다음과 같이 할 수도 있다.

navigator.userLanguage || navigator.language || (navigator.languages && navigator.languages.length && navigator.languages[0]) || navigator.browserLanguage || navigator.systemLanguage

1.3. 서버에서 접속한 클라이언트 IP 를 통해서 알아내는 방법

한국인터넷정보센터(KRNIC) 에서 제공하는 해외-IP 대역별 현황 에서 국가별 IP 주소를 얻을 수 있다.

국가별로 주로 사용하는 언어는 알아서 매칭시켜야 한다.

언어, 국가코드, 인코딩에 관한 항목이 포함되는 locale 정보를 이용할 수 있겠지만, 단일 국가에서 2개이상의 언어를 사용하는 경우도 있다.

2. 비기술적인 방법

Accept-Language 헤더나 navigator.language 같은 것들은 웹브라우저의 메뉴 따위를 표시되는 언어이기 때문에 정확하다고 오인할 수 있겠지만, 한국어 사용자라 하더라도 영문 UI를 사용하는 사람도 있다는 것을 감안해야 한다.

국가별 IP 주소도 국가별로 1개의 언어만 사용한다는 보장은 없다.

기술적 방법은 어떠한 경우에도 완벽할 수 없고, 비기술적 방법으로 이를 보완해야 한다.

일반적으로 사용되는 방안은 기술적 방법으로 찾은 언어로 표시하되, 사용자가 선호하는 언어를 변경하면, 이를 cookie 나 session 따위에 저장하는 정도가 되겠다.

이런 것들은 cookie 를 사용하는 것이 일반적이다.

제목

첨부파일