Java Spring boot-根据请求提供不同的messages.properties

Java Spring boot-根据请求提供不同的messages.properties,java,spring,spring-mvc,Java,Spring,Spring Mvc,我想根据HttpServletRequest加载一组不同的messages_xx.properties,以根据我们的客户进行区分 在模板和整个应用程序中,我们有一个@Bean,它根据请求的路径为实际客户提供服务 @Component public class CompanySelector { @Autowired private ICompanyService service; public String getURLBase(HttpServletRequest

我想根据HttpServletRequest加载一组不同的messages_xx.properties,以根据我们的客户进行区分

在模板和整个应用程序中,我们有一个@Bean,它根据请求的路径为实际客户提供服务

@Component
public class CompanySelector {

    @Autowired
    private ICompanyService service;

    public String getURLBase(HttpServletRequest request) throws MalformedURLException {
        URL requestURL = new URL(request.getRequestURL().toString());
        String port = requestURL.getPort() == -1 ? "" : ":" + requestURL.getPort();
        return requestURL.getHost() + port;
    }

    public Company getActualCompany(HttpServletRequest request) throws MalformedURLException{
        String url = getURLBase(request);

        Company company = service.findByCompanyUrl(url);
        if(company != null){
            return company;
        }
        return null;
    }

}
现在,我们在
WebConfig
中配置
MessageSource
,它扩展了
webmvcconfigureadapter
,我们希望这样做

@Configuration
@ComponentScan("it.besmart.eshare.web")
public class WebConfig extends WebMvcConfigurerAdapter{

    public WebConfig(){
        super();
    }

    @Autowired
    CompanySelector companySelector;

    @Autowired
    HttpServletRequest request;

    @Bean
    public MessageSource messageSource() {
        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        Company company = null;
        try {
            company = companySelector.getActualCompany(request);
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        if (company != null){
            messageSource.setBasename("classpath:"+ company.getSlug() + "_messages");
        } else {
            messageSource.setBasename("classpath:messages");
        }
        messageSource.setDefaultEncoding("UTF-8");

        return messageSource;
    }

}

但很明显,它不起作用,因为我们在配置期间没有请求。。。是否有其他方法根据请求加载消息文件?或采用任何其他最佳实践?因为我们的另一个选择是,每种语言只使用一个文件,并且在每个短语的开头使用company.getSlug(),但我们会将文件的大小复制…

您需要像这样声明每个属性文件:

@Bean
public MessageSource messageSource() {
    ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
    messageSource.setBasenames("company1_messages", "company2_messages");
    messageSource.setDefaultEncoding("UTF-8");
    return messageSource;
}
为了得到信息:

@Autowired
private MessageSource messageSource;

public String myRequest(Locale locale) {
    ...
    messageSource.getMessage(company.getSlug().".messageKey1", null, locale));
    ... 
}
公司1\u消息\u fr.属性中

company1.messageKey1=messageCompany1
company2.messageKey1=messageCompany2
公司2\u消息\u fr.属性中

company1.messageKey1=messageCompany1
company2.messageKey1=messageCompany2

您需要像这样声明每个属性文件:

@Bean
public MessageSource messageSource() {
    ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
    messageSource.setBasenames("company1_messages", "company2_messages");
    messageSource.setDefaultEncoding("UTF-8");
    return messageSource;
}
为了得到信息:

@Autowired
private MessageSource messageSource;

public String myRequest(Locale locale) {
    ...
    messageSource.getMessage(company.getSlug().".messageKey1", null, locale));
    ... 
}
公司1\u消息\u fr.属性中

company1.messageKey1=messageCompany1
company2.messageKey1=messageCompany2
公司2\u消息\u fr.属性中

company1.messageKey1=messageCompany1
company2.messageKey1=messageCompany2

您能否依赖浏览器区域设置而不是使用
company.getSlug()
?这不是区域设置的问题,而是文件上的问题。。我有company1\u messages\u us.properties、company1\u messages\u fr.properties、company2\u messages\u us.properties、company2\u messages\u fr.properties等等…你能依赖浏览器区域设置而不是使用
company.getSlug()
?这不是区域设置的问题,而是文件上的问题。。我有company1_messages_us.properties、company1_messages_fr.properties、company2_messages_us.properties、company2_messages_fr.properties等等。。。