본문 바로가기
IT/프로젝트

국제화 JSP 이용

by 봉즙 2019. 12. 2.

java - com.xxxx.xxx - Config - LocaleConfig

 

resources - message - message.properties

 

위의 사진과 같이 message_언어.properties로 파일을 만들며 _언어를 입력하지 않는 것이 디폴트로 설정된 언어다.

@Configuration
public class LocaleConfig implements WebMvcConfigurer {

    //bean 이름을 설정해주지 않으면 method 이름과 같아 이름 변경
    @Bean(name = "localeResolver")
    public LocaleResolver getLocaleResolver() {
        //세션 사용하려는 경우
        // SessionLocaleResolver slr = new SessionLocaleResolver();
        // slr.setDefaultLocale(Locale.KOREAN);

        //쿠키 기준(세션이 끊겨도 브라우져에 설정된 쿠키 기준으로)
        //최초 기본 로케일을 강제로 설정이 가능 하다.
        //쿠키 기준(세션이 끊겨도 브라우져에 설정된 쿠키 기준으로)
        // CookieLocaleResolver localeResolver = new CookieLocaleResolver();
        CookieLocaleResolver cookieLocaleResolver = new CookieLocaleResolver();
        cookieLocaleResolver.setDefaultLocale(Locale.KOREAN);
        cookieLocaleResolver.setCookieName("APPLICATION_LOCALE");
        cookieLocaleResolver.setCookieMaxAge(60 * 60);

        return cookieLocaleResolver;
    }

    //Bean 이름 설정
    @Bean(name = "messageSource")
    // 메세지 소스 세팅
    public MessageSource getMessageResource() {
        ReloadableResourceBundleMessageSource messageResource = new ReloadableResourceBundleMessageSource();
        //resources/message 폴더 아래에 있는 messages 를 읽는다.(default) lang 값에 따라 _ko_KR, en_US 등이 추가 됨.
        messageResource.setBasename("classpath:message/message");
        messageResource.setDefaultEncoding("UTF-8");
        messageResource.setCacheSeconds(10); // reload messages every 10 seconds

        return messageResource;
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        LocaleChangeInterceptor localeInterceptor = new LocaleChangeInterceptor();
        //lang 이라는 파라미터로 받는다
        localeInterceptor.setParamName("lang");
        System.out.println(localeInterceptor.getParamName());

        registry.addInterceptor(localeInterceptor).addPathPatterns("/*");
    }

}

LocaleConfig에는 쿠키를 통해 처리하도록 하며 위와 같이 설정한다 주소를 lang을 통해 받는다.

lang = 언어
lang.change=언어 변경
lang.en=영어
lang.ja=일본어
lang.ko=한국어
lang.change=Change the language
lang.en=English
lang.ja=Japanese
lang.ko=Korean

message.properties, message.properties_en 에 다음과 같이 설정한 후

JSP 파일에서 사용하기 위해 다음과 같이 추가해준다.

<ul>
 <li class="nav-header"><spring:message code="lang"/></li>
  <li class="nav-item" id="ko" >
   <a href="#" class="nav-link set-language">
    <i class="nav-icon far fa-circle text-info"></i>
      <p><spring:message code="lang.ko"/></p>
   </a>
  </li>
  <li class="nav-item" id="en">
   <a href="#" class="nav-link set-language">
    <i class="nav-icon far fa-circle text-info"></i>
      <p><spring:message code="lang.en"/></p>
   </a>
 </li>
</ul>

class 를 이용하 처리하기 위해 다음과 같이 설정해준후

$('.set-language').click(function () {
    const getLanguage = $(this).closest("li").attr('id');

    // $(".content-wrapper").load("sampleTable?lang=getLanguage")
    window.location.replace("index?lang="+getLanguage);
});

load를 사용하려는 경우 주석에 있는 방법을 사용한다.

 

JSP의 경우

<spring:message code=""/>를 통해서 message.properties에서 설정한 값을 불러오며 spring:message를 사용하기 위해서는  아래의 태그 라이브러리를 가져와야한다.

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>

'IT > 프로젝트' 카테고리의 다른 글

모달 외부 JSP에서 불러오기  (0) 2020.03.19
pushstate (ajax 뒤로가기)  (0) 2020.02.06
KakaoPay  (1) 2019.09.30
공공API 데이터 파싱 후 db  (0) 2019.09.04

댓글