package services import ( "app/commons/constant" "app/commons/model/entity" ) var ( i18nService *I18nService prefix = "" i18nMap map[string]map[string]string // 语言数据 ) // I18nService 国际化服务 type I18nService struct { CommonService } func i18nInit() { i18nService = &I18nService{} _ = i18nService.refreshCache() } func GetI18nService() *I18nService { if i18nService == nil { i18nInit() } return i18nService } func (s *I18nService) refreshCache() error { // 查询所有国际化数据 var i18ns []*entity.SysI18n if err := s.DB().Find(&i18ns).Error; err != nil { return err } // 删除旧数据 i18nMap = make(map[string]map[string]string) // 按语言分组 for _, i18n := range i18ns { if _, ok := i18nMap[i18n.Lang]; !ok { i18nMap[i18n.Lang] = make(map[string]string) } i18nMap[i18n.Lang][i18n.Name] = i18n.Text } return nil } // 通过keyName 获取多语言场景 func (s *I18nService) Translate(lang string, i18nKey string) string { lang = s.langCompatibility(lang) if text, ok := i18nMap[lang][i18nKey]; ok { return text } _ = s.DB().Create(&entity.SysI18n{ Lang: lang, Name: i18nKey, Text: i18nKey, }).Error _ = s.refreshCache() return i18nKey } func (s *I18nService) langCompatibility(lang string) string { return constant.LangCompatibility(lang) }