diff --git a/im-admin/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/core/I18nLocaleResolver.java b/im-admin/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/core/I18nLocaleResolver.java index 98ddd06..c877cd3 100644 --- a/im-admin/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/core/I18nLocaleResolver.java +++ b/im-admin/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/core/I18nLocaleResolver.java @@ -15,12 +15,35 @@ public class I18nLocaleResolver implements LocaleResolver { @Override public Locale resolveLocale(HttpServletRequest httpServletRequest) { - String language = httpServletRequest.getHeader("content-language"); - Locale locale = Locale.getDefault(); - if (language != null && language.length() > 0) { - String[] split = language.split("_"); - locale = new Locale(split[0], split[1]); + String languageHeader = httpServletRequest.getHeader("content-language"); + Locale locale; + + if (languageHeader != null && !languageHeader.isEmpty()) { + // 处理可能的逗号分隔的语言列表 + String[] languages = languageHeader.split(","); + String preferredLanguage = languages[0]; // 取第一个语言标签作为首选 + + // 处理语言标签的格式(可能包含语言、国家、区域) + String[] parts = preferredLanguage.split("-"); + switch (parts.length) { + case 1: // 只有语言代码 + locale = new Locale(parts[0]); + break; + case 2: // 语言代码和国家代码 + locale = new Locale(parts[0], parts[1]); + break; + case 3: // 语言代码、国家代码和区域代码 + locale = new Locale(parts[0], parts[1], parts[2]); + break; + default: // 默认回退到默认语言环境 + locale = Locale.getDefault(); + break; + } + } else { + // 如果没有 content-language 头部,使用默认语言环境 + locale = Locale.getDefault(); } + return locale; } @@ -28,4 +51,4 @@ public class I18nLocaleResolver implements LocaleResolver { public void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) { } -} +} \ No newline at end of file