timeago.mergeSetValue   A
last analyzed

Complexity

Conditions 2

Size

Total Lines 3
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 3
dl 0
loc 3
rs 10
c 0
b 0
f 0
nop 2
1
package timeago
2
3
import (
4
	"embed"
5
	"fmt"
6
)
7
8
//go:embed langs/*.json
9
var langsFS embed.FS
10
11
type LangForms map[string]string
12
13
type LangSet struct {
14
	Lang    string    `json:"lang"`
15
	Format  string    `json:"format"`
16
	Ago     string    `json:"ago"`
17
	Online  string    `json:"online"`
18
	JustNow string    `json:"justnow"`
19
	Second  LangForms `json:"second"`
20
	Minute  LangForms `json:"minute"`
21
	Hour    LangForms `json:"hour"`
22
	Day     LangForms `json:"day"`
23
	Week    LangForms `json:"week"`
24
	Month   LangForms `json:"month"`
25
	Year    LangForms `json:"year"`
26
}
27
28
func newLangSet() (*LangSet, error) {
29
	filePath := fmt.Sprintf("langs/%s.json", conf.Language)
30
31
	if cache, ok := cachedJsonRes[filePath]; ok {
32
		return cache, nil
33
	}
34
35
	langSet, err := parseLangSet(filePath)
36
	if err != nil {
37
		return nil, err
38
	}
39
40
	langSet = applyCustomTranslations(langSet)
41
42
	cachedJsonRes[filePath] = langSet
43
44
	return langSet, nil
45
}
46
47
func applyCustomTranslations(langSet *LangSet) *LangSet {
48
	if len(conf.Translations) == 0 {
49
		return langSet
50
	}
51
52
	for _, trans := range conf.Translations {
53
		if trans.Lang != langSet.Lang {
54
			continue
55
		}
56
57
		mergeSetValue(trans.Lang, &langSet.Lang)
58
		mergeSetValue(trans.Format, &langSet.Format)
59
		mergeSetValue(trans.Ago, &langSet.Ago)
60
		mergeSetValue(trans.Online, &langSet.Online)
61
		mergeSetValue(trans.JustNow, &langSet.JustNow)
62
63
		mergeLangForms(langSet.Second, trans.Second)
64
		mergeLangForms(langSet.Minute, trans.Minute)
65
		mergeLangForms(langSet.Hour, trans.Hour)
66
		mergeLangForms(langSet.Day, trans.Day)
67
		mergeLangForms(langSet.Week, trans.Week)
68
		mergeLangForms(langSet.Month, trans.Month)
69
		mergeLangForms(langSet.Year, trans.Year)
70
	}
71
72
	return langSet
73
}
74
75
func mergeSetValue(newVal string, currVal *string) {
76
	if newVal != "" {
77
		*currVal = newVal
78
	}
79
}
80
81
func mergeLangForms(curr, langForms LangForms) {
82
	if len(langForms) == 0 {
83
		return
84
	}
85
86
	for k, v := range langForms {
87
		curr[k] = v
88
	}
89
}
90