我有 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);
添加回答
举报
0/150
提交
取消