Spring 다국어 적용하는 방법들

방법1: .properites 파일 사용

다국어에 대한 메시지를 `프로퍼티 파일`에 저장하고, 해당 파일을 다국어별로 구분하여 작성합니다. 각 언어에 대한 프로퍼티 파일을 생성하고, 메시지 키와 해당 언어에 대한 값을 정의합니다. Spring Framework에서는 `MessageSource` 인터페이스를 사용하여 다국어 메시지를 관리합니다. MessageSource를 구현하는 `ResourceBundleMessageSource` 클래스를 주로 사용합니다.

 

  • 프로퍼티 파일 생성

한국어인 경우: messages_ko.properties

greeting.message=안녕

영어인 경우: messages_en.properties

greeting.message=Hello

 

  • MessageSource 설정
@Configuration
public class AppConfig {

    @Bean
    public MessageSource messageSource() {
        ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
        messageSource.setBasename("messages");
        messageSource.setDefaultEncoding("UTF-8");
        return messageSource;
    }
}

 

  • 다국어 적용
@Service
public class GreetingService {

    @Autowired
    private MessageSource messageSource;

    public String getGreetingMessage(String locale) {
    	
        Locale targetLocale = Locale.forLanguageTag(locale);
        return messageSource.getMessage("greeting.message", null, locale);
        
        // 한국어 적용 예시
    	// Locale koreanLocale = Locale.forLanguageTag("ko");
        // return messageSource.getMessage("welcome.message", null, koreanLocale);
    }
}

`messageSource.getMessage()` 메서드를 이용해 메시지를 가져옵니다.

첫 번째 인자: message key

두 번째 인자: 메시지에 전달할 인자 배열

세 번째 인자: `Locale` 객체

 

`Locale` 객체

특정 지역 또는 언어를 나타내는 클래스입니다. 언어는 소문자, 국가는 대문자로 표시하며 `Locale` 객체를 통해 "en-US" 미국언어, "ko-KR" 대한민국 한국어를 나타낼 수 있습니다. 이 객체를 사용한다고 해서 자동으로 번역되지는 않습니다. Spring Framework에서 다국어 처리할 때, MessageSource를 통해 해당 `Locale`에 맞는 번역된 메시지를 가져올 수 있습니다.

 

 

각 언어에 맞춰서 파일을 적용하면 됩니다. 언어를 구분하는 방법은 여러가지가 있습니다.

기본 언어를 설정한 다음 언어를 바꾸어 적용하여도 되지만, 브라우저가 서버에 요청을 전송할 시 Accept-Language 헤더에 들어 있는 언어 정보를 읽어 언어를 구분하는 방법도 있습니다.

 

 

 

 


방법2: 어노테이션 기반 메시지 처리

Spring Framework 4.3부터는 어노테이션 기반의 메시지 처리가 가능합니다. `@EnableMessageSource` 어노테이션을 사용하여 메시지 처리를 활성화하고, `@Message` 어노테이션을 사용하여 메시지를 정의할 수 있습니다.


방법3: 데이터베이스 사용

다국어 메시지를 데이터베이스에 저장하고, 필요할 때 해당 메시지를 조회하여 사용할 수 있습니다. 데이터베이스에 메시지 테이블을 생성하고, 각 언어에 대한 메시지를 저장합니다. Spring Framework에서는 `MessageSource` 인터페이스를 구현한 `ReloadableResourceBundleMessageSource` 클래스를 사용하여 데이터베이스를 통해 다국어 메시지를 관리할 수 있습니다.


방법4: Spring Boot의 MessageSourceAutoConfiguration 사용

Spring Boot를 사용하면 자동 구성을 통해 다국어 메시지 처리를 쉽게 설정할 수 있습니다. `MessageSourceAutoConfiguration` 클래스를 사용하여 `MessageSource` 빈을 자동으로 구성할 수 있습니다. 프로퍼티 파일이나 데이터베이스를 사용하여 다국어 메시지를 관리할 수 있습니다.