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
parent
commit
f4e57b58c3
No known key found for this signature in database GPG Key ID: 173E9B9CA92EEF8F
  1. 35
      im-admin/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/core/I18nLocaleResolver.java

35
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) {
}
}
}
Loading…
Cancel
Save