timeago.newLangSet   A
last analyzed

Complexity

Conditions 3

Size

Total Lines 19
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 12
dl 0
loc 19
rs 9.8
c 0
b 0
f 0
nop 0
1
package timeago
2
3
import (
4
	"fmt"
5
	"path"
6
	"runtime"
7
8
	"github.com/SerhiiCho/timeago/v3/internal/utils"
9
)
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
	_, filename, _, ok := runtime.Caller(0)
30
	if !ok {
31
		return nil, utils.Errorf("No called information")
32
	}
33
34
	rootPath := path.Dir(filename)
35
	filePath := fmt.Sprintf(rootPath+"/langs/%s.json", conf.Language)
36
37
	if cache, ok := cachedJsonRes[filePath]; ok {
38
		return cache, nil
39
	}
40
41
	langSet := parseLangSet(filePath)
42
	langSet = applyCustomTranslations(langSet)
43
44
	cachedJsonRes[filePath] = langSet
45
46
	return langSet, nil
47
}
48
49
func applyCustomTranslations(langSet *LangSet) *LangSet {
50
	if len(conf.Translations) == 0 {
51
		return langSet
52
	}
53
54
	for _, trans := range conf.Translations {
55
		if trans.Lang != langSet.Lang {
56
			continue
57
		}
58
59
		mergeSetValue(trans.Lang, &langSet.Lang)
60
		mergeSetValue(trans.Format, &langSet.Format)
61
		mergeSetValue(trans.Ago, &langSet.Ago)
62
		mergeSetValue(trans.Online, &langSet.Online)
63
		mergeSetValue(trans.JustNow, &langSet.JustNow)
64
65
		mergeLangForms(langSet.Second, trans.Second)
66
		mergeLangForms(langSet.Minute, trans.Minute)
67
		mergeLangForms(langSet.Hour, trans.Hour)
68
		mergeLangForms(langSet.Day, trans.Day)
69
		mergeLangForms(langSet.Week, trans.Week)
70
		mergeLangForms(langSet.Month, trans.Month)
71
		mergeLangForms(langSet.Year, trans.Year)
72
	}
73
74
	return langSet
75
}
76
77
func mergeSetValue(newVal string, currVal *string) {
78
	if newVal != "" {
79
		*currVal = newVal
80
	}
81
}
82
83
func mergeLangForms(curr, langForms LangForms) {
84
	if len(langForms) == 0 {
85
		return
86
	}
87
88
	for k, v := range langForms {
89
		curr[k] = v
90
	}
91
}
92