首页 > 其他分享 >SpringBoot i18n 配置

SpringBoot i18n 配置

时间:2023-05-29 22:25:42浏览次数:57  
标签:国际化 zh SpringBoot language 配置 messages i18n CN

概述

由于项目需要进行国际化提示,所以做了一下SpringBoot的 i18n 的配置。有两种方式实现 i18n 的配置操作

  1. 页面每次访问后端都携带用户设定的语言类型的 i18n 国际化操作。在请求URL中设置一个字段 ?language=zh_CN 的方式实现或者请求头中设置表明语言类型都行Accept-Language: zh_CN
  2. 页面不能每次都携带用户设定的语言类型,则需要一张User表的字段language来保存用户设定的语言来进行国际化操作。主要实现思路是:User表中的新增字段 language采用字符串保存 i18n 国家语言格式(即 zh_CN、en_US等),如果用户没有指定语言时,默认为 zh_CN即可。当用户每次进行切换语言时即可进行更新或者新增操作。还可以新增一个表用于保存 i18n 的国际化内容,通过SQL的方式进行国际化设置操作也行,这样就可以不用每次都要修改或者新增配置文件再发版了----思路简单就不做演示了

实现方式

在请求URL中设置一个字段 ?language=zh_CN 的方式实现或者请求头中设置语言类型都行Accept-Language: zh_CN

新增国际化文件

在Spring Boot中国际化文件的名称默认为messages。在resources文件夹下新建一个i18n文件夹,在 i18n文件夹中依次新建messages.propertiesmessages_en_US.propertiesmessages_zh_CN.propertiesmessages_zh_TW.properties四个文件。其中messages.properties表示默认的,里面可以没有值,但必须有这样的一个文件,其他三个分别对应英文、中文简体、中文繁体。新建方式如下两图


添加配置文件设置

配置国际化文件所在的位置以及编码格式

spring:
  web:
    #设置本地语言为zh_CN
    locale: zh_CN
  messages:
    #在i18n文件下message开头的配置文件
    basename: i18n/messages
    #配置缓存的时间,单位 s
    cache-duration: 10
    #指定编码格式
    encoding: UTF-8

配置解析器

设置当前会话的默认国际化语言:初始化LocaleResolver类(该类为默认的解析器)

@Configuration
public class LocaleConfiguration {

    /**
     * 配置默认解析器。其中Locale.CHINA表示默认语言为简体中文
     */
    @Bean
    public LocaleResolver localeResolver() {
        SessionLocaleResolver localeResolver = new SessionLocaleResolver();
        localeResolver.setDefaultLocale(Locale.CHINA);

        return localeResolver;
    }
}

配置拦截器

通过拦截器来对请求的语言参数进行获取,采用默认的LocaleChangeInterceptor作为拦截器,用于指定切换国际化语言的参数名。比如当请求的URL中包含?lang=zh_CN表示读取国际化文件 messages_zh_CN.properties

@Configuration
public class WebConfiguration implements WebMvcConfigurer {

    /**
     * 默认的拦截器,其中language表示要切换语言的参数名
     *
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        LocaleChangeInterceptor localeInterceptor = new LocaleChangeInterceptor();
        localeInterceptor.setParamName("language");
        
        registry.addInterceptor(localeInterceptor);
    }
}

添加i18n工具类

@Component
public class MessageUtils {

    private static MessageSource messageSource;

    public MessageUtils(MessageSource messageSource) {
        MessageUtils.messageSource = messageSource;
    }

    /**
     * 指定语言获得单个国际化翻译值
     * @param msgKey    国际化文件key值
     * @param language  语言,格式 zh_CN
     * @param args      其他参数,可为null
     */
    public static String getMsgValueByLanguage(String msgKey, String language, Object... args) {
        String[] localeArgs = language.split(Constant.CONNECTOR);
        Locale locale = new Locale(localeArgs[0],localeArgs[1]);
        
        return messageSource.getMessage(msgKey, args, locale);
    }
}

测试

@RestController
@RequestMapping("/i18n")
public class I18nController {

    @RequestMapping("/user")
    public String getUserName() {
        String username = MessageUtils.get("username");
        System.out.println(username);
        return username;
    }
}
  1. 访问 http://localhost:8080/i18n/user 获取的是默认的messages.properties的国际化值
  2. 访问 http://localhost:8080/i18n/user?language=en_US 获取的是默认的messages_en_US.properties的国际化值

