SpringBoot 国际化的两种方式:

工具类
@Component
public class I18nService {
@Autowired
private MessageSource messageSource;
public I18nService(MessageSource messageSource) {
this.messageSource = messageSource;
}
public String getMessage(String msgKey, Object[] args) {
return messageSource.getMessage(msgKey, args, LocaleContextHolder.getLocale());
}
public String getMessage(String msgKey) {
Locale locale = LocaleContextHolder.getLocale();
return messageSource.getMessage(msgKey, null, locale);
}
}
application.yml
spring:
messages:
basename: static/i18n/messages #相对路径 首部请勿添加斜杠
方式一
/**
* 配置国际化语言
*/
@Configuration
public class LocaleConfig {
/**
* 默认解析器 其中locale表示默认语言
*/
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver localeResolver = new SessionLocaleResolver();
localeResolver.setDefaultLocale(Locale.US);
return localeResolver;
}
/**
* 默认拦截器 其中lang表示切换语言的参数名
*/
@Bean
public WebMvcConfigurer localeInterceptor() {
return new WebMvcConfigurer() {
@Override
public void addInterceptors(InterceptorRegistry registry) {
LocaleChangeInterceptor localeInterceptor = new LocaleChangeInterceptor();
localeInterceptor.setParamName("lang");
registry.addInterceptor(localeInterceptor);
}
};
}
}
访问方式:
默认英语:http://http://127.0.0.1:8080?lang=en_US
中文简体:http://http://127.0.0.1:8080?lang=zh_CN
中文繁体:http://http://127.0.0.1:8080?lang=zh_TW
方式二
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.servlet.LocaleResolver;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Locale;
public class MyResolver implements LocaleResolver {
@Override
public Locale resolveLocale(HttpServletRequest request) {
String l = request.getParameter("l");
if (!StringUtils.isEmpty(l)){
String[] split = l.split("_");
return new Locale(split[0],split[1]);
}
return null;
}
@Override
public void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) {
}
}
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Bean
public LocaleResolver localeResolver(){
return new LangResolver();
}
}
访问方式:
默认英语:http://http://127.0.0.1:8080?l=en_US
中文简体:http://http://127.0.0.1:8080?l=zh_CN
中文繁体:http://http://127.0.0.1:8080?l=zh_TW
定义 HelloController
import com.hehe.locale.I18nService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@RestController
public class HelloController {
@Resource
private I18nService i18nService;
@GetMapping("/")
public String index() {
return i18nService.getMessage("user.welcome");
}
}
参考链接
网友评论