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
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)
|
|
}
|