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

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


呼如林
浏览 193回答 2
2回答

莫回无

解决方法很简单。更改消息源的属性fallbackToSystemLocale就足够了。 messageSource.setFallbackToSystemLocale(false);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java