Spring Boot 国际化踩坑指南

本文介绍了Spring应用中如何通过拦截器管理和配置国际化参数lang,以及如何自定义配置文件位置。同时分享了Java开发者的学习资源,包括系统学习视频、源码阅读和面试题准备等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

另外我们还配置了一个拦截器,这个拦截器会拦截请求中 key 为 lang 的参数(不配置的话是 locale),这个参数则指定了当前的环境信息。

好了,配置完成后,启动项目,访问方式如下:

我们通过在请求中添加 lang 来指定当前环境信息。这个指定只需要一次即可,也就是说,在 session 不变的情况下,下次请求可以不必带上 lang 参数,服务端已经知道当前的环境信息了。

3.其他自定义


默认情况下,我们的配置文件放在 resources 目录下,如果大家想自定义,也是可以的,例如定义在 resources/i18n 目录下:

但是这种定义方式系统就不知道去哪里加载配置文件了,此时还需要 application.properties 中进行额外配置(注意这是一个相对路径):

spring.messages.basename=i18n/messages

另外还有一些编码格式的配置等,内容如下:

spring.messages.cache-duration=3600

spring.messages.encoding=UTF-8

spring.messages.fallback-to-system-locale=true

spring.messages.cache-duration 表示 messages 文件的缓存失效时间,如果不配置则缓存一直有效。

spring.messages.fallback-to-system-locale 属性则略显神奇,网上竟然看不到一个明确的答案,后来翻了一会源码才看出端倪。

这个属性的作用在 org.springframework.context.support.AbstractResourceBasedMessageSource#getDefaultLocale 方法中生效:

protected Locale getDefaultLocale() {

if (this.defaultLocale != null) {

return this.defaultLocale;

}

if (this.fallbackToSystemLocale) {

return Locale.getDefault();

}

return null;

}

从这段代码可以看出,在找不到当前系统对应的资源文件时,如果该属性为 true,则会默认查找当前系统对应的资源文件,否则就返回 null,返回 null 之后,最终又会调用到系统默认的 messages.properties 文件。

4.附录


搜刮了一个语言简称表,分享给各位小伙伴:

| 语言 | 简称 |

| :-- | :-- |

| 简体中文(中国) | zh_CN |

| 繁体中文(中国台湾) | zh_TW |

| 繁体中文(中国香港) | zh_HK |

| 英语(中国香港) | en_HK |

| 英语(美国) | en_US |

| 英语(英国) | en_GB |

| 英语(全球) | en_WW |

| 英语(加拿大) | en_CA |

| 英语(澳大利亚) | en_AU |

| 英语(爱尔兰) | en_IE |

| 英语(芬兰) | en_FI |

| 芬兰语(芬兰) | fi_FI |

| 英语(丹麦) | en_DK |

| 丹麦语(丹麦) | da_DK |

| 英语(以色列) | en_IL |

| 希伯来语(以色列) | he_IL |

| 英语(南非) | en_ZA |

| 英语(印度) | en_IN |

| 英语(挪威) | en_NO |

| 英语(新加坡) | en_SG |

| 英语(新西兰) | en_NZ |

| 英语(印度尼西亚) | en_ID |

| 英语(菲律宾) | en_PH |

| 英语(泰国) | en_TH |

| 英语(马来西亚) | en_MY |

| 英语(阿拉伯) | en_XA |

| 韩文(韩国) | ko_KR |

| 日语(日本) | ja_JP |

| 荷兰语(荷兰) | nl_NL |

| 荷兰语(比利时) | nl_BE |

| 葡萄牙语(葡萄牙) | pt_PT |

| 葡萄牙语(巴西) | pt_BR |

| 法语(法国) | fr_FR |

| 法语(卢森堡) | fr_LU |

| 法语(瑞士) | fr_CH |

| 法语(比利时) | fr_BE |

| 法语(加拿大) | fr_CA |

| 西班牙语(拉丁美洲) | es_LA |

| 西班牙语(西班牙) | es_ES |

| 西班牙语(阿根廷) | es_AR |

| 西班牙语(美国) | es_US |

| 西班牙语(墨西哥) | es_MX |

| 西班牙语(哥伦比亚) | es_CO |

| 西班牙语(波多黎各) | es_PR |

| 德语(德国) | de_DE |

| 德语(奥地利) | de_AT |

| 德语(瑞士) | de_CH |

| 俄语(俄罗斯) | ru_RU |

| 意大利语(意大利) | it_IT |

| 希腊语(希腊) | el_GR |

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后我们该如何学习?

1、看视频进行系统学习

这几年的Crud经历,让我明白自己真的算是菜鸡中的战斗机,也正因为Crud,导致自己技术比较零散,也不够深入不够系统,所以重新进行学习是很有必要的。我差的是系统知识,差的结构框架和思路,所以通过视频来学习,效果更好,也更全面。关于视频学习,个人可以推荐去B站进行学习,B站上有很多学习视频,唯一的缺点就是免费的容易过时。

另外,我自己也珍藏了好几套视频资料躺在网盘里,有需要的我也可以分享给你:

1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了

2、读源码,看实战笔记,学习大神思路

“编程语言是程序员的表达的方式,而架构是程序员对世界的认知”。所以,程序员要想快速认知并学习架构,读源码是必不可少的。阅读源码,是解决问题 + 理解事物,更重要的:看到源码背后的想法;程序员说:读万行源码,行万种实践。

Spring源码深度解析:

1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了

Mybatis 3源码深度解析:

1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了

Redis学习笔记:

1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了

Spring Boot核心技术-笔记:

1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了

3、面试前夕,刷题冲刺

面试的前一周时间内,就可以开始刷题冲刺了。请记住,刷题的时候,技术的优先,算法的看些基本的,比如排序等即可,而智力题,除非是校招,否则一般不怎么会问。

关于面试刷题,我个人也准备了一套系统的面试题,帮助你举一反三:

1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了

只有技术过硬,在哪儿都不愁就业,“万般带不去,唯有业随身”学习本来就不是在课堂那几年说了算,而是在人生的旅途中不间断的事情。

人生短暂,别稀里糊涂的活一辈子,不要将就。
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!
一般不怎么会问。

关于面试刷题,我个人也准备了一套系统的面试题,帮助你举一反三:

[外链图片转存中…(img-UsRRjk5u-1712069855722)]

只有技术过硬,在哪儿都不愁就业,“万般带不去,唯有业随身”学习本来就不是在课堂那几年说了算,而是在人生的旅途中不间断的事情。

人生短暂,别稀里糊涂的活一辈子,不要将就。
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值