Files
MyGoNavi/internal/proxy/backend_i18n.go
2026-06-22 15:12:42 +08:00

81 lines
1.7 KiB
Go

package proxy
import (
"sync"
"GoNavi-Wails/shared/i18n"
)
var (
proxyBackendTextMu sync.RWMutex
proxyBackendTextLanguage = i18n.LanguageZhCN
proxyBackendTextLocalizer *i18n.Localizer
)
type proxyLocalizedError struct {
message string
cause error
}
func (e proxyLocalizedError) Error() string {
return e.message
}
func (e proxyLocalizedError) Unwrap() error {
return e.cause
}
func SetBackendLanguage(language i18n.Language) {
normalized, ok := i18n.NormalizeLanguage(string(language))
if !ok {
return
}
proxyBackendTextMu.Lock()
defer proxyBackendTextMu.Unlock()
proxyBackendTextLanguage = normalized
if proxyBackendTextLocalizer == nil {
localizer, err := i18n.NewLocalizer(normalized)
if err != nil {
return
}
proxyBackendTextLocalizer = localizer
return
}
proxyBackendTextLocalizer.SetLanguage(normalized)
}
func localizedProxyBackendText(key string, params map[string]any) string {
proxyBackendTextMu.RLock()
if proxyBackendTextLocalizer != nil {
text := proxyBackendTextLocalizer.T(key, params)
proxyBackendTextMu.RUnlock()
return text
}
proxyBackendTextMu.RUnlock()
proxyBackendTextMu.Lock()
defer proxyBackendTextMu.Unlock()
if proxyBackendTextLocalizer == nil {
localizer, err := i18n.NewLocalizer(proxyBackendTextLanguage)
if err != nil {
return key
}
proxyBackendTextLocalizer = localizer
}
return proxyBackendTextLocalizer.T(key, params)
}
func proxyTextError(key string, params map[string]any) error {
return proxyLocalizedError{message: localizedProxyBackendText(key, params)}
}
func proxyWrapError(key string, params map[string]any, cause error) error {
return proxyLocalizedError{
message: localizedProxyBackendText(key, params),
cause: cause,
}
}