-
다국어 처리(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