SpringBoot国际化失败填坑

编程入门 行业动态 更新时间:2024-10-21 13:24:01

<a href=https://www.elefans.com/category/jswz/34/1769943.html style=SpringBoot国际化失败填坑"/>

SpringBoot国际化失败填坑

记录下问题…
SpringBoot通过配置 localeResolver Bean 使用容器系统自带的环境语言, 结合拦截器, 通过拦截请求参数中 lang 的值, 设置不同会话 Session 中的语言.

@Configuration
public class LocaleLanguageConfig {/*** 默认解析器 其中locale表示默认语言*/@Beanpublic LocaleResolver localeResolver() {SessionLocaleResolver localeResolver = new SessionLocaleResolver();// 设置默认语言环境,设置默认.不指定具体语言localeResolver.setDefaultLocale(Locale.getDefault());return localeResolver;}/*** 默认拦截器*/@Beanpublic WebMvcConfigurer localeInterceptor() {return new WebMvcConfigurer() {@Overridepublic void addInterceptors(InterceptorRegistry registry) {LocaleChangeInterceptor localeInterceptor = new LocaleChangeInterceptor();// lang表示切换语言的参数名localeInterceptor.setParamName("lang");localeInterceptor.setIgnoreInvalidLocale(false);registry.addInterceptor(localeInterceptor);}};}
}

配合 Get 请求完成多语言的配置

<a href="?lang=zh_CN"><span class="text-white">中文</span></a>
<a href="?lang=en_US"><span class="text-white">English</span></a>

本地 application.properties 配置

# 国际化消息
spring.messages.basename=i18n/messages

这里介绍一个天坑.
通过 windows 版本的 Idea 生成的国际化文件, 其文件名为小写, 即关于国家语言信息的 en_uszh_cn 为小写, 但是 java.util.Locale 中,规定的国家语言信息必须为大写.

参考 java.util.Locale

static public final Locale SIMPLIFIED_CHINESE = createConstant("zh", "CN");
static public final Locale TRADITIONAL_CHINESE = createConstant("zh", "TW");
static public final Locale US = createConstant("en", "US");

那么… 则导致, SpringBoot 在根据当前语言查找对应的语言资源时, 由于 Windows 文件名不区分大小写, 所以可以找到 i18n/messages_zh_cn.properties , 而在 Linux 环境下区分大小写. 找不到消息资源,进而国际化失败.

解决…
将文件名合理命名.然后重启…

更多推荐

SpringBoot国际化失败填坑

本文发布于:2024-03-10 21:20:10,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1729064.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:SpringBoot

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!