Files
EdgeCommon/pkg/langs/utils.go

74 lines
2.0 KiB
Go
Raw Normal View History

2023-06-28 09:12:13 +08:00
// Copyright 2023 GoEdge CDN goedge.cdn@gmail.com. All rights reserved. Official site: https://goedge.cn .
package langs
import (
"github.com/TeaOSLab/EdgeCommon/pkg/configutils"
"github.com/iwind/TeaGo/actions"
"net/http"
"strings"
)
// Message 读取消息
// Read message
2023-06-28 16:19:05 +08:00
func Message(langCode LangCode, messageCode MessageCode, args ...any) string {
2023-06-28 09:12:13 +08:00
return defaultManager.GetMessage(langCode, messageCode, args...)
}
func ParseLangFromRequest(req *http.Request) (langCode string) {
// parse language from cookie
const cookieName = "edgelang"
cookie, _ := req.Cookie(cookieName)
if cookie != nil && len(cookie.Value) > 0 && defaultManager.HasLang(cookie.Value) {
return cookie.Value
}
// parse language from 'Accept-Language'
var acceptLanguage = req.Header.Get("Accept-Language")
if len(acceptLanguage) > 0 {
var pieces = strings.Split(acceptLanguage, ",")
for _, lang := range pieces {
var index = strings.Index(lang, ";")
if index >= 0 {
lang = lang[:index]
}
var match = defaultManager.MatchLang(lang)
if len(match) > 0 {
return match
}
}
}
return defaultManager.DefaultLang()
}
func ParseLangFromAction(action actions.ActionWrapper) (langCode string) {
return ParseLangFromRequest(action.Object().Request)
}
// Format 格式化变量
// Format string that contains message variables, such as ${lang.MESSAGE_CODE}
//
// 暂时不支持变量中加参数
2023-06-28 16:19:05 +08:00
func Format(langCode LangCode, varString string) string {
2023-06-28 09:12:13 +08:00
return configutils.ParseVariables(varString, func(varName string) (value string) {
2023-06-28 16:19:05 +08:00
if !strings.HasPrefix(varName, varPrefix) {
2023-06-28 09:12:13 +08:00
return "${" + varName + "}" // keep origin variable
}
2023-06-28 16:19:05 +08:00
return Message(langCode, varName[len(varPrefix):])
2023-06-28 09:12:13 +08:00
})
}
// Load 加载消息定义
// Load message definitions from map
2023-06-28 16:19:05 +08:00
func Load(langCode LangCode, messageMap map[string]string) {
2023-06-28 09:12:13 +08:00
lang, ok := defaultManager.GetLang(langCode)
if !ok {
lang = defaultManager.AddLang(langCode)
}
for messageCode, messageText := range messageMap {
lang.Set(messageCode, messageText)
}
}