forked from cadey/xesite
47 lines
744 B
Go
47 lines
744 B
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"encoding/json"
|
||
|
"fmt"
|
||
|
"io"
|
||
|
)
|
||
|
|
||
|
type locale map[string]map[string]string
|
||
|
|
||
|
func (l locale) Value(group, key string, args ...interface{}) string {
|
||
|
sg, ok := l[group]
|
||
|
if !ok {
|
||
|
return "no group " + group
|
||
|
}
|
||
|
|
||
|
result, ok := sg[key]
|
||
|
if !ok {
|
||
|
return fmt.Sprintf("in group %s, no key %s", group, key)
|
||
|
}
|
||
|
|
||
|
return fmt.Sprintf(result, args...)
|
||
|
}
|
||
|
|
||
|
type translations struct {
|
||
|
locales map[string]locale
|
||
|
}
|
||
|
|
||
|
func (t *translations) LoadLocale(name string, r io.Reader) error {
|
||
|
l := locale{}
|
||
|
d := json.NewDecoder(r)
|
||
|
err := d.Decode(&l)
|
||
|
if err == nil {
|
||
|
t.locales[name] = l
|
||
|
}
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
func (t *translations) Get(name string) (locale, bool) {
|
||
|
l, ok := t.locales[name]
|
||
|
if !ok {
|
||
|
return nil, false
|
||
|
}
|
||
|
|
||
|
return l, ok
|
||
|
}
|