-
Notifications
You must be signed in to change notification settings - Fork 6
/
lang.go
129 lines (111 loc) · 2.67 KB
/
lang.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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
package timeago
import (
"fmt"
"log"
"path"
"runtime"
)
type lang struct {
Ago string
Online string
JustNow string
Second string
Seconds string
SecondsSpecial string
Minute string
Minutes string
MinutesSpecial string
Hour string
Hours string
HoursSpecial string
Day string
Days string
DaysSpecial string
Week string
Weeks string
WeeksSpecial string
Month string
Months string
MonthsSpecial string
Year string
Years string
YearsSpecial string
}
// getTimeTranslations returns array of translations for different
// cases. For example `1 second` must not have `s` at the end
// but `2 seconds` requires `s`. So this method keeps all
// possible options for the translated word.
func getTimeTranslations() map[string]map[string]string {
return map[string]map[string]string{
"seconds": {
"single": trans().Second,
"plural": trans().Seconds,
"special": trans().SecondsSpecial,
},
"minutes": {
"single": trans().Minute,
"plural": trans().Minutes,
"special": trans().MinutesSpecial,
},
"hours": {
"single": trans().Hour,
"plural": trans().Hours,
"special": trans().HoursSpecial,
},
"days": {
"single": trans().Day,
"plural": trans().Days,
"special": trans().DaysSpecial,
},
"weeks": {
"single": trans().Week,
"plural": trans().Weeks,
"special": trans().WeeksSpecial,
},
"months": {
"single": trans().Month,
"plural": trans().Months,
"special": trans().MonthsSpecial,
},
"years": {
"single": trans().Year,
"plural": trans().Years,
"special": trans().YearsSpecial,
},
}
}
func getLanguageForm(num int) string {
lastDigit := getLastNumberDigit(num)
rule := getRules(num, lastDigit)[config.Language]
switch {
case rule.Special:
return "special"
case rule.Single:
return "single"
case rule.Plural:
return "plural"
}
fmt.Printf("Provided rules don't apply to a number %d", num)
return ""
}
func trans() lang {
_, filename, _, ok := runtime.Caller(0)
if !ok {
panic("No caller information")
}
rootPath := path.Dir(filename)
filePath := fmt.Sprintf(rootPath+"/langs/%s.json", config.Language)
if cachedResult, ok := cachedJsonResults[filePath]; ok {
return cachedResult
}
thereIsFile, err := fileExists(filePath)
if !thereIsFile {
log.Fatalf("File with the path: %s, doesn't exist", filePath)
}
if err != nil {
log.Fatalf("Error while trying to read file %s. Error: %v", filePath, err)
}
parseResult := parseJsonIntoLang(filePath)
cachedJsonResults[filePath] = parseResult
return parseResult
}