-
Notifications
You must be signed in to change notification settings - Fork 5
/
language_code.go
119 lines (105 loc) · 2.8 KB
/
language_code.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
package domain
import (
"strings"
"github.com/srvc/fail"
)
// LanguageCode according to ISO 639-3
type LanguageCode string
// These are all the possible values for LanguageCode
// This list is not yet complete, it's just a start
// Language codes from:
// https://en.wikipedia.org/wiki/Wikipedia:WikiProject_Languages/List_of_ISO_639-3_language_codes_(2019)
const (
Global LanguageCode = "GLO" // This is uppercase so it wouldn't collide with Galambu
Arabic LanguageCode = "ara"
Chinese LanguageCode = "zho"
Croatian LanguageCode = "hrv"
Czech LanguageCode = "ces"
Dutch LanguageCode = "nld"
English LanguageCode = "eng"
Esperanto LanguageCode = "epo"
Finnish LanguageCode = "fin"
French LanguageCode = "fra"
German LanguageCode = "deu"
Greek LanguageCode = "ell"
Hebrew LanguageCode = "heb"
Hungarian LanguageCode = "hun"
Irish LanguageCode = "gle"
Italian LanguageCode = "ita"
Japanese LanguageCode = "jpn"
Korean LanguageCode = "kor"
Latin LanguageCode = "lat"
Polish LanguageCode = "pol"
Portuguese LanguageCode = "por"
Russian LanguageCode = "rus"
Spanish LanguageCode = "spa"
Swedish LanguageCode = "swe"
Thai LanguageCode = "tha"
Tagalog LanguageCode = "tgl"
Turkish LanguageCode = "tur"
)
// LanguageCodes is a collection of language codes
type LanguageCodes []LanguageCode
// AllLanguageCodes is an array with all possible language codes
var AllLanguageCodes = LanguageCodes{
Global,
Arabic,
Chinese,
Croatian,
Czech,
Dutch,
Esperanto,
English,
Finnish,
French,
German,
Greek,
Hebrew,
Hungarian,
Irish,
Italian,
Japanese,
Korean,
Latin,
Polish,
Portuguese,
Russian,
Spanish,
Swedish,
Thai,
Tagalog,
Turkish,
}
// ContainsLanguage is a helper to figure out if a collection of languages contains the target language
func (codes LanguageCodes) ContainsLanguage(target LanguageCode) bool {
for _, code := range codes {
if code == target {
return true
}
}
return false
}
// ErrInvalidLanguage for when a language is not defined in our app
var ErrInvalidLanguage = fail.New("supplied language is not supported")
// Validate a language code
func (code LanguageCode) Validate() (bool, error) {
for _, possibleCode := range AllLanguageCodes {
if possibleCode == code {
return true, nil
}
}
return false, ErrInvalidLanguage
}
// Len is the number of elements in the collection.
func (codes LanguageCodes) Len() int {
return len(codes)
}
// Swap swaps the elements with indexes i and j.
func (codes LanguageCodes) Swap(i, j int) {
codes[i], codes[j] = codes[j], codes[i]
}
// Less reports whether the element with
// index i should sort before the element with index j.
func (codes LanguageCodes) Less(i, j int) bool {
return strings.Compare(string(codes[i]), string(codes[j])) >= 0
}