Quellcode durchsuchen

锁定后端默认语言与泰语切换

让 lang 参数复用受支持语言白名单解析,兼容三种泰语代码,并增加台湾繁体默认语言回归契约。
qmj vor 3 Tagen
Ursprung
Commit
6398d02bb2

+ 40 - 0
ruoyi-admin/src/test/java/com/ruoyi/framework/config/BackendI18nConfigTest.java

@@ -0,0 +1,40 @@
+package com.ruoyi.framework.config;
+
+import java.util.Locale;
+import org.junit.jupiter.api.Test;
+import org.springframework.mock.web.MockHttpServletRequest;
+import org.springframework.mock.web.MockHttpServletResponse;
+import org.springframework.web.servlet.DispatcherServlet;
+import org.springframework.web.servlet.LocaleResolver;
+import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+class BackendI18nConfigTest
+{
+    @Test
+    void defaultsToTraditionalChinese()
+    {
+        LocaleResolver resolver = new I18nConfig().localeResolver();
+
+        assertEquals(new Locale("zh", "TW"), resolver.resolveLocale(new MockHttpServletRequest()));
+    }
+
+    @Test
+    void switchesAllThaiAliasesThroughExistingLangParameter() throws Exception
+    {
+        for (String language : new String[] { "th_TH", "th-TH", "th" })
+        {
+            I18nConfig config = new I18nConfig();
+            LocaleResolver resolver = config.localeResolver();
+            LocaleChangeInterceptor interceptor = config.localeChangeInterceptor();
+            MockHttpServletRequest request = new MockHttpServletRequest();
+            request.setAttribute(DispatcherServlet.LOCALE_RESOLVER_ATTRIBUTE, resolver);
+            request.setParameter("lang", language);
+
+            interceptor.preHandle(request, new MockHttpServletResponse(), new Object());
+
+            assertEquals(new Locale("th", "TH"), resolver.resolveLocale(request), language);
+        }
+    }
+}

+ 10 - 2
ruoyi-framework/src/main/java/com/ruoyi/framework/config/I18nConfig.java

@@ -1,6 +1,7 @@
 package com.ruoyi.framework.config;
 
 import java.util.Locale;
+import com.ruoyi.common.utils.LocaleUtils;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.web.servlet.LocaleResolver;
@@ -29,7 +30,14 @@ public class I18nConfig implements WebMvcConfigurer
     @Bean
     public LocaleChangeInterceptor localeChangeInterceptor()
     {
-        LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
+        LocaleChangeInterceptor lci = new LocaleChangeInterceptor()
+        {
+            @Override
+            protected Locale parseLocaleValue(String localeValue)
+            {
+                return LocaleUtils.parseLocale(localeValue);
+            }
+        };
         // 参数名
         lci.setParamName("lang");
         return lci;
@@ -40,4 +48,4 @@ public class I18nConfig implements WebMvcConfigurer
     {
         registry.addInterceptor(localeChangeInterceptor());
     }
-}
+}