i18n实现SpringBoot后端多语言化(前后端分离)_spring boot 多语言-程序员宅基地

技术标签: spring  spring boot  java  SpringBoot  

最近注意到许多项目都是支持语种切换的,于是用springboot实现了前后端分离的语种切换

依赖

在pom.xml中添加如下依赖

		<dependency>
			<groupId>org.webjars.bower</groupId>
			<artifactId>jquery-i18n-properties</artifactId>
			<version>1.2.7</version>
		</dependency>

开始配置

说到配置就令人头疼,所幸的是springboot极大的简化了开发中繁琐的配置。


1.创建.propertis语言包

  • message.properties
  • message_en_US.properties
  • message_zh_CN.properties
    命名规则:前缀_语种类型.properties,其中message.properties文件内容可为空。但必须定义该文件优先级最高

在这里插入图片描述

添加内容

在这里插入图片描述
在这里插入图片描述

由于文件格式非UTF-8,我这里将汉字转为了unicode字符,但这并不影响读取。message.properties中未定义任何内容。

2.在application.properties中添加如下内容

	#i18n
	spring.messages.basename=static.i18n.message
	spring.messages.cache-duration=3600
	spring.messages.encoding=UTF-8

其中最主要的是basename,指定了语言包所在位置。basename的值结尾最后需要加上properties语言包文件名的前缀

3.创建解析器和拦截器

import java.util.Locale;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;

@Configuration
public class LocaleConfig {
    
	/** 
 	*	默认解析器 其中locale表示默认语言,当请求中未包含语种信息,则设置默认语种
 	*	当前默认为CHINA,zh_CN
 	*/
	@Bean
	public SessionLocaleResolver localeResolver() {
    
		SessionLocaleResolver localeResolver = new SessionLocaleResolver();
		localeResolver.setDefaultLocale(Locale.CHINA);
		return localeResolver;
	}

	/** 
	   *  默认拦截器 其中lang表示切换语言的参数名 
	   *  拦截请求,获取请求参数lang种包含的语种信息并重新注册语种信息
	 */
	@Bean
	public WebMvcConfigurer localeInterceptor() {
    
		return new WebMvcConfigurer() {
    
			@Override
			public void addInterceptors(InterceptorRegistry registry) {
    
				LocaleChangeInterceptor localeInterceptor = new LocaleChangeInterceptor();
				localeInterceptor.setParamName("lang");
				registry.addInterceptor(localeInterceptor);
			}
		};
	}
}

localeResolver其中定义了默认语种。localeInterceptor前端请求参数lang中包含指定语种时,将该语种注册到Locale中


4.编写控制器


import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/domain")
//解决跨域问题:指定允许跨域的域名
@CrossOrigin(origins = "http://test.do")
public class DomainControl {
    

	@Autowired
	private MessageSource messageSource;

	/**
	 * 多语言测试
	 */
	@RequestMapping("/i18ntest")
	public Map<Object, Object> i18nTest() {
    
		Map<Object, Object> result = new HashMap<Object, Object>();
		result.put("code", 5001);
		result.put("msg", messageSource.getMessage("error.error_5001", null, LocaleContextHolder.getLocale()));
		return result;
	}

}

请求结果

lang=zh_CN

在这里插入图片描述

lang=en_US

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/JavaLiXL/article/details/107883555

智能推荐

