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!
你好,世界!
你好,世界!

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

相关推荐
乌日尼乐2 小时前
【Java基础整理】Java字符串处理,String、StringBuffer、StringBuilder
java·后端
全栈独立开发者2 小时前
点餐系统装上了“DeepSeek大脑”:基于 Spring AI + PgVector 的 RAG 落地指南
java·人工智能·spring
dmonstererer2 小时前
【k8s设置污点/容忍】
java·容器·kubernetes
super_lzb2 小时前
mybatis拦截器ParameterHandler详解
java·数据库·spring boot·spring·mybatis
程序之巅2 小时前
VS code 远程python代码debug
android·java·python
我是Superman丶2 小时前
【异常】Spring Ai Alibaba 流式输出卡住无响应的问题
java·后端·spring
墨雨晨曦882 小时前
Nacos
java
invicinble2 小时前
seata的认识与实际开发要做的事情
java
乌日尼乐3 小时前
【Java基础整理】Java多线程
java·后端
2501_941800883 小时前
从服务注册发现到动态调度的互联网工程语法实践与多语言探索
spring