架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3837|回复: 0

[资料] Spring Boot MessageSource 国际化语言的坑

[复制链接]
发表于 2022-1-27 14:52:03 | 显示全部楼层 |阅读模式
国际化,也叫 i18n,为啥叫这个名字呢?因为国际化英文是 internationalization ,在 i 和 n 之间有 18 个字母,所以叫 i18n。我们的应用如果做了国际化就可以在不同的语言环境下,方便的进行切换,最常见的就是中文和英文之间的切换,国际化这个功能也是相当的常见。

举个例子吧,比如在发送一个具体的请求的时候,在header中设置一个键值对:"Accept-Language":"zh",通过Accept-Language对应值,服务器就可以决定使用哪一个区域的语言,找到相应的资源文件,格式化处理,然后返回给客户端。

新建一个 Spring Boot 项目,在  resources 文件夹下面新建 i18n 文件,在此文件夹下面根据“语言简称表”格式新建配置文件,如下图:


QQ截图20220127143859.jpg

message.properties

message_en.properties

记得编辑 application.properties 中添加配置参数,让我们的配置生效:

Spring 定义了 MessageSource 接口,用于访问国际化信息。

getMessage(String code, Object[] args, String defaultMessage, Locale locale)
getMessage(String code, Object[] args, Locale locale)
getMessage(MessageSourceResolvable resolvable, Locale locale)

QQ截图20220127135823.jpg

新建控制器,尝试调用不同的资源文件返回提示,代码如下:

QQ截图20220127143623.jpg

项目部署在中文的 Windows 服务器下面,中文用户访问提示中文没有任何问题。当部署到 Linux 英文版系统的时候,中文用户会提示英文提示(读取了英文资源文件的配置)。

此原因是因为我们根本没有新建任何中文的 .properties 文件,这时候程序会读取和当前系统语言匹配的资源文件,如果再读取不到,才会读取不到任何标识的 properties 文件配置。当我们将项目发布到 Linux 英文系统的时候,程序虽然读取不到中文的配置,但是会读取到 _en.properties 的配置文件,所以接口返回了中文的提示。

解决方案,设置 FallbackToSystemLocale 为 false,代码如下:

(完)





上一篇:【实战】使用 cAdvisor 收集 Docker 容器指标
下一篇:前端 JS 将 Blob 转 String 字符串
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-5-29 19:15

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表