第一步:配置消息源
@Configuration
public class MessageSourceConfig {
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath:messages");
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
}
第二步:配置LocaleResolver
@Configuration
public class LocaleResolverConfig implements WebMvcConfigurer {
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver localeResolver = new SessionLocaleResolver();
localeResolver.setDefaultLocale(Locale.US);
return localeResolver;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();
localeChangeInterceptor.setParamName("lang");
registry.addInterceptor(localeChangeInterceptor);
}
}
第三步:创建资源文件
在src/main/resources目录下创建多个不同语言的资源文件,如messages_en.properties和messages_zh.properties,用来存储各种语言的文本信息。
messages_en.properties
greeting=Hello World!
messages_zh.properties
greeting=你好,世界!
第四步:使用MessageSource获取资源文件内容
@Component
public class MessageUtils {
@Autowired
private MessageSource messageSource;
public MessageUtils() {
}
public String getMessage(String code) {
return this.getConnectorMessage(code, null, null);
}
public String getMessage(String code, String param) {
return this.getConnectorMessage(code, param, null);
}
public String getMessage(String[] codes) {
return this.getConnectorMessage(null, null, codes);
}
public static String msg(String code, Object... args) {
LocaleResolver localLocaleResolver = SpringContextHolder.getBean(LocaleResolver.class);
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
Locale localLocale = localLocaleResolver.resolveLocale(request);
return SpringContextHolder.getApplicationContext().getMessage(code, args, localLocale);
}
private String getConnectorMessage(String code, String param, String[] codes) {
StringBuilder stringBuilder = new StringBuilder();
if (StringUtils.isNotEmpty(param)) {
stringBuilder.append(param).append(":");
} else if (StringUtils.isNotEmpty(code)) {
stringBuilder.append(this.messageSource.getMessage(code, null, LocaleContextHolder.getLocale()));
}
if (null != codes) {
for (String arr : codes) {
stringBuilder.append(this.messageSource.getMessage(arr, null, LocaleContextHolder.getLocale())).append(";");
}
}
return stringBuilder.toString();
}
}
@Controller
public class GreetingController {
@Autowired
private MessageSource messageSource;
@GetMapping("/greeting")
public String greeting(Locale locale) {
return MessageUtils.msg("greeting");
}
}
200

被折叠的 条评论
为什么被折叠?



