728x90
MessageSourceAware는 번들이 지정된 properties 파일을 setMessageSource()로 전달한다. -> 메세지 국제화를 위해 사용
ResourceBundleMessageSource 의 setBaseName()을 통해 전달받은 파일을, setMessageSource()를 자동으로 호출하여 매핑하는 역할을 한다.
ResourceBundleMessageSource와 MessageSourceAware는 쌍으로 사용한다.
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]
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);
}
}
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>
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);
}
}
}
실행결과
위의 코드에서는 언어를 두가지로 밖에 설정을 안해 놓았지만 언어 설정에서 많이 사용되는 코드인듯합니다!
랜덤으로 설정했기에 실행할때마다 결과가 바뀌지만 랜덤이 아니라 다른 설정을 통해 선택을 통한 언어 설정도 가능합니다!
728x90
'Java 관련 > Spring Legecy' 카테고리의 다른 글
[Spring] Annotation(@Autowired, @Qualifier) (0) | 2022.03.22 |
---|---|
[Spring] Spring Annotation(스프링 어노테이션) (0) | 2022.03.21 |
[Spring] DI / IoC (Bean 객체_10) - autowire (0) | 2022.03.19 |
[Spring] DI / IoC (Bean 객체_09) - 호출 (0) | 2022.03.18 |
[Spring] DI / IoC (Bean 객체 생성_08) - <bean>태그 속성 (0) | 2022.03.17 |