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;
相关推荐
青云交19 小时前
Java 大视界 -- 基于 Java 的大数据可视化在城市空气质量监测与污染溯源中的应用
java·spark·lstm·可视化·java 大数据·空气质量监测·污染溯源
森语林溪20 小时前
大数据环境搭建从零开始(十七):JDK 17 安装与配置完整指南
java·大数据·开发语言·centos·vmware·软件需求·虚拟机
郝开20 小时前
Spring Boot 2.7.18(最终 2.x 系列版本)1 - 技术选型:连接池技术选型对比;接口文档技术选型对比
java·spring boot·spring
小猪咪piggy21 小时前
【项目】小型支付商城 MVC/DDD
java·jvm·数据库
知兀21 小时前
【Spring/SpringBoot】SSM(Spring+Spring MVC+Mybatis)方案、各部分职责、与Springboot关系
java·spring boot·spring
向葭奔赴♡21 小时前
Spring IOC/DI 与 MVC 从入门到实战
java·开发语言
早退的程序员21 小时前
记一次 Maven 3.8.3 无法下载 HTTP 仓库依赖的排查历程
java·http·maven
向阳而生,一路生花21 小时前
redis离线安装
java·数据库·redis
Tigshop开源商城系统21 小时前
Tigshop 开源商城系统 php v5.1.9.1版本正式发布
java·大数据·开源·php·开源软件
2401_8414956421 小时前
【数据结构】基于BF算法的树种病毒检测
java·数据结构·c++·python·算法·字符串·模式匹配