一、新增国际化资源文件

在resources文件下新建i18n文件,并新建国际化资源文件。如图:

点击新增Resource Bundle文件。

我们在Resource bundle base name处填写国际化文件的名称,笔者此处填“messages”。并点击中间偏右的“+”号,新增国际化语言,此处新增两个语言“zh_CN”,“en_US”。
点击ok保存,看到这样的文件结构,就表示创建成功了:
分别在两个文件中添加
zh_CN:

A00001=你好,世界
A00002=你好,JAVA

en_US:

A00001=Hello World
A00002=Hello JAVA

二、添加国际化配置

2.1 添加配置文件

spring:messages:basename: i18n/messages

注意:此处的basename填的messages是填Resource bundle base name时填的值。

2.2 添加配置类

MyLocaleResolver:

/*** @Description: 自定义LocaleResolver* @author Felix.Du* @Date: 2022/3/30 21:25*/
@Configuration
public class MyLocaleResolver implements LocaleResolver {@Autowiredprivate HttpServletRequest request;public Locale getLocal() {return resolveLocale(request);}/*** 从HttpServletRequest中获取Locale** @param httpServletRequest    httpServletRequest* @return                      语言Local*/@Overridepublic Locale resolveLocale(HttpServletRequest httpServletRequest) {//获取请求中的语言参数String language = httpServletRequest.getParameter("lang");//如果没有就使用默认的(根据主机的语言环境生成一个 LocaleLocale locale = Locale.getDefault();//如果请求的链接中携带了 国际化的参数if (!StringUtils.isEmpty(language)){//zh_CNString[] s = language.split(Constant.CONNECTOR);//国家,地区locale = new Locale(s[0], s[1]);}return locale;}/*** 用于实现Locale的切换。比如SessionLocaleResolver获取Locale的方式是从session中读取,但如果* 用户想要切换其展示的样式(由英文切换为中文),那么这里的setLocale()方法就提供了这样一种可能** @param request               HttpServletRequest* @param httpServletResponse   HttpServletResponse* @param locale                locale*/@Overridepublic void setLocale(@NonNull HttpServletRequest request, @Nullable HttpServletResponse httpServletResponse, @Nullable Locale locale) {}
}

添加i18n工具类,I18nUtil:

@Slf4j
@Component
public class I18nUtil {@Value("${spring.messages.basename}")private String basename;private final MyLocaleResolver resolver;private static MyLocaleResolver customLocaleResolver;private static String path;public I18nUtil(MyLocaleResolver resolver) {this.resolver = resolver;}@PostConstructpublic void init() {setBasename(basename);setCustomLocaleResolver(resolver);}/*** 获取 国际化后内容信息** @param code 国际化key* @return 国际化后内容信息*/public static String getMessage(String code) {Locale locale = customLocaleResolver.getLocal();return getMessage(code, null, code, locale);}/*** 获取指定语言中的国际化信息,如果没有则走英文** @param code 国际化 key* @param lang 语言参数* @return 国际化后内容信息*/public static String getMessage(String code, String lang) {Locale locale;if (StringUtils.isEmpty(lang)) {locale = Locale.US;} else {try {var split = lang.split("-");locale = new Locale(split[0], split[1]);} catch (Exception e) {locale = Locale.US;}}return getMessage(code, null, code, locale);}/*** 获取站内信指定语言 目前只支持 中文与英文两类 默认英文** @param code 国际化 key* @param lang 语言参数* @return 国际化后内容信息*/public static String getStationLetterMessage(String code, String lang) {Locale locale = Objects.equals(lang, I18nConstant.ZH_CN) ? Locale.SIMPLIFIED_CHINESE : Locale.US;return getMessage(code, null, code, locale);}public static String getMessage(String code, Object[] args, String defaultMessage, Locale locale) {ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();messageSource.setDefaultEncoding(StandardCharsets.UTF_8.toString());messageSource.setBasename(path);String content;try {content = messageSource.getMessage(code, args, locale);} catch (Exception e) {log.error("国际化参数获取失败===>{},{}", e.getMessage(), e);content = defaultMessage;}return content;}public static void setBasename(String basename) {I18nUtil.path = basename;}public static void setCustomLocaleResolver(MyLocaleResolver resolver) {I18nUtil.customLocaleResolver = resolver;}}

三、测试

FirstUserController:

@RestController
@RequestMapping("/user")
@RequiredArgsConstructor
@Slf4j
public class FirstUserController {private final HttpServletRequest request;@GetMapping("/i18n")public String i18n() {String message1 = I18nUtil.getMessage("A00001", request.getHeader("lang"));String message2 = I18nUtil.getMessage("A00002", request.getHeader("lang"));return message1 + message2;}
}

因为此处截取的是请求头的lang参数,那么我们在请求的时候添加一个lang参数。


注意:此处lang传的值是zh-CN、en-US并非zh_CN、en_US,因为在MyLocaleResolver中解析参数是通过分隔符“-”解析的,而并不是“”。当然你也可以传zh_CN、en_US,只需要在MyLocaleResolver类的resolveLocale方法将解析符号换为“”即可。

SpringBoot实现i18n国际化配置(超详细之跟着走就会系列)相关推荐

