-
Notifications
You must be signed in to change notification settings - Fork 0
/
i18n.go
68 lines (57 loc) · 1.43 KB
/
i18n.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
package uos
import (
"github.com/vorlif/spreak"
"golang.org/x/text/language"
)
var i18n *spreak.Bundle
func setupInternationalization() {
if Config.I18N.Locale == "" {
Log.Info("no locale specified - skip i18n initialization")
return
}
if len(Config.I18N.Languages) == 0 {
Log.Info("no languages specified - skip i18n initialization")
return
}
langCodes := make([]interface{}, len(Config.I18N.Languages))
for i, langConfig := range Config.I18N.Languages {
code, err := language.Parse(langConfig)
if err != nil {
Log.PanicContext(
"invalid language configuration",
LogContext{"error": err, "lang": langConfig},
)
panic("invalid language configuration")
}
langCodes[i] = code
}
Log.Info("initialize i18n")
bundle, err := spreak.NewBundle(
spreak.WithSourceLanguage(langCodes[0].(language.Tag)),
spreak.WithDomainPath(spreak.NoDomain, Config.I18N.Locale),
spreak.WithLanguage(langCodes[1:]...),
)
if err != nil {
Log.PanicError("could not initialize i18n", err)
}
i18n = bundle
}
type wrappedLocalizer struct {
lang string
loc *spreak.Localizer
}
func getLocalizer(lang string) *wrappedLocalizer {
if i18n == nil {
return nil
}
return &wrappedLocalizer{
lang: lang,
loc: spreak.NewLocalizer(i18n, lang),
}
}
func (l *wrappedLocalizer) Lang() string {
return l.lang
}
func (l *wrappedLocalizer) Tr(message string, vars ...interface{}) string {
return l.loc.Getf(message, vars...)
}