반응형
국제화 (i18n) 기능을 제공하는 인터페이스.
ApplicationContext extends MessageSource
- getMessage(String code, Object[] args, String, default, Locale, loc)
- ...
스프링 부트를 사용한다면 별다른 설정 필요없이 messages.properties 사용할 수 있음
- messages.properties
- messages_ko_kr.properties
- ...
@Component
public class AppRunner implements ApplicationRunner {
@Autowired
MessageSource messageSource;
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println(messageSource.getClass());
System.out.println(messageSource.getMessage("greeting", new String[]{"seunghan"}, Locale.getDefault() ));
System.out.println(messageSource.getMessage("greeting", new String[]{"seunghan"}, Locale.KOREA ));
System.out.println(messageSource.getMessage("greeting", new String[]{"seunghan"}, Locale.US ));
}
}
Locale 을 디폴트로 줬는데 안녕, 이라고 나오는 이유는 현재 시스템의 언어가 KR로 되어있어서 그렇다.
이름의 설명은 아래를 참조하면 된다.
{basename}.properties |
Default Message로 시스템의 언어 및 지역에 맞는 Property 파일이 존재하지 않을 경우 사용 |
{basename}_en.properties |
시스템 언어 코드가 영어일 때 사용 |
{basename}_ko.properties |
시스템 언어 코드가 한글일 때 사용 |
{basename}_en_UK.properties |
시스템 언어 코드가 영어일때 영국(국가코드)을 위한 메시지 |
릴로딩 기능이 있는 메시지 소스 사용하기
@Bean
public MessageSource messageSource(){
var messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath:/messages");
messageSource.setDefaultEncoding("UTF-8");
messageSource.setCacheSeconds(3);
return messageSource;
}
https://hannamedia.tistory.com/81
자바 var 변수형 사용가능
var 타입 변수는 자바 jdk10 이상부터 사용 가능하다.
message를 1초마다 화면에 찍는다.
@Component
public class AppRunner implements ApplicationRunner {
@Autowired
MessageSource messageSource;
@Override
public void run(ApplicationArguments args) throws Exception {
while (true){
System.out.println(messageSource.getMessage("greeting", new String[]{"seunghan"}, Locale.KOREA ));
System.out.println(messageSource.getMessage("greeting", new String[]{"seunghan"}, Locale.US ));
Thread.sleep(1000l);//1초 마다 찍는다.
}
}
}
@SpringBootApplication
public class Demospring51Application {
public static void main(String[] args) {
SpringApplication.run(Demospring51Application.class, args);
}
@Bean
public MessageSource messageSource(){
var messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath:/messages");//클래스패스 기준으로 messages를 읽는다.
messageSource.setDefaultEncoding("UTF-8");//한글이 깨지지 않도록
messageSource.setCacheSeconds(3);//캐싱시간을 최대 3초로 제한.
return messageSource;
}
}
이때 중간에 messages.properties 파일을 수정하면 아래와 같이 바뀌게 된다. (꼭 빌드를 해줘야함)
반응형