Baumer工业相机堡盟工业相机使用BGAPI SDK将图像数据转换为Bitmap的几种方式(C#)(Mono)_c# 调用 sdk转bitmap-程序员宅基地

文章浏览阅读467次。Baumer工业相机堡盟工业相机使用BGAPI SDK将图像数据转换为Bitmap的几种方式(C#)(Mono)_c# 调用 sdk转bitmap

高尔夫游戏源码uinty引擎开发_炫技高尔夫 代码-程序员宅基地

文章浏览阅读316次,点赞7次,收藏8次。【代码】高尔夫游戏源码uinty引擎开发。_炫技高尔夫 代码

日志_log4j:自定义log4j日志文件存放路径_wildfly部署后log4j对应的log在哪里-程序员宅基地

文章浏览阅读1.7k次。话说这是第一次自己配置log4j,以前都是拿来就用,完全没想过这个问题。 log4j的配置文件还是比较好用的,只要编译后log4j.properties文件是在classes目录下,它就会自动查找这个文件。 把记录日志放到文件中也是比较好配置的,问题是这个日志文件在哪儿,死活没找到?这让我有些慌张,如果不自己定义路径,将它控制住,就会觉得有些不舒服。 在网上搜了大半天,关于log4j讲解的文章_wildfly部署后log4j对应的log在哪里

JRebel热部署 xml文件修改 sql文件修改 不生效_jrebel 不更新sql-程序员宅基地

文章浏览阅读3.2k次。JRebel热部署 xml文件修改 sql文件修改 不生效_jrebel 不更新sql

论文学习笔记 POSEIDON: Privacy-Preserving Federated Neural Network Learning_poseidon: privacypreserving federated neural netwo-程序员宅基地

文章浏览阅读1.6k次,点赞6次,收藏14次。论文学习笔记 POSEIDON: Privacy-Preserving Federated Neural Network LearningNDSS 2021录用文章目录论文学习笔记 POSEIDON: Privacy-Preserving Federated Neural Network Learning一、机器学习1. 机器学习(ML)中的挑战2. 隐私保护机器学习(PPML)二、POSEIDON方案1. 系统和威胁模型2. 方案总览多方同态加密(MHE)联邦学习主要挑战和解决方法3. 方案CKKS_poseidon: privacypreserving federated neural network learning

opentsdb远程代码执行(CVE-2020-35476)-程序员宅基地

文章浏览阅读1.9k次。1漏洞背景OpenTSDB(Open Time Series Data Base)是基于HBASE构建的分布式、可扩展的时间序列数据库。OpenTSDB可以获取电力行业、化工行业、物联网行业等各类型实时监测、检查与分析设备所采集、产生的时间序列数据,并提供存储、索引以及图形化服务,使其易于访问和可视化。2 漏洞原理OpenTSDB 2.4.0及之前版本中存在远程代码执行漏洞,用户提交的yrange参数或其他相关参数的值在/src/tsd/GraphHandler.java文件中进行简单的反引号._cve-2020-35476

随便推点

Linux常用的命令--60个命令总结汇总_linux命令一共有多少个?-程序员宅基地

文章浏览阅读8.9k次,点赞10次,收藏85次。Linux常用60个命令--实例详解Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作、文件存取、目录操作、进程管理、文件权限设定等。所以,在Linux系统上工作离不开使用系统提供的命令。要想真正理解Linux系统,就必须从Linux命令学起,通过基础的命令学习可以进一步理解Linux系统。不同Linux发行版的命令数量不一样,但Linux发行版本最少的命令也有200多_linux命令一共有多少个?

L3.linux命令每日一练 -- 第一章 Linux命令行简介_type `help' to learn how to use xshell prompt.-程序员宅基地

文章浏览阅读262次,点赞3次,收藏3次。​ 【功能说明】​ shutdown是一个用来安全关闭或重启Linux系统的命令,系统在关闭之前会通知所有的登录用户,系统即将关闭,此时所有的新用户都不可以再登陆了,与shutdown功能类似的命令还有init、halt、poweroff、reboot。​ 【语法格式】​ 技巧说明:​ 1)注意shutdown命令与后面的选项之间至少要有一个空格。​ 2)通常情况下,我们执行的shutdown命令为shutdown -h now或shutdown -r now。​ 【选项参数】​ 参数选项_type `help' to learn how to use xshell prompt.

强烈推荐一个Python库!制作Web Gui也太简单了!_python linux web gui-程序员宅基地

文章浏览阅读1.4k次,点赞11次,收藏32次。之前小编用Python做GUI界面,首选就是。但是它们实现起来工作量及代码量太大,还要一步步设计调试界面排版等问题,而且界面最终呈现也不是特别美观,还有就是打包后太大等一系列问题。最近公司同事刚好有个相关界面开发需求,给我推荐了Python的新型Gui库,不仅可以做本地GUI程序,还可以同步生成一个Web Gui 服务,将Gui界面同步到浏览器上展示。它就是nicegui。NiceGui是一个简单易用的基于Python的Web-UI框架,其目的是使在Python中开发前端应用程序变得容易。_python linux web gui

Flask-RESTful 安装_flask_restful install-程序员宅基地

文章浏览阅读1.8k次。使用pip命令安装Flask-RESTfulpip install flask-restful可以从GitHub上的页面下载开发版本。git clone https://github.com/flask-restful/flask-restful.gitcd flask-restfulpython setup.py developFlask-RESTful具有以下依赖项(如果使用pip将自动安装):Flask版本0.10或更高Flask-RESTful需要Python版本2.7、3._flask_restful install

oozie4.3.1编译_oozie 4.3.1 编译-程序员宅基地

文章浏览阅读707次。oozie编译一、版本oozie版本:4.3.1JDK:1.8HADOOP:2.7.7hive:hivepig:0.16.0sqoop:1.4.7spark:2.3.0hbase:0.94.27tomcat:8.0.53二、编译前需要修改的地方root pom.xmljdk版本修改 &amp;amp;amp;amp;lt;properties&amp;amp;amp;amp;gt; &amp;amp;amp;amp;lt;targe_oozie 4.3.1 编译

2022-我的秋招之旅_合川电信面试-程序员宅基地

文章浏览阅读966次,点赞2次,收藏2次。123_合川电信面试