Repo .git was damaged (refs/ missing, index truncated, object store near-empty). Repaired via git init (rebuilt refs), stale index preserved as .git/index.corrupt-20260910.bak, then full worktree committed as a rollback baseline.
45 lines
1.4 KiB
Go
45 lines
1.4 KiB
Go
// Package shared 提供跨包共享的应用级状态。
|
|
package shared
|
|
|
|
import (
|
|
"sync"
|
|
|
|
"github.com/tamakyi/TamaBox/internal/i18n"
|
|
)
|
|
|
|
// AppState 保存应用级共享状态。
|
|
//
|
|
// 多语言体系(internal/i18n)对每个请求按 cookie / 用户配置逐请求解析语言,
|
|
// 本类型只承担一个职责:站点默认语言(兜底值)。
|
|
// 访客既无 lang cookie、登录用户也未配置语言时,使用 AppState 中的默认语言。
|
|
type AppState struct {
|
|
mu sync.RWMutex
|
|
lang string
|
|
}
|
|
|
|
// NewAppState 返回默认语言为 i18n.Default(简体中文)的应用状态。
|
|
func NewAppState() *AppState {
|
|
return &AppState{lang: i18n.Default}
|
|
}
|
|
|
|
// SetLang 设置站点默认语言。
|
|
// 内部统一走 i18n.Resolve 归一化(zh_hk / zh-hant / en-us 等变体都会映射到规范代码),
|
|
// 未知语言代码自动回退到 i18n.Default,保证 lang 始终是字典可查的规范代码。
|
|
func (s *AppState) SetLang(lang string) {
|
|
s.mu.Lock()
|
|
defer s.mu.Unlock()
|
|
s.lang = i18n.Resolve(lang)
|
|
}
|
|
|
|
// Lang 返回当前站点默认语言(始终为规范语言代码,如 "zh-CN" / "zh-TW" / "en" / "ja")。
|
|
func (s *AppState) Lang() string {
|
|
s.mu.RLock()
|
|
defer s.mu.RUnlock()
|
|
return s.lang
|
|
}
|
|
|
|
// App 是应用级共享状态单例。
|
|
// 服务启动时(cmd/web.go)依据配置 default_lang 调用 App.SetLang 初始化;
|
|
// 运行期也可由管理功能调用 SetLang 动态调整站点默认语言。
|
|
var App = NewAppState()
|