mirror of
https://github.com/Wei-Shaw/sub2api.git
synced 2026-10-15 23:22:59 +08:00
- groups 新增 i18n JSONB 列(迁移 242):语言代码 -> {name, description},只存译文;
name/description 原列语义不变,仍用于唯一性校验、搜索与各类日志
- 用户侧接口由后端按请求语言输出:取 Accept-Language 中权重最高的一项,先按完整
语言代码、再按主语言匹配;该语言有译文的字段换成译文,否则保持原字段,且不再带出
译文表。覆盖密钥、可用分组、订阅(含进度与汇总)、兑换、使用记录、可用渠道、
模型广场、套餐列表
- 管理端接口一律返回原字段;分组管理接口额外带 i18n 供编辑
- 创建/编辑分组:名称、描述的标题行右侧新增语言下拉,同一个输入框在默认内容与各语言
版本之间切换;语种跟随前端 availableLocales
- 管理端写入:创建/更新接受 i18n(更新时缺省不修改,传入则整体替换),校验语言代码
形态与名称长度并丢弃空译文;简易模式同样放行;复制分组只带走描述译文
- 切换界面语言后整页刷新,让已加载的数据换成新语言;模型广场响应加
Vary: Accept-Language
- 网关路径,以及只带 group_name 字符串的统计、错误记录出口不做本地化
50 lines
1.4 KiB
Go
50 lines
1.4 KiB
Go
package dto
|
||
|
||
// 用户侧接口在输出前调用 Localized:把分组的名称与描述换成请求首选语言
|
||
// (Accept-Language)的版本,并去掉译文表。管理端接口不调用,保留原字段与译文表,
|
||
// 分组编辑表单依赖原字段回写。
|
||
|
||
// Localized 就地本地化分组并返回自身。
|
||
func (g *Group) Localized(acceptLanguage string) *Group {
|
||
if g == nil {
|
||
return nil
|
||
}
|
||
g.Name, g.Description = g.I18n.Localize(acceptLanguage, g.Name, g.Description)
|
||
g.I18n = nil
|
||
return g
|
||
}
|
||
|
||
// Localized 本地化 API Key 所属分组并返回自身。
|
||
func (k *APIKey) Localized(acceptLanguage string) *APIKey {
|
||
if k != nil {
|
||
k.Group.Localized(acceptLanguage)
|
||
}
|
||
return k
|
||
}
|
||
|
||
// Localized 本地化兑换码关联分组并返回自身。
|
||
func (r *RedeemCode) Localized(acceptLanguage string) *RedeemCode {
|
||
if r != nil {
|
||
r.Group.Localized(acceptLanguage)
|
||
}
|
||
return r
|
||
}
|
||
|
||
// Localized 本地化使用记录关联的分组(含其 API Key 与订阅各自携带的分组)并返回自身。
|
||
func (l *UsageLog) Localized(acceptLanguage string) *UsageLog {
|
||
if l != nil {
|
||
l.Group.Localized(acceptLanguage)
|
||
l.APIKey.Localized(acceptLanguage)
|
||
l.Subscription.Localized(acceptLanguage)
|
||
}
|
||
return l
|
||
}
|
||
|
||
// Localized 本地化订阅关联分组并返回自身。
|
||
func (s *UserSubscription) Localized(acceptLanguage string) *UserSubscription {
|
||
if s != nil {
|
||
s.Group.Localized(acceptLanguage)
|
||
}
|
||
return s
|
||
}
|