오늘 옆자리 신입분이 질문을 하셨다.
"다국어 처리를 하는 중인데, properties 에 있는 내용들을 Controller에서 쓸 수는 없나요?"
Controller 단에서 작업시에 환경(로컬, 개발)마다 다른 작업을 하려고 할때는
env(Environment, 환경변수)를 통해 구분했었다.
환경변수 관련해서는 구글링 해보면 좋을 것 같다.
MessageSource 객체를 이용하여 properties 파일을 등록해주면
Spring message 를 사용 가능하다.
ResourceBundleMessageSource 와 ReloadableResourceBundleMessageSource 가 있는데
후자는 서버를 가동되는 중에도 수정이 가능하다는 점이 있다.
자세한 내용은 구글링 해보면 좋을 것 같다.
Spring boot가 아닌 경우
MessageSource 를 bean 등록 해주어야 한다.
1. xml 사용
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basenames">
<list>
<value>/WEB-INF/messages/messages</value>
<value>/WEB-INF/messages/messages_ko</value>
<value>/WEB-INF/messages/messages_en</value>
</list>
</property>
<property name="cacheSeconds" value="0" />
<property name="defaultEncoding" value="UTF-8" />
</bean>
<bean id="messageSourceAccessor" class="org.springframework.context.support.MessageSourceAccessor">
<constructor-arg ref="messageSource" />
</bean>
작성해놓은 properties의 경로를 <value>안에 작성해주면 된다.
2. Java 사용
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource ms = new ReloadableResourceBundleMessageSource();
ms.setBasenames("/WEB-INF/messages/messages_ko", "/WEB-INF/messages/messages_en");
return ms;
}
필자는 ReloadableResourceBundleMessageSource 를 사용했다.
* Spring boot의 경우
ResourceBundleMessageSource가 자동으로 bean으로 등록이 되어서
따로 bean 등록을 하지않고도 사용이 가능하다고 한다.
(ReloadableResourceBundleMessageSource 를 사용하려면 bean 을 등록해줘야 하지 않을까 싶다.)
properties가 아래와 같이 작성됐다고 해보자
#### messages_ko.properties ####
sayhi="안녕"
#### messages_en.properties ####
sayhi="hi"
아래처럼 MessageSource를 주입받아 print 해보면
@Autowired
MessageSource messageSource ;
@Override
public void msTest(){
System.out.println(messageSource.getMessage("sayhi", null, Locale.KOREA));
System.out.println(messageSource.getMessage("sayhi", null, Locale.US));
}
getMessage 의 두번째 null 값은 이 분의 글을 참고하면 될 것 같다.
아래처럼 출력되는걸 확인할 수 있다.
안녕
hi
'개발자의 삶 > Spring' 카테고리의 다른 글
[Spring] Password Encoder (비밀번호 암호화) (0) | 2022.08.24 |
---|---|
[Spring boot] 프로젝트 생성 및 Hello world (feat, spring security) (0) | 2021.02.25 |