본문 바로가기

Spring/Spring Framework

다국어 처리하기

반응형

다국어를 처리하는 여러가지 방법 중 쿠키를 이용하는 방법을 알아보자.

Spring LocaleResolver

HTTP request를 통해 host로 접속 시에

browser의 cookie의 ip를 가지고 locale 정보를 확인한다.

package org.springframework.web.servlet;

import java.util.Locale;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Interface for web-based locale resolution strategies that allows for
 * both locale resolution via the request and locale modification via
 * request and response.
 *
 * <p>This interface allows for implementations based on request, session,
 * cookies, etc. The default implementation is
 * {@link org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver},
 * simply using the request's locale provided by the respective HTTP header.
 *
 * <p>Use {@link org.springframework.web.servlet.support.RequestContext#getLocale()}
 * to retrieve the current locale in controllers or views, independent
 * of the actual resolution strategy.
 *
 * <p>Note: As of Spring 4.0, there is an extended strategy interface
 * called {@link LocaleContextResolver}, allowing for resolution of
 * a {@link org.springframework.context.i18n.LocaleContext} object,
 * potentially including associated time zone information. Spring's
 * provided resolver implementations implement the extended
 * {@link LocaleContextResolver} interface wherever appropriate.
 *
 * @author Juergen Hoeller
 * @since 27.02.2003
 * @see LocaleContextResolver
 * @see org.springframework.context.i18n.LocaleContextHolder
 * @see org.springframework.web.servlet.support.RequestContext#getLocale
 * @see org.springframework.web.servlet.support.RequestContextUtils#getLocale
 */
public interface LocaleResolver {

    /**
     * Resolve the current locale via the given request. Can return a default locale as
     * fallback in any case.
     * @param request the request to resolve the locale for
     * @return the current locale (never {@code null})
     */
    Locale resolveLocale(HttpServletRequest request);

    /**
     * Set the current locale to the given one.
     * @param request the request to be used for locale modification
     * @param response the response to be used for locale modification
     * @param locale the new locale, or {@code null} to clear the locale
     * @throws UnsupportedOperationException if the LocaleResolver implementation does not
     * support dynamic changing of the locale
     */
    void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale);

}

Spring에서 제공하는 LocaleResolver 인터페이스의 4가지 구현체

✔️AcceptHeaderLocaleResolver
     웹 브라우저 단에서 전송받은 헤더의 Accept-Language를 locale으로 선택한다. setLocale() 메소드 사용 불가

✔️CookieLocaleResolver 

     setLocale()를 상속받아 구현한 메소드에서 cookie에 locale을 저장하고, cookie에서 저장된 locale 정보를 가져온다.

✔️SessionLocaleResolver

     setLocale()를 상속받아 구현한 메소드에서 HTTP Session에 locale을 저장하고, Session에서 저장된 locale 정보를 가져온다.
✔️FixedLocaleResolver

     지정된 locale로 설정한다. setLocale() 메소드 호출 시에는 UnsupportedOperationException 발생.

 

위의 방식 중 어떤 방식으로 locale을 저장할 지 서비스 특성에 맞게 정하여, 이를 상속받아 커스터마이징하면 된다.

 

 

반응형

'Spring > Spring Framework' 카테고리의 다른 글

SpringFramework에서의 싱글톤 전략  (0) 2021.01.02
Restful API  (0) 2020.11.06
Rest API  (0) 2019.12.16
Spring Task  (0) 2019.10.04
Spring Scheduling  (0) 2019.09.27