  1. SpringBoot 系列教程(四十六):SpringBoot集成i18n国际化配置

    一.概述 软件的国际化:软件开发时,要使它能同时应对世界不同地区和国家的访问,并针对不同地区和国家的访问,提供相应的.符合来访者阅读习惯的页面或数据. 国际化(internationalization ...

  2. (转)Spring Boot 日志配置(超详细)

    转自:https://blog.csdn.net/inke88/article/details/75007649 ============================== Spring Boot- ...

  3. Spring Boot 日志配置(超详细)

    Spring Boot-日志配置(超详细) 更新日志: 20170810 更新通过 application.yml传递参数到 logback 中. 简书不支持目录,截图一张. 默认日志 Logback ...

  4. post修改服务器数据源,postgresql安装及配置超详细教程

    1. 安装 根据业务需求选择版本,官网下载 初始化数据库 执行完初始化任务之后,postgresql 会自动创建和生成两个用户和一个数据库: linux 系统用户 postgres:管理数据库的系统用 ...

  5. MySQL8.0.22安装及配置(超详细)

    MySQL8.0.22安装及配置(超详细) 大家好,今天我们来学习一下 MySQL8.0.22安装及配置,好好看,好好学,超详细的 第一步 进入MySQL官网下载,如下图所示: 第二步 进入下载完成后 ...

  6. maven安装及配置(超详细)

    maven安装及配置(超详细) 大家好,今天我们来学习一下maven安装及配置,好好看,好好学,超详细的 第一步 进入maven官网下载,如下图所示: 第二步 下载好压缩包或解压到除了c盘任意一个盘, ...

  7. 静态路由基础,扩展配置 超详细滴

    目录 一,负载均衡 二,环回接口 三,手工汇总 四,路由黑洞 五,缺省路由 六,空接口 七,浮动静态 一,负载均衡: 上下带宽不一致,不建议使用负载均衡.例如:网线的1000M和100m 所访问的目标 ...

  8. Spring进行 i18n国际化配置

    (本项目是基于Dubbo的,所以会有后端服务和前端Controller两次国际化的配置) 对后端服务的异常代码进行国际化版本的配置 1.在provider的resources中新建一个properti ...

  9. jsp进行 i18n国际化配置

    下面是对jsp进行国际化配置的步骤: 1.在resources中新建一个messages的文件夹,新建两个properties,内容如下: promptMessage_me_JD.properties ...

最新文章

  1. RocketMQ Summit 2022 案例征集中
  2. java静态内部类(嵌套类)
  3. 读取文本作为输出字段
  4. 情态 语态_情绪与情态与对话情感
  5. 《高性能javascript》随笔
  6. 链家广州二手房的数据与分析——爬取数据
  7. javascript判断一个数是否是素数(质数)
  8. 【分享】Gitee如何下载单个文件
  9. springboot框架下利用websocket实现即时通讯
  10. android 仿微信demo————微信发现界面实现
  11. 服务网关配置:Zuul
  12. libvirt零知识学习6 —— libvirt源码编译安装(4)
  13. 【转】 教你一眼认出英语单词的意思
  14. 加分项——C语言实现Linux的pwd命令
  15. java桌面程序与服务交互_Java作为具有交互式桌面支持的Windows服务并读取curren登录用户...
  16. 【Python】最全中文停用词表整理(1893个)()
  17. jQuery源码导航
  18. 第二章 表格及样式入门 ② 代码
  19. JAVA银企直连建设银行云直连模式超详细讲解
  20. MUCH:专跑Android游戏的国产PSP

热门文章

  1. QT篇之QT布局与设计师
  2. iOS开发之结合asp.net webservice实现文件上传下载
  3. 有苦有乐的算法 --- 并查集的实现原理
  4. python学习爬取数据二级页面的数据
  5. C# BlockingCollection 简单用法
  6. 数据库配置白/黑名单
  7. 自制肥鲨HDO2电源降压延长线,支持3S~6S动力电池
  8. oracle缺少有右括号,oracle ORA-00907错误:缺少右括号
  9. 10.数据仓库搭建之DWD层搭建
  10. 【判断题】【简答题】【数据库原理】