企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# Spring i18n – `ResourceBundleMessageSource` > [https://howtodoinjava.com/spring-core/resolving-text-messages-in-spring-resourcebundlemessagesource-example/](https://howtodoinjava.com/spring-core/resolving-text-messages-in-spring-resourcebundlemessagesource-example/) 对于支持国际化(i18n)的应用程序,它要求**能够解析不同区域设置**的文本消息。 Spring 的应用程序上下文可以通过其键解析目标区域设置的文本消息。 通常,一种语言环境的消息应存储在一个单独的属性文件中。 此属性文件称为**资源包**。 `MessageSource`是定义几种解决消息的方法的接口。 `ApplicationContext`接口扩展了此接口,以便所有应用程序上下文都能够解析文本消息。 > 应用程序上下文将消息解析委托给确切名称为`messageSource`的 Bean。 `ResourceBundleMessageSource`是最常见的`MessageSource`实现,用于解析来自不同区域的资源包中的消息。 ## 1\. 使用`ResourceBundleMessageSource`解析消息 例如,您可以为美国英语创建以下资源包`messages_en_US.properties`。 **资源包将从类路径的根目录加载**。 #### 1.1. 创建资源包 在 spring 应用程序的类路径中创建文件名`messages_en_US.properties`。 `messages_en_US.properties` ```java msg.text=Welcome to howtodoinjava.com ``` #### 1.2. 配置`ResourceBundleMessageSource` bean 现在将`ResourceBundleMessageSource`类配置为 bean 名称`"messageSource"`。 另外,您必须为`ResourceBundleMessageSource`指定资源包的基本名称。 `applicationContext.xml` ```java <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <property name="basename"> <value>messages</value> </property> </bean> ``` ## 2\. 资源包查找顺序 1. 对于此`messageSource`定义,如果您查找首选语言为英语的美国语言环境的文本消息,则将首先考虑与语言和国家/地区匹配的资源包`messages_en_US.properties`。 2. 如果没有此类资源包或找不到消息,则将考虑仅与该语言匹配的一个`messages_en.properties`。 3. 如果仍然找不到此资源包,则最终将选择所有语言环境的默认`messages.properties`。 ## 3\. 演示 – 如何使用`MessageSource` #### 3.1. 直接获取消息 现在要检查是否可以加载消息,请运行以下代码: `TestSpringContext.java` ```java public class TestSpringContext { @SuppressWarnings("resource") public static void main(String[] args) throws Exception { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); String message = context.getMessage("msg.text", null, Locale.US); System.out.println(message); } } ``` 输出: `Console` ```java Welcome to howtodoinjava.com ``` #### 3.2. 在 bean 中实现`MessageSourceAware`接口 很好,因此我们能够解析消息。 但是,这里我们直接访问`ApplicationContext`,因此看起来很简单。 如果要在某个 bean 实例中访问消息,则需要实现`ApplicationContextAware`接口或`MessageSourceAware`接口。 像这样: `EmployeeController.java` ```java public class EmployeeController implements MessageSourceAware { private MessageSource messageSource; public void setMessageSource(MessageSource messageSource) { this.messageSource = messageSource; } //Other code } ``` 现在,您可以使用此`messageSource`实例来检索/解析资源文件中定义的文本消息。 学习愉快!