网上很多的spring boot国际化的文章都是正常情况下的使用方法
如果你像我一样用了Spring Security 那么在多语言的时候可能就会遇到一个深渊
Spring Security里面的异常本身已经是做了多语言的,但是只支持通过Accept-Language来切换错误信息的语言
而我们需要自定义异常信息,以及用url参数lang=en_US或者lang=cn_ZH来控制语言的话网上的这种方法是不行的
@Configurationpublic class I18nConfig implements WebMvcConfigurer { @Bean public LocaleResolver localeResolver() { CookieLocaleResolver slr = new CookieLocaleResolver(); slr.setCookieName("locale"); // 默认使用的语言 slr.setDefaultLocale(Locale.US); return slr; } @Bean public LocaleChangeInterceptor localeChangeInterceptor() { LocaleChangeInterceptor lci = new LocaleChangeInterceptor(); // 参数名 用于区别使用语言类型 lci.setParamName("lang"); return lci; } @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(localeChangeInterceptor()); }}
重点来了
原因是Spring Security早于DispatcherServlet,Spring Security异常退出的时候都还没有执行上面代码加入的东西,所以是没有成功的修改locale.
而我自己在结果过程中手动设置locale也遇到了一个坑
我在打印日志的Filter中加入了LocaleContextHolder.setLocale(StringUtils.parseLocale(newLocale));
然后在打印的时候语言还是不对。
这个问题是因为我的filter的ordered太早了,所以后面被RequestContextFilter给设置回去了。
所以
解决办法是在RequestContextFilter后面设置locale才对。
String newLocale = request.getParameter("lang");if (StringUtils.isNotBlank(newLocale)) { LocaleContextHolder.setLocale(StringUtils.parseLocale(newLocale));}
这个代码要再RequestContextFilter之后执行。
下面是文档上的截图
如果对您有帮助请评论,点赞让我知道,谢谢!
原文转载:http://www.shaoqun.com/a/508843.html
折扣网:https://www.ikjzd.com/w/74
new old stock:https://www.ikjzd.com/w/2341
网上很多的springboot国际化的文章都是正常情况下的使用方法如果你像我一样用了SpringSecurity那么在多语言的时候可能就会遇到一个深渊SpringSecurity里面的异常本身已经是做了多语言的,但是只支持通过Accept-Language来切换错误信息的语言而我们需要自定义异常信息,以及用url参数lang=en_US或者lang=cn_ZH来控制语言的话网上的这种方法是不行的@
extra:extra
空中云汇:空中云汇
最新!wish新出炉的2条公告,卖家必看!:最新!wish新出炉的2条公告,卖家必看!
口述:相亲男说娶我是为了给他爸妈养老:口述:相亲男说娶我是为了给他爸妈养老
如何在亚马逊上从调研、开发、销售、推广把一款产品做起来?:如何在亚马逊上从调研、开发、销售、推广把一款产品做起来?
没有评论:
发表评论