♻️ Bazaar uses a map to replace the i18n struct (#16960)

- package.go:DisplayName/Description/Readme 改为 map[string]string,统一 getPreferredLocaleString
- bazzar.go:搜索匹配适配 LocaleStrings,抽出 packageContainsKeyword
- bazaar.ts:keyword 仅在有值时传入 API
- appearance:主题「默认主题」与 displayName 改为多语言 key 与 map 取值
This commit is contained in:
Jeffrey Chen 2026-02-03 09:59:36 +08:00 committed by GitHub
parent cc37ec4030
commit 9642f486bd
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
19 changed files with 127 additions and 388 deletions

View file

@ -132,25 +132,18 @@ func loadThemes() {
modes := themeConf.Modes
for _, mode := range modes {
t := &conf.AppearanceTheme{Name: name}
if "zh_CN" == util.Lang {
if "midnight" == name {
t.Label = name + "(默认主题)"
} else if "daylight" == name {
t.Label = name + "(默认主题)"
} else {
if nil != themeConf.DisplayName && "" != themeConf.DisplayName.ZhCN && name != themeConf.DisplayName.ZhCN {
t.Label = themeConf.DisplayName.ZhCN + "" + name + ""
} else {
t.Label = name
}
}
if "midnight" == name || "daylight" == name {
t.Label = name + Conf.Language(281)
} else {
if "midnight" == name {
t.Label = name + " (Default)"
} else if "daylight" == name {
t.Label = name + " (Default)"
} else {
t.Label = name
t.Label = name
if len(themeConf.DisplayName) > 0 {
v := strings.TrimSpace(themeConf.DisplayName[util.Lang])
if "" == v {
v = strings.TrimSpace(themeConf.DisplayName["default"])
}
if "" != v && name != v {
t.Label = v + " (" + name + ")"
}
}
}

View file

@ -514,34 +514,41 @@ func matchPackage(keywords []string, pkg *bazaar.Package) bool {
return true
}
if nil == pkg || nil == pkg.DisplayName || nil == pkg.Description {
if nil == pkg {
return false
}
hits := map[string]bool{}
for _, keyword := range keywords {
if strings.Contains(strings.ToLower(pkg.DisplayName.Default), keyword) ||
strings.Contains(strings.ToLower(pkg.DisplayName.ZhCN), keyword) ||
strings.Contains(strings.ToLower(pkg.DisplayName.ZhCHT), keyword) ||
strings.Contains(strings.ToLower(pkg.DisplayName.EnUS), keyword) ||
strings.Contains(strings.ToLower(pkg.Description.Default), keyword) ||
strings.Contains(strings.ToLower(pkg.Description.ZhCN), keyword) ||
strings.Contains(strings.ToLower(pkg.Description.ZhCHT), keyword) ||
strings.Contains(strings.ToLower(pkg.Description.EnUS), keyword) ||
strings.Contains(strings.ToLower(path.Base(pkg.RepoURL)), keyword) ||
strings.Contains(strings.ToLower(pkg.Author), keyword) {
hits[keyword] = true
continue
}
for _, pkgKeyword := range pkg.Keywords {
if strings.Contains(strings.ToLower(pkgKeyword), keyword) {
hits[keyword] = true
break
}
for _, kw := range keywords {
if !packageContainsKeyword(pkg, kw) {
return false
}
}
return len(hits) == len(keywords)
// 全部关键词匹配
return true
}
func packageContainsKeyword(pkg *bazaar.Package, kw string) bool {
if strings.Contains(strings.ToLower(path.Base(pkg.RepoURL)), kw) ||
strings.Contains(strings.ToLower(pkg.Author), kw) {
return true
}
for _, s := range pkg.DisplayName {
if strings.Contains(strings.ToLower(s), kw) {
return true
}
}
for _, s := range pkg.Description {
if strings.Contains(strings.ToLower(s), kw) {
return true
}
}
for _, s := range pkg.Keywords {
if strings.Contains(strings.ToLower(s), kw) {
return true
}
}
return false
}
func getSearchKeywords(query string) (ret []string) {