| created | status | scope | files |
|---|---|---|---|
| 2026-04-17 | approved | backend + frontend | 6 |
管理员可在系统设置中配置全局默认语言,影响未登录用户和未设置语言偏好的已登录用户。
1. 用户个人设置语言(已登录 + 已设置语言偏好)
2. 管理员设定的默认语言(强制使用,忽略浏览器语言)
3. zh-CN(fallbackLng)
common/constants.go新增变量:
var DefaultLanguage = "" // 空字符串=未设定,保持现有浏览器检测行为
model/option.go在 updateOptionMap 的 switch 中新增 case:
case "DefaultLanguage":
common.DefaultLanguage = value
controller/misc.go — GetStatus()在 status 响应 JSON 中新增字段:
"default_language": common.DefaultLanguage,
web/src/components/settings/SystemSetting.jsxinputs state 新增 DefaultLanguage: ''Select 下拉框/api/option/ 保存web/src/components/layout/PageLayout.jsx在 loadStatus 回调中,获取 data.default_language 后:
if (data.default_language && data.default_language !== '') {
const savedLang = localStorage.getItem('i18nextLng');
// 仅在没有用户个人设置语言时应用默认语言
// 注意:UserContext 会在用户加载后覆盖此设置
if (!localStorage.getItem('user')) {
i18n.changeLanguage(data.default_language);
}
}
同时保留现有的 localStorage.getItem('i18nextLng') 逻辑作为 fallback。
web/src/context/User/index.jsx调整语言同步逻辑:
// 当前:仅在有 settings.language 时切换
// 新增:无 settings.language 时,回退到 status 中的 default_language
if (settings.language) {
i18n.changeLanguage(settings.language);
} else if (statusDefaultLanguage) {
i18n.changeLanguage(statusDefaultLanguage);
}
需要从 StatusContext 获取 default_language 值。
| 文件 | 改动类型 | 改动量 |
|---|---|---|
common/constants.go |
新增变量 | +1 行 |
model/option.go |
新增 switch case | +2 行 |
controller/misc.go |
新增 status 字段 | +1 行 |
web/src/components/settings/SystemSetting.jsx |
inputs + 表单 UI | ~30 行 |
web/src/components/layout/PageLayout.jsx |
loadStatus 后应用默认语言 | ~5 行 |
web/src/context/User/index.jsx |
无偏好时回退到默认语言 | ~5 行 |