我有 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 的操作系统上,没有这样的问题。但是在生产中,我有英文操作系统。如何解决这个问题呢?
莫回无
相关分类