Pra mim ficou bem claro como utilizar o ValidationMessages.properties, mas a dúvida é se eu consigo unir esse document com o Accept-Language para poder retornar as mensagens de acordo com o idioma do cliente. Teria como?
Pra mim ficou bem claro como utilizar o ValidationMessages.properties, mas a dúvida é se eu consigo unir esse document com o Accept-Language para poder retornar as mensagens de acordo com o idioma do cliente. Teria como?
Olá Lia!
Sim, é possível unir o ValidationMessages.properties
com o Accept-Language
para retornar mensagens de acordo com o idioma do cliente. Para isso, você pode configurar a internacionalização (i18n) no seu projeto Spring Boot. Vou te mostrar um exemplo de como fazer isso.
Crie arquivos de propriedades para cada idioma:
ValidationMessages.properties
(para o idioma padrão, por exemplo, português)ValidationMessages_en.properties
(para o inglês)Exemplo de ValidationMessages.properties
:
nome.obrigatorio=Nome é obrigatório
email.obrigatorio=Email é obrigatório
email.invalido=Formato do email é inválido
telefone.obrigatorio=Telefone é obrigatório
crm.obrigatorio=CRM é obrigatório
crm.invalido=Formato do CRM é inválido
especialidade.obrigatoria=Especialidade é obrigatória
endereco.obrigatorio=Dados do endereço são obrigatórios
Exemplo de ValidationMessages_en.properties
:
nome.obrigatorio=Name is required
email.obrigatorio=Email is required
email.invalido=Invalid email format
telefone.obrigatorio=Phone number is required
crm.obrigatorio=CRM is required
crm.invalido=Invalid CRM format
especialidade.obrigatoria=Specialty is required
endereco.obrigatorio=Address details are required
Configure o MessageSource
no Spring Boot:
Adicione a configuração do MessageSource
no seu arquivo de configuração (por exemplo, ApplicationConfig.java
):
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver;
import java.util.Locale;
@Configuration
public class ApplicationConfig {
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath:ValidationMessages");
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
@Bean
public LocaleResolver localeResolver() {
AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver();
localeResolver.setDefaultLocale(Locale.forLanguageTag("pt-BR"));
return localeResolver;
}
}
Utilize o Accept-Language
no cliente:
Quando o cliente fizer uma requisição, ele pode especificar o cabeçalho Accept-Language
. Por exemplo:
GET /api/endpoint HTTP/1.1
Host: example.com
Accept-Language: en
Com essa configuração, o Spring Boot automaticamente selecionará o arquivo de mensagens apropriado com base no cabeçalho Accept-Language
da requisição.
Espero ter ajudado e bons estudos!
Muito obrigada! Ficou bem claro como funciona, vou testar e pesquisar um pouco mais.
Me parece que esse MessageSource e Resolver são mais genéricos, não apenas para validações. A internacionalização de outros retornos, como uma mensagem para 404, seguiria um princípio bem parecido, correto?l
Isso. O MessageSource
e o LocaleResolver
não se limitam apenas às mensagens de validação do Bean Validation. Eles são mecanismos para internacionalizar qualquer tipo de mensagem na aplicação, incluindo mensagens de erro HTTP, mensagens informativas, textos de interface, etc.
Você pode injetar o MessageSource
em qualquer componente Spring e usar o método getMessage()
para recuperar mensagens:
@RestController
public class MeuController {
@Autowired
private MessageSource messageSource;
@GetMapping("/ola")
public String olaMundo(@RequestHeader(value = "Accept-Language", defaultValue = "en") String locale) {
Locale currentLocale = Locale.forLanguageTag(locale);
return messageSource.getMessage("mensagem.boasvindas", null, currentLocale);
}
}
Sendo necessário criar um arquivo messages.properties
(e seus equivalentes traduzidos):
# messages.properties
mensagem.boasvindas=Olá, mundo!
# messages_es.properties
mensagem.boasvindas=¡Hola, mundo!
Bons estudos!
Perfeito! Era tudo o que eu procurava por agora. Obrigada pela ajuda. Uma boa semana pra você.