Reputation: 743
I have spring boot app with the beans needed for internationalization.
@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());
}
And there are files messages in Russian (messages.properties) and English(messages_en.properties), Russian is selected as default.
Language I change with POST request instead of interceptor by calling the following method.
public static void setLocale(HttpServletRequest request, HttpServletResponse response, Lang lang) {
final LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request);
localeResolver.setLocale(request, response, Locale.forLanguageTag(lang.getLabel()));
}
The problem is that when i call
messageSourceAccessor.getMessage(key)
, and the key is located in both messages and messages_en files, I always get a message from messages_en even if I force the locale in the query like:
messageSourceAccessor.getMessage(key, new Locale("ru")).
I noticed that my colleague on the Russian lang based OS, there is no such problem. But on production and I have English OS. How to solve this problem?
Upvotes: 2
Views: 1867
Reputation: 743
Solution is quite simple. It was enough to change the property fallbackToSystemLocale of the message source.
messageSource.setFallbackToSystemLocale(false);
Upvotes: 5
Reputation: 4932
You can try to start your application with system parameters
user.language=ru
user.country=RU
note: I'm not sure if ru and RU are good values but that you probably know better than me
Upvotes: 1