package app import ( "joybuywork/internal/consts" "encoding/json" "fmt" "os" "path/filepath" "runtime" "strings" ) const ( FixRewardsIdThank = -1 FixRewardsIdChallengeFailed = -2 FixRewardsIdEggFailed = -3 ) type FixReward struct { langKey string Id int64 `json:"id"` RewardTitle string `json:"reward_title"` Langs []*FixRewardLang `json:"langs"` } type FixRewardLang struct { Title string `json:"title"` ImgUrl string `json:"img_url"` Mark string `json:"mark"` IsDefault bool `json:"is_default"` } var FissionFixRewards []*FixReward // LangDataInit 初始化固定奖品 func LangDataInit() (err error) { FissionFixRewards = append(FissionFixRewards, &FixReward{ langKey: "thank", Id: FixRewardsIdThank, RewardTitle: "NEXT TIME", Langs: nil, }, &FixReward{ langKey: "challenge_failed", RewardTitle: "FAILED", Id: FixRewardsIdChallengeFailed, Langs: nil, }, &FixReward{ langKey: "thank", Id: FixRewardsIdEggFailed, RewardTitle: "NEXT TIME", Langs: nil, }) path := GetI18nFilePath() entrys, err := os.ReadDir(path) if err != nil { return } var langMap = make(map[string]map[string]string) for _, entry := range entrys { if !strings.HasSuffix(entry.Name(), ".json") { continue } mark, _ := strings.CutSuffix(entry.Name(), ".json") var ddd = make(map[string]string) var b []byte b, err = os.ReadFile(path + "/" + entry.Name()) if err != nil { return } err = json.Unmarshal(b, &ddd) if err != nil { return } langMap[mark] = ddd } for _, reward := range FissionFixRewards { imgUrl := consts.TempInfoImgDefaultValue switch reward.Id { case -3: imgUrl = "ftg/gashapon/default_thank.png" } for mark, ddd := range langMap { reward.Langs = append(reward.Langs, &FixRewardLang{ Title: ddd[reward.langKey], ImgUrl: imgUrl, Mark: mark, IsDefault: mark == consts.LangEn, }) TalkMap.set(mark, ddd) } } return } type TalkMapType map[string]map[string]string var TalkMap TalkMapType = make(map[string]map[string]string) func (t TalkMapType) val(lang, mark string) string { langs, ok := t[lang] if !ok { return "" } return langs[mark] } func (t TalkMapType) set(lang string, data map[string]string) { if _, ok := t[lang]; !ok { t[lang] = make(map[string]string) } for k, v := range data { switch k { case "active_talk", "complete_task_talk", "task_reset_talk", "dog_offline_talk": t[lang][k] = v } } } func (t TalkMapType) DogOffline(lang string) string { return t.val(lang, "dog_offline_talk") } func (t TalkMapType) TaskReset(lang string) string { return t.val(lang, "task_reset_talk") } func (t TalkMapType) Active(lang string) string { return t.val(lang, "active_talk") } func (t TalkMapType) CompeteTask(lang string) string { return t.val(lang, "complete_task_talk") } // GetI18nFilePath 获取i18n文件路径 func GetI18nFilePath() string { if !consts.RunTest { dir, _ := os.Getwd() return fmt.Sprintf("%s/asset/campaign/lang", dir) } _, filename, _, _ := runtime.Caller(0) current := filepath.Dir(filename) return fmt.Sprintf("%s/../../asset/campaign/lang", current) }