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