创建一个maven模块
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>common</artifactId>
<groupId>com.liao</groupId>
<version>1.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>common-i18n</artifactId>
<properties>
<poi.version>3.9</poi.version>
<spring.version>5.0.11.RELEASE</spring.version>
<javax.servlet.version>4.0.1</javax.servlet.version>
<spring.data.version>2.0.9.RELEASE</spring.data.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-commons</artifactId>
<version>${spring.data.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${javax.servlet.version}</version>
</dependency>
</dependencies>
</project>
创建配置文件:LocaleConfiguration
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
/**
* 语言区域配置
* @author zhiwei Liao
*/
@Configuration
public class LocaleConfiguration {
private final String LOCAL_HEAD_NAME = "Locale";
@Bean
public WebMvcConfigurer localeInterceptor) {
return new WebMvcConfigurer) {
@Override
public void addInterceptorsInterceptorRegistry registry) {
LocaleChangeInterceptor localeInterceptor = new LocaleChangeInterceptor);
localeInterceptor.setParamNameLOCAL_HEAD_NAME);
registry.addInterceptorlocaleInterceptor);
}
};
}
}
创建常量:LanguageConstant
/**
* @author zhiwei Liao
* @version 1.0
* @Description 语言
* @Date 2021/7/19 18:31
*/
public class LanguageConstant {
//波兰文
public static final String PL = "pl_pl";
//英文
public static final String US = "en_us";
//中文
public static final String CN = "zh_cn";
//请求头中设置语言
public static final String ACCEPT_LANGUAGE = "accept-language";
}
创建工具类:LocaleUtils
import com.liao.common.i18n.constant.LanguageConstant;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.security.auth.login.LoginContext;
import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;
import java.util.Locale;
/**
* 国际化转换工具
* @author zhiwei Liao
*/
@Component
public class LocaleUtils {
private static final Logger log = LoggerFactory.getLoggerLocaleUtils.class);
private static MessageSource messageSource;
public LocaleUtilsMessageSource messageSource) {
LocaleUtils.messageSource = messageSource;
}
public static String getMessageString msgKey) {
return getMessagemsgKey, null);
}
public static String getMessageString msgKey,Object[] args) {
try {
return messageSource.getMessagemsgKey, args, LocaleContextHolder.getLocale));
} catch Exception e) {
return msgKey;
}
}
/**
* @Description 获取当前语言
* @MethodParameterTypes []
* @MethodParameters []
* @MethodReturnType java.util.Locale
* @Author zhiwei Liao
* @Date 2021/7/19 18:43
**/
public static Locale getCurrentLocale) {
String language = null;
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes);
HttpServletRequest request = ServletRequestAttributes) requestAttributes).getRequest);
Enumeration<String> headerNames = request.getHeaderNames);
if headerNames != null) {
while headerNames.hasMoreElements)) {
String name = headerNames.nextElement);
ifLanguageConstant.ACCEPT_LANGUAGE.equalsname)){
Enumeration<String> values = request.getHeadersname);
while values.hasMoreElements)) {
String value = values.nextElement);
ifLanguageConstant.PL.equalsvalue)){
language = value;
}else ifLanguageConstant.US.equalsvalue)){
language = value;
}else ifLanguageConstant.CN.equalsvalue)){
language = value;
}
}
}
}
}
log.info"======getCurrentLocale.language:" + language);
Locale locale = null;
ifLanguageConstant.PL.equalslanguage)){
//波兰文
locale = new Locale"pl","PL");
// locale = new Locale"pl_PL");//本地有效,服务器上无效
}else ifLanguageConstant.US.equalslanguage)){
//英文
locale = Locale.US;
}else ifLanguageConstant.CN.equalslanguage)){
//简体中文
locale = Locale.SIMPLIFIED_CHINESE;
}else {
//请求头中没有语言设置时,默认给英文
locale = Locale.US;
}
log.info"=========locale:" + locale);
return locale;
}
}
其他模块使用国际化
log.errorUserinfoConstant.LOGIN_FAILED);
String message = messageSource.getMessage"user.login.failed", null, LocaleUtils.getCurrentLocale));
return ResultData.errorUserCodeConstant.LOGIN_FAILED, message);