系统需要识别当前语言。没有在系统中找到现有实现,自己加了一个。
创建语言拦截器 LanguageInterceptor
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LanguageInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) {
// 获取语言标识(优先级:参数 > 请求头 > 默认值)
String lang = request.getParameter("lang"); // 从URL参数获取
if (lang == null) {
lang = request.getHeader("Accept-Language"); // 从请求头获取
}
if (lang == null || lang.isEmpty()) {
lang = "zh_CN"; // 设置默认语言
}
// 将语言信息存储到request属性中
request.setAttribute("lang", lang);
return true;
}
}
在系统的Configuration文件中添加语言拦截器
public void addInterceptors(InterceptorRegistry registry){
registry.addInterceptor(new LanguageInterceptor());
}
使用时接口中注入参数
@RequestAttribute(value = "lang", required = false) String lang
前端在请求头中加入语言
// request拦截器
service.interceptors.request.use(
// 设置语言
// 添加 Accept-Language 请求头
config.headers['Accept-Language'] = getLang()
const method = config.method?.toUpperCase()
// 防止 GET 请求缓存
if (method === 'GET') {
config.headers['Cache-Control'] = 'no-cache'
config.headers['Pragma'] = 'no-cache'
}
// 自定义参数序列化函数
else if (method === 'POST') {
const contentType = config.headers['Content-Type'] || config.headers['content-type']
if (contentType === 'application/x-www-form-urlencoded') {
if (config.data && typeof config.data !== 'string') {
config.data = qs.stringify(config.data)
}
}
}
return config
},
(error: AxiosError) => {
// Do something with request error
console.log(error) // for debug
return Promise.reject(error)
}
)