-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathlangset.go
91 lines (73 loc) · 1.98 KB
/
langset.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package timeago
import (
"fmt"
"path"
"runtime"
"github.com/SerhiiCho/timeago/v3/internal/utils"
)
type LangForms map[string]string
type LangSet struct {
Lang string `json:"lang"`
Format string `json:"format"`
Ago string `json:"ago"`
Online string `json:"online"`
JustNow string `json:"justnow"`
Second LangForms `json:"second"`
Minute LangForms `json:"minute"`
Hour LangForms `json:"hour"`
Day LangForms `json:"day"`
Week LangForms `json:"week"`
Month LangForms `json:"month"`
Year LangForms `json:"year"`
}
func newLangSet() (*LangSet, error) {
_, filename, _, ok := runtime.Caller(0)
if !ok {
return nil, utils.Errorf("No called information")
}
rootPath := path.Dir(filename)
filePath := fmt.Sprintf(rootPath+"/langs/%s.json", conf.Language)
if cache, ok := cachedJsonRes[filePath]; ok {
return cache, nil
}
langSet := parseLangSet(filePath)
langSet = applyCustomTranslations(langSet)
cachedJsonRes[filePath] = langSet
return langSet, nil
}
func applyCustomTranslations(langSet *LangSet) *LangSet {
if len(conf.Translations) == 0 {
return langSet
}
for _, trans := range conf.Translations {
if trans.Lang != langSet.Lang {
continue
}
mergeSetValue(trans.Lang, &langSet.Lang)
mergeSetValue(trans.Format, &langSet.Format)
mergeSetValue(trans.Ago, &langSet.Ago)
mergeSetValue(trans.Online, &langSet.Online)
mergeSetValue(trans.JustNow, &langSet.JustNow)
mergeLangForms(langSet.Second, trans.Second)
mergeLangForms(langSet.Minute, trans.Minute)
mergeLangForms(langSet.Hour, trans.Hour)
mergeLangForms(langSet.Day, trans.Day)
mergeLangForms(langSet.Week, trans.Week)
mergeLangForms(langSet.Month, trans.Month)
mergeLangForms(langSet.Year, trans.Year)
}
return langSet
}
func mergeSetValue(newVal string, currVal *string) {
if newVal != "" {
*currVal = newVal
}
}
func mergeLangForms(curr, langForms LangForms) {
if len(langForms) == 0 {
return
}
for k, v := range langForms {
curr[k] = v
}
}