@Configuration
public class CustomLocaleResolver
extends AcceptHeaderLocaleResolver
implements WebMvcConfigurer {
List<Locale> LOCALES = Arrays.asList(
new Locale("en"),
new Locale("fr"));
@Override
public Locale resolveLocale(HttpServletRequest request) {
String headerLang = request.getHeader("Accept-Language");
return headerLang == null || headerLang.isEmpty()
? Locale.getDefault()
: Locale.lookup(Locale.LanguageRange.parse(headerLang), LOCALES);
}
@Bean
public ResourceBundleMessageSource messageSource() {
ResourceBundleMessageSource rs = new ResourceBundleMessageSource();
rs.setBasename("messages");
rs.setDefaultEncoding("UTF-8");
rs.setUseCodeAsDefaultMessage(true);
return rs;
}
}
@Component
public class Translator {
private static ResourceBundleMessageSource messageSource;
@Autowired
Translator(ResourceBundleMessageSource messageSource) {
Translator.messageSource = messageSource;
}
public static String toLocale(String msgCode) {
Locale locale = LocaleContextHolder.getLocale();
return messageSource.getMessage(msg, null, locale);
}
}
hello=Hello World!
welcome=Welcome to this guide!
这里是messages_fr.properties的内容:
hello=Bonjour le Monde!
welcome=Bienvenue dans ce guide!
@RestController
@RequestMapping(value =“/ api”)
public class MainController {
@GetMapping()
public String getMessage(@RequestParam(“msg”)String msg){
return Translator。toLocale(msg) ;
}
}
welcome to this guide!
正如你看到:响应会根据请求中传递的“ Accept-Language ”标头的值而有所不同。这样,我们不需要检查每个控制器方法中请求中传递的内容,然后将其进一步传递给服务层。我们现在可以在一个单独的地方执行此操作,即CustomLocaleResolver类。
https://github.com/igorkosandyak/spring-boot-internationalization