zhitong.yu
7 天以前 7fc9c42987a13c1d8d2159591a5803e70518827f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
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;
    }
 
}