spring提供了三个MessageSource实现
- ResourceBundleMessageSource
- ReloadableResourceBundleMessageSource
- StaticMessageSource
要利用ApplicationContext对MessageSource的支持,必须定义一个MessageSource bean,并且命名为messageSource
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd">
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource"
p:basenames-ref="basenames"/>
<util:list id="basenames">
<value>buttons</value>
<value>labels</value>
</util:list>
</beans>
package com.apress.prospring5.ch4;
import java.util.Locale;
import org.springframework.context.support.GenericXmlApplicationContext;
public class MessageSourceDemo {
public static void main(String... args) {
GenericXmlApplicationContext ctx = new GenericXmlApplicationContext();
ctx.load("classpath:spring/app-context-xml.xml");
ctx.refresh();
Locale english = Locale.ENGLISH;
Locale german = new Locale("de", "DE");
System.out.println(ctx.getMessage("msg", null, english));
System.out.println(ctx.getMessage("msg", null, german));
System.out.println(ctx.getMessage("nameMsg", new Object[] { "John",
"Mayer" }, english));
System.out.println(ctx.getMessage("nameMsg", new Object[] { "John",
"Mayer" }, german));
ctx.close();
}
}
labels_en.properties文件
msg=Mein dummer Mund hat mich in Schwierigkeiten gebracht
nameMsg=Mein Name ist {0} {1}
labels_en.properties文件
msg=My stupid mouth has got me in trouble
nameMsg=My name is {0} {1}