본문 바로가기
Spring/SpringBoot

[SpringBoot] i18n을 활용하여 다국어 처리하기

by J4J 2023. 9. 18.
300x250
반응형

안녕하세요. J4J입니다.

 

이번 포스팅은 i18n을 활용하여 다국어 처리하는 방법에 대해 적어보는 시간을 가져보려고 합니다.

 

 

 

i18n이란?

 

i18n은 국제화하는 기능을 의미합니다.

 

다른 말로는 세계에 존재하는 다양한 언어들을 서비스 사용자에게 보여줄 때 사용될 수 있는 것을 뜻합니다.

 

다른 여러 지역의 사용자들이 하나의 서비스를 사용하는 경우는 잦은 일은 아니지만, 만약 이런 유형의 서비스를 제공하기 위해 개발해야 한다면 i18n을 활용하여 다양한 지역의 언어들을 보여주는 기능을 활용해 볼 수 있습니다.

 

 

반응형

 

 

기본 설정

 

[ 1. properties 파일 인코딩 설정 ]

 

일반적인 상황에서는 properties 파일 인코딩을 설정하지 않아도 되지만 한글을 적용하기 위해서는 properties 파일 인코딩 설정이 필요합니다.

 

그렇지 않으면 한글이 깨져서 사용자에게 보여지는 결과를 만듭니다.

 

 

 

IntelliJ를 사용하는 경우 "ctrl + alt + s"를 누르면 설정 화면이 나옵니다.

 

여기서 properties 파일에 대한 인코딩 값을 UTF-8로 변경해 주시면 됩니다.

 

properties 파일 인코딩 설정

 

 

 

[ 2. application.properties 설정 ]

 

# message 파일의 기본 이름 (콤마로 구분해서 사용 가능) (default messages)
# /resources/messages/messages_{언어}.properties를 바라보도록 설정
spring.messages.basename=messages/messages

# 인코딩 설정 (default UTF-8)
spring.messages.encoding=UTF-8

# 메세지 코드를 찾지 못했을 때 메세지 코드를 그대로 반환하는 설정 (default false)
# true → 코드 값 그대로 반환
# false → exception 발생
spring.messages.use-code-as-default-message=false

# 언어별 message 파일을 찾지 못한 경우에 대한 설정 (default true)
# true → 시스템 설정 (MessageConfig)에서 설정한 언어에 맞는 message 파일 활용
# false → default 파일 (message.properties) 활용
spring.messages.fallback-to-system-locale=false

# 캐시 주기 설정 (default forever)
spring.messages.cache-duration=3600

# messageFormat 항상 사용 여부 (arguments에 따른 format 처리 방식) (default false)
# true → 항상 사용
## 예를 들어 message.properties에 welcome=Hello ''라고 되어있는걸 호출하면 Hello '로 출력
## 예를 들어 message.properties에 welcome=Hello ''{0} 라고 되어있는걸 호출하면 Hello '{0}로 출력
# false → 항상 미사용
## 예를 들어 message.properties에 welcome=Hello ''라고 되어있는걸 호출하면 Hello ''로 출력
## 예를 들어 message.properties에 welcome=Hello ''{0} 라고 되어있는걸 호출하면 Hello '{0}로 출력
spring.messages.always-use-message-format=true

 

 

 

 

[ 3. Message Config 클래스 추가 ]

 

package com.i18n.config;

import org.springframework.context.annotation.Bean;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;

import java.util.Locale;

public class MessageConfig {

    @Bean
    public LocaleResolver localResolver() {
        // messageSource의 기본 언어를 한국어로 설정
        SessionLocaleResolver sessionLocaleResolver = new SessionLocaleResolver();
        sessionLocaleResolver.setDefaultLocale(Locale.KOREA);

        return sessionLocaleResolver;
    }
}

 

 

 

[ 4. message 파일 추가 ]

 

message 파일은 위의 application.properties의 basename 설정 값에 따라 위치가 달라집니다.

 

저는 위의 설정에 맞게 /resources/messages 폴더를 만들어 다음과 같이 default, 한국어, 영어 파일들을 추가하겠습니다.

 

// messages.properties
welcome=웰컴 'default'

// messages_ko.properties
welcome=웰컴 ''{0}''

// messages_en.properties
welcome=welcome ''{0}''

 

messages 파일 구조

 

 

 

[ 5. Controller 클래스 추가 ]

다국어 message 호출 테스트를 위한 Controller 클래스 파일을 다음과 같이 추가해 보겠습니다.

 

package com.i18n.controller;

import lombok.RequiredArgsConstructor;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequiredArgsConstructor
@CrossOrigin("*")
public class MessageController {

    private final MessageSource messageSource;

    @GetMapping("/welcome")
    public ResponseEntity<Object> welcome(String name) {
        System.out.println(LocaleContextHolder.getLocale());
        return ResponseEntity.ok(
                messageSource.getMessage(
                        // message code (message.properties에 작성된 key)
                        "welcome",
                        // arguments
                        new String[]{name},
                        // header의 Accept-Language 값을 이용하여 메세지 처리할 언어 선택
                        // 값이 ko, ko_KR 이면 messages_ko.properties, 값이 en, en_US 이면 message_en.properties 활용
                        LocaleContextHolder.getLocale()
                )
        );
    }
}

 

 

 

 

테스트

 

먼저 한국어가 올바르게 확인되는지 다음과 같이 테스트해볼 수 있습니다.

 

ko 한국어 테스트

 

ko_KR 한국어 테스트

 

 

 

다음은 영어가 올바르게 확인되는지 다음과 같이 테스트 해볼 수 있습니다.

 

en 영어 테스트

 

en-US 영어 테스트

 

 

 

마지막으로 정의하지 않은 언어를 사용할 경우 default 파일 내용이 보이는 것을 확인할 수 있습니다.

 

default 테스트

 

 

 

 

 

 

 

 

이상으로 i18n을 활용하여 다국어 처리하는 방법에 대해 간단하게 알아보는 시간이었습니다.

 

읽어주셔서 감사합니다.

 

 

 

728x90
반응형

댓글