当前位置: 首页 > news >正文

Springboot 基于MessageSource配置国际化

1. 国际化的基本配置
package com.collmall.config;import org.springframework.boot.SpringApplication;import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.support.ResourceBundleMessageSource;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.i18n.CookieLocaleResolver;
import java.util.Locale;public class I18nConfig {@Beanpublic MessageSource messageSource() {ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();// 配置路径messageSource.setBasename("i18n.messages");messageSource.setDefaultEncoding("UTF-8");return messageSource;}@Beanpublic LocaleResolver localeResolver() {CookieLocaleResolver resolver = new CookieLocaleResolver();resolver.setDefaultLocale(Locale.CHINA);resolver.setCookieName("lang");return resolver;}
}

不想用以上代码中写死的配置,也可以通过配置文件进行配置: 如下

# 配置MessageSource
spring:messages:
#   文件类路径位置,文件名保留basename: messages/messages
#    编码语言encoding: UTF-8
#    在未查询到时是否使用默认设置的messageuse-code-as-default-message: true
2. 国际化的配置文件

在这里插入图片描述
以 中文和英文举例:

messages_en_US.properties

msg.activity= activity participation and statistics

messages_zh_CN.properties

msg.activity=中文活动参与和统计

在资源文件图片中Resource Bundle 'messages’文件夹是创建多个message_language_country.properties文件时IDEA自动创建的

3. 编写接口用于测试
package com.collmall.document.controller.i18n;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.LocaleResolver;import javax.servlet.http.HttpServletRequest;
import java.util.Locale;@RestController
public class I18nController {@Autowiredprivate MessageSource messageSource;@Autowiredprivate LocaleResolver localeResolver;@GetMapping("/getMessage")public String getMessage(HttpServletRequest request) {//国际化语言Locale locale = localeResolver.resolveLocale(request);return messageSource.getMessage("msg.activity", null, locale);}
}
4. 测试用例
 #验证中文请求
curl -H "Accept-Language: zh-CN" http://localhost:8080/getMessage# 验证英文请求
curl -H "Accept-Language: en-US" http://localhost:8080/getMessage

已注释掉spring.mvc.locale=zh_CN配置
系统现在会根据请求自动选择语言环境
语言解析优先级:

URL参数?language=xx_XX(最高优先级)
Accept-Language请求头
JVM默认语言环境(最低优先级)

已添加的配置:

CookieLocaleResolver作为默认的LocaleResolver实现
设置默认语言环境为Locale.CHINA(zh_CN)
使用"lang"作为存储语言的cookie名称
语言解析流程:

优先从cookie获取语言设置
如果没有cookie,使用默认的Locale.CHINA
仍然支持通过Accept-Language头覆盖

# 测试默认中文
curl http://localhost:8080/getMessage# 测试cookie语言设置
curl -H "Cookie: lang=en_US" http://localhost:8080/getMessage

扩展性: 如需改为Session存储,只需将CookieLocaleResolver替换为SessionLocaleResolver:

@Bean
public LocaleResolver localeResolver() {SessionLocaleResolver resolver = new SessionLocaleResolver();resolver.setDefaultLocale(Locale.CHINA);return resolver;
}

已添加CookieLocaleResolver作为默认实现

配置了合理的默认语言环境(zh_CN)

系统现在支持:

Cookie存储语言偏好
默认中文回退
仍然兼容Accept-Language头

# 验证默认中文
curl http://localhost:8080/getMessage# 验证cookie设置英文
curl -H "Cookie: lang=en_US" http://localhost:8080/getMessage

相关文章:

  • 玄机——某次行业攻防应急响应(带镜像)
  • 力扣-131.分割回文串
  • 72常用控件_QGridLayout的使用
  • 一个自动反汇编脚本
  • 大数据(3) 分布式文件系统HDFS
  • LLMs 系列科普文(15)
  • 第13次01:广告及商品数据呈现
  • MS8312A 车规 精密、低噪、CMOS、轨到轨输入输出运算放大器,用于传感器、条形扫描器
  • 2025-06-08 思考-人被基因和社会关系双重制约
  • 打卡day48
  • FlexRay总线
  • DAY 45 Tensorboard使用介绍
  • MATLAB R2025a|Win中文|仿真建模|安装教程
  • Java中线程的常用方法
  • 批量修改文件夹名 修改文件夹名
  • Python初体验学习笔记
  • 深入解析机器学习的心脏:损失函数及其背后的奥秘
  • 第11篇:数据库中间件系统可配置化设计与动态规则加载机制
  • leetcode.多数元素
  • C语言中的文件操作
  • 松山湖网站建设/sem推广案例
  • 国家城乡建设网站/微信seo排名优化软件
  • b2b网站怎么做关键词优化/seo 优化教程
  • 英文网站建设图片/怎么免费注册域名
  • 视频上到什么地方可以做网站链接/重要新闻今天8条新闻
  • 免费ppt模板在线下载/seo内容优化方法