반응형
ApplicationContext 에서 상속하는 MessageSource 인터페이스를 이용!
국제화(i18n) 기능을 제공하는 인터페이스
1. 메시지 소스 파일 생성
- 리소스 아래에 messages.properties / messages_ko_KR.properties 파일 생성
스프링 부트를 사용하면 Resource Bundle 이 빈으로 등록 되어 별다른 설정 없이 messages.priperties 파일을 사용 가능하다.
- message.properties 파일 내용
2. 메시지 호출
package com.bpkim.demospring51;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.context.ApplicationContext;
import org.springframework.context.MessageSource;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.Locale;
@Component
public class AppRunner implements ApplicationRunner {
@Autowired
MessageSource messageSource;
@Override
public void run(ApplicationArguments args) throws Exception{
System.out.println(messageSource.getMessage("greeting", new String[]{"bpkim"}, Locale.KOREA));
System.out.println(messageSource.getMessage("greeting", new String[]{"bpkim"}, Locale.getDefault()));
}
}
- 실행결과
3. 릴로딩 기능이 있는 메시지 소스 사용하기
- 메시지를 읽어오도록 빈 등록
package com.bpkim.demospring51;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.support.GenericApplicationContext;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
@SpringBootApplication
@PropertySource("classpath:/app.properties")
public class Demospring51Application {
public static void main(String[] args) {
SpringApplication.run(Demospring51Application.class, args);
}
// 3초마다 메시지를 읽어올 빈 등록
@Bean
public MessageSource messageSource(){
ReloadableResourceBundleMessageSource messageSource =new ReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath:/messages");
messageSource.setDefaultEncoding("UTF-8");
messageSource.setCacheSeconds(3);
return messageSource;
}
- 보여주기
package com.bpkim.demospring51;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.context.ApplicationContext;
import org.springframework.context.MessageSource;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
import java.util.Locale;
@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[]{"bpkim"}, Locale.KOREA));
System.out.println(messageSource.getMessage("greeting", new String[]{"bpkim"}, Locale.getDefault()));
Thread.sleep(1000l);
}
}
}
- 실행
실행 도중 message_ko_KR.properties 파일을 변경 > 빌드 하여 확인 해본다.
반응형
'개발 > Spring' 카테고리의 다른 글
Ioc 컨테이너 - ResourceLoader (0) | 2021.04.22 |
---|---|
IoC - ApplicationEventPublisher (0) | 2021.04.11 |
IoC - Environment - 프로퍼티 (0) | 2021.04.11 |
IoC - Environment - 프로파일 (0) | 2021.04.10 |
IoC - 빈의 스코프 (0) | 2021.04.06 |