-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcatalog.go
More file actions
50 lines (40 loc) · 1.13 KB
/
catalog.go
File metadata and controls
50 lines (40 loc) · 1.13 KB
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
package i18n
import "golang.org/x/text/language"
type Catalog struct {
Languages map[string]Translator
}
func NewEmptyCatalog() *Catalog {
return &Catalog{Languages: make(map[string]Translator)}
}
func NewCatalog(defaultLang language.Tag, defaultTrans Translator) *Catalog {
return &Catalog{Languages: map[string]Translator{
defaultLang.String(): defaultTrans,
}}
}
func (c *Catalog) SupportedLanguages() []string {
var languageCodes []string
for lang := range c.Languages {
languageCodes = append(languageCodes, lang)
}
return languageCodes
}
func (c *Catalog) AddLanguage(language language.Tag, translator Translator) {
c.Languages[language.String()] = translator
}
func (c *Catalog) GetTranslator(language language.Tag) Translator {
return c.Languages[language.String()]
}
func (c *Catalog) Quick(language language.Tag) QuickAdd {
return QuickAdd{c: c, lang: language}
}
type QuickAdd struct {
c *Catalog
lang language.Tag
}
func (q QuickAdd) Add(translator interface{}, err error) {
if err == nil && translator != nil {
if trans, ok := translator.(Translator); ok {
q.c.Languages[q.lang.String()] = trans
}
}
}