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;
相关推荐
AresXue3 小时前
推广一下自己刚撸的 IDEA 插件—Bean Copy 助手
java
会跑的葫芦怪3 小时前
RabbitMQ全面详解:从核心概念到企业级应用
java·分布式·rabbitmq
尤老师FPGA4 小时前
使用ZYNQ芯片和LVGL框架实现用户高刷新UI设计系列教程(第三十二讲)
android·java·ui
战族狼魂4 小时前
基于python+Java的二手车与奔驰销量数据可视化平台
java·数据库·python
paj1234567894 小时前
elasticsearch-8.12.2集群部署
java·elasticsearch
1candobetter4 小时前
JAVA后端开发——软件分层架构中的“管道井”原则
java·开发语言·架构
Seven974 小时前
Spring 事务、循环依赖
java
聪明的笨猪猪4 小时前
Java Redis “核心应用” 面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
为java加瓦5 小时前
Spring 方法注入机制深度解析:Lookup与Replace Method原理与应用
java·数据库·spring