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; } }