Spring MVC(三) 国际化

SpringMVC 国际化

随着全球化的加速发展,Web应用的多语言支持变得越来越重要。对于开发者来说,如何实现应用的国际化成为了一个不可忽视的问题。作为Java Web开发的重要框架,Spring MVC在处理国际化方面有着丰富的功能和灵活的解决方案。本文将探讨Spring MVC的国际化部分内容,并通过自己的在工作中的真实使用体验来帮助大家理解和应用这些功能。

1、添加相关依赖

如果是Maven项目中,可以在pom.xml文件中添加以下依赖:

xml 复制代码
<dependency>  
    <groupId>org.springframework</groupId>  
    <artifactId>spring-webmvc</artifactId>  
    <version>5.3.10</version>  
</dependency>  
<dependency>  
    <groupId>org.springframework</groupId>  
    <artifactId>spring-context-support</artifactId>  
    <version>5.3.10</version>  
</dependency>

2、配置MessageSourceBean

在Spring的配置文件applicationContext.xml中,可以通过以下两种方式进行注入并加载资源文件。

方式一:ReloadableResourceBundleMessageSource

xml 复制代码
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">  
	    <property name="basename" value="classpath:messages/messages"/> <!-- 消息资源文件的基本名称 -->  
	    <property name="defaultEncoding" value="UTF-8"/> <!-- 默认编码 -->  
</bean>

方式二:ResourceBundleMessageSource

xml 复制代码
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">  
	    <property name="basename" value="messages/messages"/> <!-- 消息资源文件的基本名称 -->  
	    <property name="defaultEncoding" value="UTF-8"/> <!-- 默认编码 -->  
</bean>

另外还可以通过代码的方式进行bean的引入

java 复制代码
@Bean  
public MessageSource messageSource() {  
    ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();  
    messageSource.setBasename("classpath:messages/messages"); // 消息资源文件的位置  
    messageSource.setDefaultEncoding("UTF-8"); // 设置默认编码  
    return messageSource;  
}

3、添加消息资源文件

src/main/resources的位置下创建消息资源文件夹messages,用于存储不同语言的消息。

例如,在messages文件夹下新建messages_en.properties的英文消息资源文件和messages_zh_CN.properties的中文消息资源文件。在文件中定义消息键和对应的值。 注意:存放位置可根据自己项目规范进行修改

英文 messages_en.properties

复制代码
001=hello word!

中文 messages_zh_CN.properties

复制代码
001=你好,世界!

默认 messages.properties

复制代码
001=你好,世界!

4、消息工具类(代码应用)

创建MessageUtil.java工具类

java 复制代码
package com.cloud.core.util;

import java.util.Locale;

import org.springframework.context.MessageSource;

import com.cloud.core.holder.ContextHolder;

public class MessageUtil {

	private static MessageSource messageSource;

	//ContextHolder为Spring容器上下文信息类,可通过继承ContextLoaderListener进行获取
	static {
		messageSource = (MessageSource) ContextHolder.getBean("messageSource");
	}
	/**
	 * @Comments :获取消息
	 * @param code 在*.properties文件中的消息键
	 * @param locale 本地化语言,也可根据需要进行扩展
	 * @return
	 * @Author :程序员云笔记
	 * @Date :2024年1月5日 上午11:00:29
	 */
	public static String getMessage(String code, Locale locale) {
		return messageSource.getMessage(code, null, locale);
	}
	/**
	 * @Comments :获取消息
	 * @param code 在*.properties文件中的消息键
	 * @param args 参数数组,其中的参数将被填充,用于替换消息中的{0}、{1},详见java.text.MessageFormat
	 * @param locale 本地化语言,也可根据需要进行扩展
	 * @return
	 * @Author :程序员云笔记
	 * @Date :2024年1月5日 上午11:01:30
	 */
	public static String getMessage(String code, Object[] args, Locale locale) {
		return messageSource.getMessage(code, args, locale);
	}
}

//以下是此工具类用到的部分代码
public class WebAppContextListener extends ContextLoaderListener {
	
	public void contextDestroyed(ServletContextEvent event) {

	}

	public void contextInitialized(ServletContextEvent event) {
		super.contextInitialized(event);
		WebApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(event.getServletContext());
		ContextHolder.setContext(context);
	}
}

public class ContextHolder {
	private static ApplicationContext context;

	public static void setContext(ApplicationContext ctx) {
		if(context == null){
			context = ctx;
		}
	}
	
	public static Object getBean(String name) {
		return context.getBean(name);
	}
}

5、在代码中直接使用

java 复制代码
MessageUtil.getMessage("001",Locale.ENGLISH);
MessageUtil.getMessage("001",Locale.CHINA);
MessageUtil.getMessage("001",Locale.getDefault());

//输出以下消息
hello word!
你好,世界!
你好,世界!

以上就是本次项目国际化所有代码,有不足之处欢迎大家指导。

相关推荐
东阳马生架构1 分钟前
Sentinel源码—7.参数限流和注解的实现一
java·sentinel
李白的粉9 分钟前
基于springboot的在线教育系统
java·spring boot·毕业设计·课程设计·在线教育系统·源代码
码农10087号22 分钟前
Hot100方法及易错点总结2
java
iuyou️1 小时前
Spring Boot知识点详解
java·spring boot·后端
北辰浮光1 小时前
[Mybatis-plus]
java·开发语言·mybatis
一弓虽1 小时前
SpringBoot 学习
java·spring boot·后端·学习
南客先生1 小时前
互联网大厂Java面试:RocketMQ、RabbitMQ与Kafka的深度解析
java·面试·kafka·rabbitmq·rocketmq·消息中间件
ai大佬1 小时前
Java 开发玩转 MCP:从 Claude 自动化到 Spring AI Alibaba 生态整合
java·spring·自动化·api中转·apikey
Mr__Miss2 小时前
面试踩过的坑
java·开发语言
爱喝一杯白开水2 小时前
POI从入门到上手(一)-轻松完成Apache POI使用,完成Excel导入导出.
java·poi