서버에서 웹브라우저 사용자가 선호하는 언어를 알아내는 방법
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 를 사용하는 것이 일반적이다.