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

156 lines
3.2 KiB
Go

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