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;
相关推荐
毕设源码-朱学姐6 小时前
【开题答辩全过程】以 基于JavaWeb的网上家具商城设计与实现为例,包含答辩的问题和答案
java
C雨后彩虹7 小时前
CAS与其他并发方案的对比及面试常见问题
java·面试·cas·同步·异步·
java1234_小锋8 小时前
Java高频面试题:SpringBoot为什么要禁止循环依赖?
java·开发语言·面试
2501_944525548 小时前
Flutter for OpenHarmony 个人理财管理App实战 - 账户详情页面
android·java·开发语言·前端·javascript·flutter
计算机学姐8 小时前
基于SpringBoot的电影点评交流平台【协同过滤推荐算法+数据可视化统计】
java·vue.js·spring boot·spring·信息可视化·echarts·推荐算法
Filotimo_9 小时前
Tomcat的概念
java·tomcat
索荣荣9 小时前
Java Session 全面指南:原理、应用与实践(含 Spring Boot 实战)
java·spring boot·后端
Amumu121389 小时前
Vue Router(二)
java·前端
念越10 小时前
数据结构:栈堆
java·开发语言·数据结构