springBoot3 国际化项目实战

1 配置文件:

yml 复制代码
# Spring配置
spring:
  # 资源信息
  messages:
    # 国际化资源文件路径,如果有多个通过逗号隔开,这里的messages不是路径,而是文件名前缀
    basename: i18n/messages,i18n/modules/product/product,i18n/modules/salesOrder/salesOrder,i18n/modules/system/system
    encoding: UTF-8
    # 默认语言回滚控制
    fallback-to-system-locale: false

2 i18nConfig 配置

java 复制代码
package com.okyun.framework.config;

@Configuration
public class I18nConfig implements WebMvcConfigurer
{
    /**
     * 语言切换
     * @return
     */
    @Bean
    public LocaleResolver localeResolver()
    {
        // SessionLocaleResolver 用来解析和存储用户的 Locale 信息在会话 (session) 中
        SessionLocaleResolver slr = new SessionLocaleResolver();
        // 设置默认语言 = 简体中文,可以用 Locale.CHINA
        slr.setDefaultLocale(Constants.DEFAULT_LOCALE);
        return slr;
    }

    /**
     * LocaleChangeInterceptor: Spring 提供的用于切换 Locale 的拦截器,拦截 HTTP 请求中的参数来确定用户想要切换到的语言
     * lci.setParamName("lang"): 设置 URL 请求中的参数名为 lang
     * 即用户可以通过传递 ?lang=xx 来切换语言(如 ?lang=zh_CN 切换到简体中文,?lang=en 切换到英文)
     * @return
     */
    @Bean
    public LocaleChangeInterceptor localeChangeInterceptor()
    {
        LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
        // 参数名
        lci.setParamName("lang");
        return lci;
    }

    /**
     * WebMvcConfigurer 添加自定义拦截器
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry)
    {
        // 添加拦截器
        registry.addInterceptor(localeChangeInterceptor());
    }
}

3 封装工具类

typescript 复制代码
package com.okyun.common.utils;


public class MessageUtils
{
    /**
     * 根据消息键和参数 获取消息 委托给spring messageSource
     *
     * @param code 消息键
     * @param args 参数
     * @return 获取国际化翻译值
     */
    public static String message(String code, Object... args)
    {
        // MessageSource:Spring 的国际化资源接口,主要用于获取不同语言环境下的消息内容
        MessageSource messageSource = SpringUtils.getBean(MessageSource.class);
        // LocaleContextHolder.getLocale():从 LocaleContextHolder 中获取当前线程的 Locale(语言环境)
        return messageSource.getMessage(code, args, LocaleContextHolder.getLocale());
    }
}

4 配置国际化文件

matlab 复制代码
/src/main/resources/
├── i18n/
│   ├── messages.properties          # 默认文件
│   ├── messages_zh_CN.properties    # 中文文件
│   ├── messages_en_US.properties    # 英文文件
│   ├── messages_es_ES.properties    # 西语文件
│   └── modules/                     # 模块目录(可选)
│       ├── user.properties
│       ├── user_zh_CN.properties
│       ├── user_en_US.properties
│       ├── user_es_ES.properties
│       ├── system.properties
│       ├── system_zh_CN.properties
│       └── system_en_US.properties
│       └── system_es_ES.properties

5 项目使用

java 复制代码
// 1 响应消息
#配置语言 -zh_CN
user.token.remoteLogin=该账号异地登录,异地登陆时间:{0}!
// 使用配置
MessageUtils.message("user.token.remoteLogin", RemoteLoginTime)


// 2 导入导出
# 配置语言 -zh_CN
product.product.initStock=期初库存
# 使用配置
@Excel(name = "期初库存", i18nKey = "product.product.initStock", sort = 22
@Min(value = 0, message = "期初库存不能小于0")
private BigDecimal initStock;
相关推荐
唐青枫10 小时前
Java Flyway 实战指南:用 SQL 脚本管理数据库版本
java
huangdong_17 小时前
电商平台图片URL原图转换技术深度解析:从缩略图到高清原图的完整方案
java·后端·spring
記億揺晃着的那天17 小时前
Java 调用外部 Go 程序的实践:ProcessBuilder 在生产环境中的应用
java·golang·processbuilder
JAVA面经实录91717 小时前
Java 数据结构与算法 (终极完整学习文档)
java·数据结构·算法
JAVA面经实录91718 小时前
操作系统面试题
java·服务器·数据库·计算机网络·面试
一杯奶茶¥19 小时前
基于springboot的失物招领管理系统带万字文档 校园失物招领管理系统 失物认领管理系统java springboot vue
java·vue.js·spring boot·java项目
不能只会打代码19 小时前
边缘视频分析平台的架构设计与性能优化——从750ms到190ms的调优之路
java·spring boot·redis·性能优化·边缘计算·物联网竞赛
小刘|19 小时前
Spring AI Alibaba 集成和风天气 API 实战
java·服务器·前端
KANGBboy19 小时前
java知识五(继承)
java·开发语言
AI人工智能+电脑小能手19 小时前
【大白话说Java面试题 第117题】【并发篇】第17题:线程有几种状态,之间如何转换?
java·开发语言·面试