Spring/SpringBoot

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

J4J 2023. 9. 18. 00:49
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
반응형