Explorar el Código

支持后端泰语语言解析

兼容 th_TH、th-TH 和 th,并为现有受支持语言建立白名单解析;空值和未知语言继续回退台湾繁体。
qmj hace 1 hora
padre
commit
d967d787c6

+ 31 - 0
ruoyi-admin/src/test/java/com/ruoyi/common/utils/LocaleUtilsTest.java

@@ -0,0 +1,31 @@
+package com.ruoyi.common.utils;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
+
+import java.util.Locale;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+class LocaleUtilsTest {
+    @ParameterizedTest
+    @CsvSource({
+            "zh_CN,zh,CN", "zh-CN,zh,CN", "zh,zh,CN",
+            "zh_TW,zh,TW", "zh-TW,zh,TW", "tw,zh,TW",
+            "en_US,en,US", "en-US,en,US", "en,en,US",
+            "vi_VN,vi,VN", "vi-VN,vi,VN", "vi,vi,VN",
+            "th_TH,th,TH", "th-TH,th,TH", "th,th,TH"
+    })
+    void parsesSupportedLanguageAliases(String input, String language, String country) {
+        assertEquals(new Locale(language, country), LocaleUtils.parseLocale(input));
+    }
+
+    @Test
+    void fallsBackToTraditionalChineseForMissingOrUnknownLanguage() {
+        Locale expected = new Locale("zh", "TW");
+        assertEquals(expected, LocaleUtils.parseLocale(null));
+        assertEquals(expected, LocaleUtils.parseLocale("  "));
+        assertEquals(expected, LocaleUtils.parseLocale("fr-FR"));
+    }
+}

+ 19 - 28
ruoyi-common/src/main/java/com/ruoyi/common/utils/LocaleUtils.java

@@ -20,6 +20,11 @@ public class LocaleUtils
     /** 默认语言(台湾繁体) */
     /** 默认语言(台湾繁体) */
     private static final Locale DEFAULT_LOCALE = new Locale("zh", "TW");
     private static final Locale DEFAULT_LOCALE = new Locale("zh", "TW");
 
 
+    private static final Locale SIMPLIFIED_CHINESE = new Locale("zh", "CN");
+    private static final Locale ENGLISH = new Locale("en", "US");
+    private static final Locale VIETNAMESE = new Locale("vi", "VN");
+    private static final Locale THAI = new Locale("th", "TH");
+
     /** Redis���û��������õ�keyǰ׺ */
     /** Redis���û��������õ�keyǰ׺ */
     private static final String USER_LANGUAGE_KEY_PREFIX = "user:language:";
     private static final String USER_LANGUAGE_KEY_PREFIX = "user:language:";
 
 
@@ -35,34 +40,20 @@ public class LocaleUtils
      */
      */
     public static Locale parseLocale(String language)
     public static Locale parseLocale(String language)
     {
     {
-        return DEFAULT_LOCALE;
-//        if (StringUtils.isEmpty(language))
-//        {
-//            return DEFAULT_LOCALE;
-//        }
-//
-//        // �����»��߸�ʽ���� zh_CN��
-//        if (language.contains("_"))
-//        {
-//            String[] parts = language.split("_", 2);
-//            if (parts.length == 2)
-//            {
-//                return new Locale(parts[0], parts[1]);
-//            }
-//            else
-//            {
-//                return new Locale(parts[0]);
-//            }
-//        }
-//
-//        // �������ַ���ʽ���� zh-CN��
-//        if (language.contains("-"))
-//        {
-//            return Locale.forLanguageTag(language);
-//        }
-//
-//        // �����Դ��루�� zh, en, vi��
-//        return new Locale(language);
+        if (StringUtils.isEmpty(language) || language.trim().isEmpty())
+        {
+            return DEFAULT_LOCALE;
+        }
+        String normalized = language.trim().replace('-', '_').toLowerCase(Locale.ROOT);
+        return switch (normalized)
+        {
+            case "zh", "zh_cn" -> SIMPLIFIED_CHINESE;
+            case "zh_tw", "tw" -> DEFAULT_LOCALE;
+            case "en", "en_us" -> ENGLISH;
+            case "vi", "vi_vn" -> VIETNAMESE;
+            case "th", "th_th" -> THAI;
+            default -> DEFAULT_LOCALE;
+        };
     }
     }
 
 
     /**
     /**