오늘은 MessageSource의 사용법에 대해 정리해보려고 합니다.
바로 패키지 만들러 갑시다~
testmessage_en.properties
member.name=java
member.birthplace=usa
member.hobby=basketball,game
member.age={0}:teenagers
title=[member Information]
testmessage_ko.properties
member.name=\uC790\uBC14
member.birthplace=\uB300\uD55C\uBBFC\uAD6D
member.hobby=\uB18D\uAD6C,\uAC8C\uC784
member.age={0}:\uCCAD\uC18C\uB144
title=[\uD68C\uC6D0\uC815\uBCF4]
여기 부분은 name부터 각각 자바, 대한민국, (농구,게임), 청소년, 회원정보를 적어주세요
그럼 자동으로 저렇게 바뀝니다.
MemberInfo.java
package com.test03;
import java.util.Locale;
import org.springframework.context.MessageSource;
import org.springframework.context.MessageSourceAware;
public class MemberInfo implements MessageSourceAware {
private MessageSource message;
@Override
public void setMessageSource(MessageSource messageSource) {
System.out.println("컨테이너가 메세지 설정을 수행중...");
this.message = messageSource;
}
public void display(Locale locale) {
String name = message.getMessage("member.name", null, locale);
String birthplace = message.getMessage("member.birthplace", null, locale);
String hobby = message.getMessage("member.hobby", null, locale);
String age = message.getMessage("member.age", new Object[] {"13"}, locale);
System.out.println(locale);
System.out.println(name);
System.out.println(birthplace);
System.out.println(hobby);
System.out.println(age);
}
}
MTest.java
package com.test03;
import java.util.Locale;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MTest {
public static void main(String[] args) {
ApplicationContext factory = new ClassPathXmlApplicationContext("com/test03/applicationContext.xml");
MemberInfo member = (MemberInfo) factory.getBean("member");
int num = (int)(Math.random()*2);
if (num == 0) {
String msg = factory.getMessage("title", null, "기본 메세지", Locale.getDefault());
System.out.println(msg);
member.display(Locale.getDefault());
} else {
String msg = factory.getMessage("title", null, "default message", Locale.ENGLISH);
System.out.println(msg);
member.display(Locale.ENGLISH);
}
}
}
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="com/test03/testmessage" />
</bean>
<bean id="member" class="com.test03.MemberInfo"/>
</beans>
코드 실행결과 (2개가 랜덤하게 나옵니다.)
MessageSource는 ResourceBundleMessageSource와 MessageSourceAware를 꼭 같이 사용해야 한다.
applicationContext에서 messageSource의 basename이 testmessage로 되어있는데,
이 말은 ResourceBundleMessageSource가 testmessage_ko.properties, testmessage_en.properties를 가지고 와서 MessageSourceAware에 전달해준다는 뜻이다.
MessageSourceAware는 그 전달받은 파일을 setMessageSource( )로 전달한다.
( => 메시지 국제화를 위해서 사용한다. 영어뿐 아니라 일본어, 프랑스어 ... 등 여러 가지 언어로도 나타낼 수 있다.)
이후에는 MTest에서 이 객체를 0일 때 한글, 1일 때 영어로 된 properties를 가져와서 출력시킨다.
**만일 저 위에 코드 그대로 작성했는데 한글이 안나오고 영어만 나올 땐 getDefault(컴퓨터 기본설정)가 영어로 되어있는 경우입니다. 설정에서 한글로 바꿔주시면 위 그림처럼 한글과 영어가 랜덤으로 출력됩니다.
'Java > Spring' 카테고리의 다른 글
[Spring] 11. Annotation - Component (3) | 2021.06.26 |
---|---|
[Spring] 10. Annotation - autowired (0) | 2021.06.25 |
[Spring] 08. <bean> 속성 사용하기 - Autowire (0) | 2021.06.23 |
[Spring] 07. 객체의 생성 타이밍 ( + lazy-init) (0) | 2021.06.21 |
[Spring] 06. applicationContext의 내부구조(Factory 패턴) (0) | 2021.06.20 |