You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

71 lines
1.5 KiB

package cacheApi
import (
"epur-pay/model"
"epur-pay/pkg/rds"
"epur-pay/pkg/utils"
"sync"
)
type Language struct {
List []model.SysLanguage
Map *sync.Map
TranslateMap *sync.Map
DefaultLanguage string
duplicate *Language
}
func (p *Language) Refresh() *Language {
p.duplicate = &Language{}
p.duplicate.Map = new(sync.Map)
p.duplicate.TranslateMap = new(sync.Map)
utils.Error(rds.DB.Raw(`select * from sys_language order by sort`).Scan(&p.duplicate.List).Error)
for _, v := range p.duplicate.List {
if v.IsDefault == "0" {
p.duplicate.DefaultLanguage = v.Akey
}
}
if len(p.duplicate.DefaultLanguage) <= 0 {
p.duplicate.DefaultLanguage = "en_US"
}
// 资源文件
translate := []model.Translate{}
utils.Error(rds.DB.Table(model.Translate{}.TableName()).Where(`type = ?`, 0).Order(`id asc`).Scan(&translate).Error)
for idx, v := range translate {
p.duplicate.TranslateMap.Store(v.LanguageKey, translate[idx].To)
}
return p.duplicate
}
func (p *Language) GetLang(lang string, key string) string {
if trans, ok := p.TranslateMap.Load(key); ok {
for _, v := range trans.(model.TranslateTos) {
if v.GoogleKey == lang {
return v.To
}
}
}
return ""
}
func (p *Language) GetTranslate(key string) model.TranslateTos {
if row, ok := p.TranslateMap.Load(key); ok {
return row.(model.TranslateTos)
}
return nil
}
func (p *Language) GetDefaultLang(key string) string {
row, _ := p.Map.Load(p.DefaultLanguage)
result, _ := row.(*sync.Map).Load(key)
return result.(string)
}