Java springboot2中的语言环境

Java springboot2中的语言环境,java,spring-boot,spring-data-jpa,Java,Spring Boot,Spring Data Jpa,我试图在SpringBoot2应用程序中使用I18N 首先,我在我的资源/区域设置/消息中创建了一个名为“messages\u pt\u BR.properties”的文件,其中包含: Size.Ato.sercicos=Deve conter pelo menos 1 item Size.atoRtdpj.servicos=Deve conter pelo menos 1 item Size.servicos=msg1 Size=msg2 validacao_documento_obrigat

我试图在SpringBoot2应用程序中使用I18N

首先,我在我的资源/区域设置/消息中创建了一个名为“messages\u pt\u BR.properties”的文件,其中包含:

Size.Ato.sercicos=Deve conter pelo menos 1 item
Size.atoRtdpj.servicos=Deve conter pelo menos 1 item
Size.servicos=msg1
Size=msg2
validacao_documento_obrigatorio=Documento: Pelo menos 1 precisa estar preenchido
然后我创造

@Configuration
public class LocaleConfiguration {

    @Bean
    public LocaleResolver localeResolver() {
        SessionLocaleResolver localeResolver = new SessionLocaleResolver();
        Locale.setDefault(new Locale("pt","BR")); // without this line when I try to get the locale the system return en_BR
        localeResolver.setDefaultLocale(new Locale("pt","BR"));
        return localeResolver;
    }

    @Bean
    public ReloadableResourceBundleMessageSource messageSource() {
        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        messageSource.setBasename("classpath:locale/messages");
        messageSource.setCacheSeconds(3600); //refresh cache once per hour
        return messageSource;
    }
}
然后我创造

@Component
public class Messages {

    @Autowired
    private MessageSource messageSource;

    public String getMessage(String id) {
        Locale locale = LocaleContextHolder.getLocale();
        return messageSource.getMessage(id,null,locale);
    }

}
因此,在我的控制器中,我使用:

@Autowired
Messages messages;

//in my method:

messages.getMessage("validacao_documento_obrigatorio")
当我尝试测试时,返回以下错误:

org.springframework.context.NoSuchMessageException: No message found under code 'validacao_documento_obrigatorio' for locale 'pt_BR'.

如果您想从
classpath:locale/messages
加载,jpa约束不会更改为。

将您的
消息属性
移动到
locale
下,因为这将搜索locale文件夹下的
消息属性
,因此如果您想在
/locale/messages
下加载,则需要传递完整文件名路径如下所示,因为它将在
/locale/messages
文件夹下加载
消息\u pt\BR
文件:

 @Bean
    public ReloadableResourceBundleMessageSource messageSource() {
        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        messageSource.setBasename("classpath:locale/messages/messages");
        messageSource.setCacheSeconds(3600); //refresh cache once per hour
        return messageSource;
    }

您的类路径定义不正确,请参阅我的答案。Tks可以工作,但如果在此文件中放置Size.myClass.myPropert=我的新消息,则在控制器中使用@validate时不必更改消息?tksThat's That’s great,我相信您将@validation作为有效注释,您需要在pojo上定义验证,如果您对Validate进行注释,它将适用于控制器中的请求主体。如果我的答案有助于解决问题,那么还有一件事,请接受答案,以便其他人在面临相同问题时能从中受益。答案很有帮助,tks。我在我的项目中使用注释,我把一个@Size(min=1)的列表服务放进去;在message_pt_BR中,我尝试使用Size=newmessage try Size.MyClass.servicos=new message,当我发送不带(或null)属性servicoUse@Size(min=1,message=“${property name}”的json时,消息不会更改,并且在请求主体之前的控制器中使用有效的符号