ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 다국어 처리(Internationalization)
    BackEnd/Spring Boot 2022. 4. 8. 07:55
    반응형

    Overview

      해당 글에서는 하나의 출력 값을 여러가지 언어로 제공하는 다국어 처리를 하겠습니다.

     

      우선 특정 컨트롤러가 아닌 프로젝트 전반적으로 적용시키기 위해 @Bean으로 등록하겠습니다. @Bean은 스프링 부트가 초기화 될 때 메모리에 올려두게 됩니다. 세션을 통해 Locale 값을 얻어오는 localeResolver 메서드를 정의합니다. (기본: 한국어)

    package com.spring.springboot;
    
    import java.util.Locale;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.context.annotation.Bean;
    import org.springframework.web.servlet.LocaleResolver;
    import org.springframework.web.servlet.i18n.SessionLocaleResolver;
    
    @SpringBootApplication
    public class Application {
    
      public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
      }
    
      @Bean
      public LocaleResolver localeResolver() {
        SessionLocaleResolver localeResolver = new SessionLocaleResolver();
        localeResolver.setDefaultLocale(Locale.KOREA);
        return localeResolver;
      }
    
    }

     

    다국어 파일 생성

      다음으로 application.yml 파일에 다국어 파일명을 지정하고 다국어 파일을 생성합니다. 다국어 파일은 resources 폴더 하위에 제공할 언어별로 생성합니다.

    # 다국어 파일명 지정
    spring:
      messages:
        basename: messages

    • messages.properties: 한국어
    greeting.message=안녕하세요.
    • messages_en.properties: 영어
    greeting.message=Hello
    • messages_fr.properties: 프랑스어
    greeting.message=Bonjour

     

    HelloController

      신규 /hello-internationalized API를 생성합니다. 요청 시 헤더 정보에 "Accept-Language"를 추가하고, MessageSource를 주입받아 message를 반환합니다.

    package com.spring.springboot;
    
    import java.util.Locale;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.MessageSource;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestHeader;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class HelloController {
    
      @Autowired
      private MessageSource messageSource;
    
      @GetMapping(path = "/hello/{name}") // endpoint
      public String hello(@PathVariable String name) {
        /* 생략 */
      }
    
      @GetMapping(path = "/hello-internationalized")
      public String helloInternationalized(
          @RequestHeader(name = "Accept-Language", required = false) Locale locale) {
        return messageSource.getMessage("greeting.message", null, locale);
      }
    }

    @Autowired: 스프링 프레임워크에 등록된 빈들 중에서 같은 타입의 빈을 자동으로 주입시켜 줍니다.

     

    실행결과




     

    반응형

    'BackEnd > Spring Boot' 카테고리의 다른 글

    @JsonIgnore  (0) 2022.04.25
    XML format  (0) 2022.04.25
    Validation  (0) 2022.04.06
    Exception Handling  (0) 2022.04.05
    Spring Boot 설정 및 동작 원리  (0) 2022.04.05

    댓글

Designed by Tistory.