
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
package com.takensoft.common.config;
import jakarta.validation.constraints.NotNull;
import net.rakugakibox.util.YamlResourceBundle;
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ResourceBundleMessageSource;
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
/**
* @author : takensoft
* @since : 2025.01.22
* @modification
* since | author | description
* 2025.01.22 | takensoft | 최초 등록
*
* Spring의 다국어 메시지 처리를 위한 설정 Config
*/
@Configuration
public class MessageConfig {
/**
* ResourceBundleMessageSource를 확장하여 YAML 형식의 메시지를 지원하는 내부 정적 클래스
*/
private static class YamlMessageSource extends ResourceBundleMessageSource {
/**
* @param basename - 메시지 번들의 기본 이름
* @param locale - 로케일 정보
* @return 해당 로케일의 ResourceBundle 객체
* @throws MissingResourceException - 해당 리소스를 찾지 못할 경우 예외 발생
*
* YAML 형식의 메시지 번들 호출
*/
@NotNull
@Override
protected ResourceBundle doGetBundle(@NotNull String basename, @NotNull Locale locale) throws MissingResourceException {
return ResourceBundle.getBundle(basename, locale, YamlResourceBundle.Control.INSTANCE);
}
}
/**
* @return MessageSource 객체
*
* YAML 메시지 소스를 설정
*/
@Bean
public MessageSource messageSource() {
YamlMessageSource messageSource = new YamlMessageSource();
messageSource.setBasename("message/messages"); // 메시지 찾을 위치
messageSource.setDefaultEncoding("UTF-8"); // 인코딩
messageSource.setAlwaysUseMessageFormat(true); // 메시지 포멧 규칙
messageSource.setUseCodeAsDefaultMessage(true); // 메시지를 못찾으면 그 자체를 디폴트 메시지로 사용
messageSource.setFallbackToSystemLocale(true); // 특정 로케일에 대한 파일을 발견하지 못 할 경우, 시스템 로케일로 폴백
return messageSource;
}
}