春季i18n的行为在Windows和Linux之间是不同的

问题描述:

我使用Spring boot i18n。春季i18n的行为在Windows和Linux之间是不同的

在windows中,如果选择的区域设置没有语句A,它将使用messages.properties中的语句。

在CentOS中,如果选择的语言环境没有句子A,它将首先使用messages_en_US.properties中的句子,如果messages_en也没有句子,它将使用messages.properties中的句子。

为什么它不同?

@Bean 
public LocaleResolver localeResolver() { 
    CookieLocaleResolver clr = new CookieLocaleResolver();//also can use SessionLocaleResolver 
    clr.setDefaultLocale(Locale.SIMPLIFIED_CHINESE); 
    return clr; 
} 

@Bean 
public LocaleChangeInterceptor localeChangeInterceptor() { 
    LocaleChangeInterceptor lci = new LocaleChangeInterceptor(); 
    lci.setParamName("locale"); 
    return lci; 
} 

@Override 
public void addInterceptors(InterceptorRegistry registry) { 
    registry.addInterceptor(localeChangeInterceptor()); 
} 

我也解释不清楚的行为,但它可以通过ResourceBundle.Control.getFallbackLocale引起的。 Javadoc说:

如果给定语言环境不是默认语言环境,默认实现将返回默认语言环境。

因此,我建议检查Java默认语言环境是否有所作为。