标签:国际化,zh,SpringBoot,language,配置,messages,i18n,CN
From: https://www.cnblogs.com/52-IT-y/p/17441752.html

相关文章

  • 基于JAVA的springboot+vue医院信息管理系统、医院挂号管理系统,附源码+数据库+论文+PPT
    1、项目介绍任何系统都要遵循系统设计的基本流程,本系统也不例外,同样需要经过市场调研,需求分析,概要设计,详细设计,编码,测试这些步骤,基于java语言设计并实现了医院信管系统。该系统基于B/S即所谓浏览器/服务器模式,应用java技术,选择MySQL作为后台数据库。系统主要包括首页,个人中心,用户......
  • springboot集成themeleaf报Namespace 'th' is not bound问题的解决
    问题描述在我们想要在html前端页面使用th:符号时,发现他一直报错问题解决在html标签的最上方,也就是这里:加上这样一句代码:(加在html标签里面!!!)xmlns="http://www.w3.org/1999/xhtml"xmlns:th="http://www.thymeleaf.org"这样就能够解决这个问题啦!......
  • Ansible 安装与ssh密钥配置
    环境系统IP名称CentOS7.610.22.86.71管理机CentOS7.610.22.86.72被控机CentOS7.610.22.86.73被控机CentOS7.610.22.86.74被控机安装#yum源[root@localhost~]#cat/etc/yum.repos.d/epel.repo[epel]name=ExtraPackagesforEnterpriseLi......
  • Linux操作系统日志审计-关于secure和messages两个重要的日志的logrotate配置
    关于Linux操作系统中有两个日志非常的重要的,常常用来对操作系统的活动进行审计,两个日志文件分别是:/var/log/secure/var/log/messages 其中/var/log/secure是 securityandauthentication-relatedmessagesanderrors,安全与认证相关的信息和错误对于 /var/log/messages......
  • vue-cli 的配置和使用
    vue-cli介绍vue-cli是Vue.js开发的标准工具。它简化了程序员基于webpack创建工程化的Vue项目的过程。中文官网在工程化的项目中,vue要做的事情很单纯:通过main.js把App.vue渲染到index.html的指定区域中。配置和使用Vue-CLI的安装、使用及环境配置(超详细)vue项......
  • stm32环境配置---keil5
    第一步安装keil5官网下载位置填写必要信息后就可以安装core就是keil的安装位置pack就是芯片包的下载位置安装完成后会跳出这个界面,这个界面就是用来管理芯片包的,需要下载对应的芯片包才能将程序下载到板子上第二步安装芯片包如上所示,可以在对应界面中安装芯片包,也可......
  • NETCORE - Swagger配置
    NETCORE-Swagger配置 环境:WebApiNET6  配置输出文档,项目右键-> 属性-> 生成-> 输出 勾选“生成包含API文档的文件”维护生成文件名称。  2.Program.cs中的修改把原来的 builder.Services.AddSwaggerGen();  修改成:builder.Services.AddSwagge......
  • 独角数卡 搭建-邮件配置-Epusdt配置-收U详细配置
    配置独角数卡https://github.com/assimon/dujiaoka/wiki/2.x_bt_install⚠️正式上线后一定要将.env配置里面的APP_DEBUG设置为false⚠️⚠️正式上线后一定要将.env配置里面的APP_DEBUG设置为false⚠️⚠️正式上线后一定要将.env配置里面的APP_DEBUG设置为false⚠️安装宝塔(国际版宝塔:a......
  • docker-oracle;配置oracle
    地址:172.18.0.170root/cssjkyhs/yhs0527le一、安装检查uname-r:查看centos版本,root登录,如果不是root,需要前面加sudo如果之前有安装,卸载:yumremovedockerdocker-commondocker-selinuxdocker-engine二、安装docker安装需要的软件包,yum-util提供......
  • 使用H2数据库搭建springboot应用
    h2数据库有2中模型,一种是嵌入式,一种是服务端。嵌入式时,我们多个配置同一个地址就可以访问同一个数据集,服务端需要额外开启服务,再通过ip端口访问。这里我们介绍下怎么在springboot项目下开启服务端模式。1、在springboot应准备就绪后启动h2服务publicclassH2Serverimplements......