package com.hxzk.gps.controller.Languages;
|
|
import cn.dev33.satoken.stp.StpUtil;
|
import lombok.Data;
|
import lombok.Getter;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.servlet.LocaleResolver;
|
|
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletResponse;
|
import java.util.Locale;
|
|
|
|
|
|
@RestController
|
public class LanguageController {
|
@Autowired
|
private LocaleResolver localeResolver;
|
|
@GetMapping("/getCurrentLanguage")
|
public String getCurrentLanguage(HttpServletRequest request) {
|
String sessionId = request.getSession().getId();
|
|
// 首先尝试从Sa-Token会话中获取语言设置(优先级最高)
|
try {
|
String saTokenLanguage = (String) StpUtil.getSession().get("user_language");
|
if (saTokenLanguage != null) {
|
|
|
if (saTokenLanguage.equals("zh")) {
|
return "当前语言是中文";
|
} else if (saTokenLanguage.equals("en")) {
|
return "当前语言是英文";
|
}
|
}
|
} catch (Exception e) {
|
System.out.println("获取Sa-Token会话语言失败: " + e.getMessage());
|
}
|
|
// 其次尝试从HttpSession中获取语言设置
|
String sessionLanguage = (String) request.getSession().getAttribute("session_language");
|
if (sessionLanguage != null) {
|
|
if (sessionLanguage.equals("zh")) {
|
return "当前语言是中文";
|
} else if (sessionLanguage.equals("en")) {
|
return "当前语言是英文";
|
}
|
}
|
|
// 如果都没有语言设置,则使用locale resolver
|
Locale currentLocale = localeResolver.resolveLocale(request);
|
|
|
if (currentLocale.getLanguage().equals("zh")) {
|
return "当前语言是中文";
|
} else if (currentLocale.getLanguage().equals("en")) {
|
return "当前语言是英文";
|
}
|
return "当前语言未知";
|
}
|
|
@PostMapping("/setLanguage")
|
public String setLanguage(@RequestBody Languages lang, HttpServletRequest request, HttpServletResponse response) {
|
String language = lang.getLang();
|
Locale locale = "zh".equals(language) ? Locale.SIMPLIFIED_CHINESE : Locale.US;
|
|
// 设置会话中的语言属性
|
request.getSession().setAttribute("session_language", language);
|
// 重要:同时使用Sa-Token的会话存储机制,确保与Sa-Token会话管理一致
|
StpUtil.getSession().set("user_language", language);
|
|
// 重要:确保locale resolver正确设置语言
|
localeResolver.setLocale(request, response, locale);
|
// 验证设置是否生效
|
Locale resolvedLocale = localeResolver.resolveLocale(request);
|
return "语言已设置为: " + language;
|
}
|
|
}
|