반응형
Locale Resolver의 종류
1. AbstractLocaleContextResolver
- http의 헤더의 Accept-Language에 의해 선택된다.
- setLocale이 지원되지 않는다. 오직 브라우저 설정에 의해서만 결정
2. SessionLocaleResolver
- 처음 들어갈 때는 AccpetHeaderLocaleResolver처럼 브라우저의 언어 설정에 의한 Accept-Language로 값이 결정된다.
- 단, setDefaultLocale을 설정한다면 이 값이 최우선
- 세션으로 저장되며 org.springframework.web.servlet.i18n.SessionLocaleResolver.LOCALE 라는 세션 속성 이름으로 클래스를 시리얼라이징 되어 저장
3. CookieLocaleResolver
- SessionLocaleResolver와 속성이 동일하지만 lang 값이 바뀔 경우 세션이 아닌 쿠키에 저장된다.
- 때문에 SessionLocaleResolver의 경우 세션이 끊어지면 언어 설정이 되돌아오지만, 이 리졸버를 이용할 경우 쿠키의 값을 우선으로 불러온다.
4. AcceptHeaderLocaleResolver
5. FixedLocaleResolver
Spring 설정 방법
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
<property name="defaultLocale" value="ko" />
</bean>
JAVA에서 사용 방법
1. SESSION의 값 사용
@Controller
public class SessionLocaleController {
protected Logger logger = LoggerFactory.getLogger(getClass());
@RequestMapping(value = "/setChangeLocale")
public String changeLocale(@RequestParam(required = false) String language, HttpServletRequest request) throws IOException {
HttpSession session = request.getSession();
Locale locales = LocaleUtil.getLocale(language);
// 넘어온 파라미터에 ko가 있으면 Locale의 언어를 한국어로 바꿔준다.
// 그렇지 않을 경우 영어로 설정한다.
logger.debug("getCountry : " + locales.getCountry());
logger.debug("getLanguage : " + locales.getLanguage());
// 세션에 존재하는 Locale을 새로운 언어로 변경해준다.
session.setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME, locales);
// 해당 컨트롤러에게 요청을 보낸 주소로 돌아간다.
String redirectURL = "redirect:" + "/";
logger.debug("redirectURL : " + redirectURL);
return redirectURL;
}
}
Locale currentLocale = (Locale)session.getAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME);
2. Controller에서 Locale 사용
@RequestMapping(value = "/loginPage")
public String list(Locale locale, Model model,HttpServletRequest request){
System.out.println("*********** locale : " + locale.getLanguage());
return "login";
}
3. LocaleContextHolder 사용
* Spring의 LocaleResolver는 JAVA가 참고하고 있는 System Locale을 설정한게 아닌 스프링의 LocaleContextHolder를 설정한 것이기 때문에 Locale.getDefault();를 사용하게 되면 전혀 다른 값이 나오게 된다.
@RequestMapping(value = "/loginPage")
public String list(Locale locale, Model model,HttpServletRequest request){
System.out.println("*********** holder : " + LocaleContextHolder.getLocale().getLanguage());
return "login";
}
728x90
반응형
'웹 개발' 카테고리의 다른 글
jqGrid grid unload (0) | 2019.11.20 |
---|---|
DB에 byte로 insert 하기, select 후 string으로 변경하기 (0) | 2019.11.19 |
[web] 인코딩 ( 한글 깨짐 ) (0) | 2019.11.16 |
Apache cxf를 이용한 SOAP XML 통신 Client (0) | 2019.11.15 |
Java EE 개발자는 항상 -server 옵션을 켜 두는 것이 좋다. (0) | 2019.11.15 |