Spring MVC(三) 国际化


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

1、添加相关依赖

如果是Maven项目中,可以在pom.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

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

方式二:ResourceBundleMessageSource

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

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

@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工具类

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、在代码中直接使用

MessageUtil.getMessage("001",Locale.ENGLISH);
MessageUtil.getMessage("001",Locale.CHINA);
MessageUtil.getMessage("001",Locale.getDefault());

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

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

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值