mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-06-28 09:21:38 +08:00
81 lines
1.7 KiB
Go
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,
|
|
}
|
|
}
|