我有一个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的操作系统的同事没有这种问题。但是在生产上,我有英文操作系统。 如何解决这个问题?
答案 0 :(得分:1)
您可以尝试使用系统参数启动应用程序
user.language=ru
user.country=RU
注意:我不确定ru和RU是否是好的价值,但您可能比我更了解
答案 1 :(得分:0)
解决方案非常简单。更改消息源的属性 fallbackToSystemLocale 就足够了。
messageSource.setFallbackToSystemLocale(false);