为了账号安全,请及时绑定邮箱和手机立即绑定

Spring boot 国际化总是偏爱英语 english lang OS

Spring boot 国际化总是偏爱英语 english lang OS

呼如林 2021-07-22 18:19:26
我有 Spring Boot 应用程序,其中包含国际化所需的 bean。 @Bean    public LocaleResolver localeResolver() {        CookieLocaleResolver cookieLocaleResolver = new CookieLocaleResolver();        cookieLocaleResolver.setCookieName(CookieNames.LANG);        cookieLocaleResolver.setDefaultLocale(new Locale(Lang.DEFAULT_LANG.getLabel())); //label is "ru"        cookieLocaleResolver.setCookieMaxAge(this.localeAgeCookie);        return cookieLocaleResolver;    }    @Bean    public MessageSource messageSource() {        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();        messageSource.setBasenames("classpath:i18n/messages");        messageSource.setDefaultEncoding(StandardCharsets.UTF_8.name());        return messageSource;    }    @Bean    public MessageSourceAccessor messageSourceAccessor() {        return new MessageSourceAccessor(messageSource());    }并且有俄语(messages.properties)和英语(messages_en.properties)的文件消息,默认选择俄语。我通过调用以下方法使用 POST 请求而不是拦截器更改语言。public static void setLocale(HttpServletRequest request, HttpServletResponse response, Lang lang) {    final LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request);    localeResolver.setLocale(request, response, Locale.forLanguageTag(lang.getLabel()));}问题是当我打电话时 messageSourceAccessor.getMessage(key),并且键位于 messages 和 messages_en 文件中,即使我在查询中强制使用语言环境,我也总是从 messages_en 收到消息,例如:messageSourceAccessor.getMessage(key, new Locale("ru")).我注意到我的同事在基于俄罗斯 lang 的操作系统上,没有这样的问题。但是在生产中,我有英文操作系统。如何解决这个问题呢?
查看完整描述

2 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

解决方法很简单。更改消息源的属性fallbackToSystemLocale就足够了。

 messageSource.setFallbackToSystemLocale(false);


查看完整回答
反对 回复 2021-07-29
  • 2 回答
  • 0 关注
  • 192 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信