spark-server/internal/pkg/i18n/locale.go
zhr ae9a71034d feat: implement Spark IM V3 modular monolith
Add HTTP /v1 MVC, TCP send path, groups with server-side member-avatar collage, object-storage upload, and friends/favorites around the architecture-v3 layout.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 19:52:11 +08:00

51 lines
1.1 KiB
Go

package i18n
import (
"strings"
)
// Lang is a canonical UI language. Only these three are served.
type Lang string
const (
ZhCN Lang = "zh-CN"
En Lang = "en"
ZhTW Lang = "zh-TW"
Default = ZhCN
)
func (l Lang) String() string {
if l == "" {
return string(Default)
}
return string(l)
}
// Parse maps Accept-Language, X-Language, or TCP AUTH language to ZhCN / En / ZhTW.
func Parse(raw string) Lang {
for _, part := range strings.Split(raw, ",") {
tag, _, _ := strings.Cut(strings.TrimSpace(part), ";")
if lang, ok := match(tag); ok {
return lang
}
}
return Default
}
func match(tag string) (Lang, bool) {
t := strings.ToLower(strings.ReplaceAll(strings.TrimSpace(tag), "_", "-"))
if t == "" {
return "", false
}
switch {
case t == "en" || strings.HasPrefix(t, "en-"):
return En, true
case t == "zh-tw" || t == "zh-hk" || t == "zh-mo" || t == "zh-hant" || strings.HasPrefix(t, "zh-hant"):
return ZhTW, true
case t == "zh" || t == "zh-cn" || t == "zh-sg" || t == "zh-hans" || strings.HasPrefix(t, "zh-hans"):
return ZhCN, true
default:
return "", false
}
}