Browse Source
update I18nLocaleResolver.java.
content-language 是一个 HTTP 头部,用于指定请求体的自然语言。它的值通常是用逗号分隔的语言标签列表(例如:zh-CN,en;q=0.9)。然而,Locale 的构造函数需要的是语言代码和国家代码(用下划线 _ 分隔)。直接使用 - 分隔符并构造 Locale 是不正确的。
Signed-off-by: 老周 <zhouyu629@qq.com>
master
老周
1 year ago
committed by
Gitee
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
1 changed files with
29 additions and
6 deletions
-
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; |
|
|
|
} |
|
|
|
|
|
|
|
|