SpringResourceBundleMessageSource示例(转)
对于支持国际化的应用程序,它需要能够为不同的语言环境解析文本消息。Spring的应用程序上下文能够通过键解析目标语言环境的文本消息。通常,一个语言环境的消息应存储在一个单独的属性文件中。此属性文件称为资源包。
MessageSource
是一个接口,它定义了几种解析消息的方法。该ApplicationContext
接口扩展了此接口,以便所有应用程序上下文都能够解析文本消息。
应用程序上下文将消息解析委托给具有确切名称的bean
messageSource
。ResourceBundleMessageSource
是最常见的MessageSource
实现,它解决来自不同语言环境的资源包的消息。
使用ResourceBundleMessageSource解析文本消息
例如,您可以messages_en_US.properties
为美国的英语创建以下资源包。资源包将从类路径的根目录加载。
1)创建资源包
messages_en_US.properties
在spring应用程序的类路径中创建文件名。
messages_en_US.properties
msg.text=Welcome to howtodoinjava.com
2)配置ResourceBundleMessageSource bean定义
现在将ResourceBundleMessageSource
类配置为bean名称"messageSource"
。此外,您必须指定资源包的基本名称ResourceBundleMessageSource
。
applicationContext.xml中 <bean id="messageSource"class="org.springframework.context.support.ResourceBundleMessageSource"> <property name="basename"> <value>messages</value> </property> </bean>
资源包查找顺序
- 对于此
messageSource
定义,如果您查找其首选语言为英语的美国语言环境的文本消息messages_en_US.properties
,则将首先考虑与语言和国家/地区匹配的资源包。 - 如果没有此类资源包或无法找到该消息,则
messages_en.properties
仅考虑与该语言匹配的消息。 - 如果仍无法找到此资源包,则
messages.properties
最终将选择所有语言环境的默认值。
演示 - 如何使用MessageSource
1)直接获取消息
现在检查是否可以加载消息,运行以下代码:
TestSpringContext.java public class TestSpringContext { @SuppressWarnings("resource") public static void main(String[] args) throws Exception { ApplicationContext context = newClassPathXmlApplicationContext("applicationContext.xml"); String message = context.getMessage("msg.text", null, Locale.US); System.out.println(message); } }
输出:
Welcome to howtodoinjava.com
2)在bean中实现MessageSourceAware接口
很好,所以我们能够解决消息。但是,我们在这里直接访问,ApplicationContext
所以看起来很容易。如果我们想要访问某些bean实例中的消息,那么我们需要实现ApplicationContextAware
接口或MessageSourceAware
接口。
像这样的东西:
EmployeeController.java public class EmployeeController implements MessageSourceAware { private MessageSource messageSource; public void setMessageSource(MessageSource messageSource) { this.messageSource = messageSource; } //Other code }
现在,您可以使用此messageSource
实例来检索/解析资源文件中定义的文本消息。
转自:https://blog.csdn.net/u010675669/article/details/86488510