본문 바로가기

Dev/Orvercome 3sec memory

Default Locale setting of HttpServletRequest

728x90

Browser language setting
-> the language setting is used for the default locale setting of 
HttpServletRequest object

-> the locale information is used by 
org.springframework.web.servlet.i18n.SessionLocaleResolver
-> 
the locale information of  org.springframework.web.servlet.i18n.SessionLocaleResolver is used by org.springframework.context.support.ReloadableResourceBundleMessageSourc to load message properties file.


org.springframework.web.servlet.i18n.SessionLocaleResolver (WEB-INF/applicationContext.xml 에 선언)

 Session에 다른 설정이 없는 경우 HttpServletRequest 객체의 locale 정보를 기본설정으로 이용합니다.
HttpServletRequest 객체의 locale 정보는 테스트 결과 브라우저의 언어 설정을 따라갑니다.
Locale 정보를 가지고

org.springframework.context.support.ReloadableResourceBundleMessageSource (WEB-INF/main-servlet.xml 에 선언)

에서 언어에 맞는 메시지 번들을 로딩합니다.


<< Browser locale information Test Code>> 
<%
Enumeration<String> e = (Enumeration<String>)request.getHeaderNames();

         while(e.hasMoreElements())

         out.println("\n\n-- " + (String)e.nextElement());

%>

<% out.println("Language -- " + request.getHeader("Accept-Language")); %>

<% out.println("Locale -- " + request.getLocale()); %> 

<< Result>>
 -- Host
-- Connection
-- Cache-Control
-- User-Agent
-- Accept
-- Accept-Encoding
-- Accept-Language
-- Accept-Charset
-- Cookie
 

Language -- de,en;q=0.8,de-DE;q=0.6,en-US;q=0.4,fr-FR;q=0.2,fr;q=0.2

Locale -- de
  [Language setting of the web browser]


++++++++++++++++++++++
하나 더.

제가 테스트 한 내용 중에

브라우저 언어설정이 “독일어”로 되어 있는 경우 언어는 한글로 표시되었습니다.

혹시 기본 언어팩이 한글로 설정되어 있는가 찾아보았지만 그런 것 같지는 않았습니다.

 

아래와 같이 브라우저 언어 설정을 Locale 정보로 message properties 파일을 로딩하려고 했는데 해당 파일이 없는 경우,

웹서버가 돌아가는 시스템의 Locale 정보를 가져다가 기본 언어로 뿌립니다.

 

제어판의 국가 및 언어 설정 창에서 시간과 날짜 형식 지정하는 국가 설정을 중국으로 변경하고 서버를 재시작 하면,

독일어 설정 브라우저에서 영어화면이 나옵니다. (현재 시스템은 중국어도 영어로 되어 있으니…)

 

여기에서 날짜 형식 기준을 전혀 다른 지역인 튀니지로 지정하고

서버를 재시작해서 화면을 로딩하려고 하면, 해당 Locale 정보로 된 Message properties 파일이 없어서

 

javax.servlet.jsp.JspTagException: No message found under code 'common.message.noId' for locale 'de'.

        at org.springframework.web.servlet.tags.MessageTag.doStartTagInternal(MessageTag.java:183)

        at org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:77)

        at jsp_servlet._web_45_inf._views._common.__login._jsp__tag0(__login.java:218)

 

와 같은 에러가 발생하면서 화면 로딩에 실패합니다.

에러 메시지는 브라우저 locale 정보에 해당하는 메시지 파일이 없어서 그렇다고 나오네요.