-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathlanguage-locales.go
90 lines (74 loc) · 1.97 KB
/
language-locales.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
package main
import (
"os"
"path/filepath"
"strings"
"github.com/zyedidia/generic/mapset"
)
func createLanguageLocales() (map[string][]string, error) {
cldrDatesFullDir := filepath.Join(RAW_DIR, "cldr-dates-full", "main")
// Fetch all CLDR languages and their locales
dirItems, err := os.ReadDir(cldrDatesFullDir)
if err != nil {
return nil, err
}
languageNames := mapset.New[string]()
languageLocales := map[string][]string{}
for _, item := range dirItems {
if !item.IsDir() {
continue
}
// Check if dir name contains locale. If false, then this locale is the
// "language" which will become parents for several sub-locales.
name := item.Name()
locale := rxLocale.FindString(name)
if locale == "" {
languageNames.Put(name)
if _, exist := languageLocales[name]; !exist {
languageLocales[name] = []string{}
}
} else {
language := strings.TrimSuffix(name, locale)
languageLocales[language] = append(languageLocales[language], name)
}
}
// Remove invalid or excluded language
for language := range languageLocales {
isValid := languageNames.Has(language)
_, isExcluded := excludedLanguages[language]
if !isValid || isExcluded || language == "root" {
delete(languageLocales, language)
}
}
// Add supplementary languages to the map
supplementaryLanguages, err := getSupplementaryLanguages()
if err != nil {
return nil, err
}
for _, language := range supplementaryLanguages {
if _, exist := languageLocales[language]; !exist {
languageLocales[language] = []string{}
}
}
return languageLocales, nil
}
func getSupplementaryLanguages() ([]string, error) {
dirItems, err := os.ReadDir(SUPPLEMENTARY_DIR)
if err != nil {
return nil, err
}
var languages []string
for _, item := range dirItems {
if item.IsDir() {
continue
}
name := item.Name()
ext := filepath.Ext(name)
if ext != ".yaml" {
continue
}
name = strings.TrimSuffix(name, ext)
languages = append(languages, name)
}
return languages, nil
}