...
1
2
3
4
5 package gettext
6
7 import (
8 "encoding/json"
9 "fmt"
10 "sort"
11 )
12
13 type jsonFS struct {
14 name string
15 x map[string]struct {
16 LC_MESSAGES map[string][]struct {
17 MsgContext string `json:"msgctxt"`
18 MsgId string `json:"msgid"`
19 MsgIdPlural string `json:"msgid_plural"`
20 MsgStr []string `json:"msgstr"`
21 }
22 LC_RESOURCE map[string]map[string]string
23 }
24 }
25
26 func isJsonData() bool {
27 return false
28 }
29
30 func newJson(jsonData []byte, name string) (*jsonFS, error) {
31 p := &jsonFS{name: name}
32 if err := json.Unmarshal(jsonData, &p.x); err != nil {
33 return nil, err
34 }
35
36 return p, nil
37 }
38
39 func (p *jsonFS) LocaleList() []string {
40 var ss []string
41 for lang := range p.x {
42 ss = append(ss, lang)
43 }
44 sort.Strings(ss)
45 return ss
46 }
47
48 func (p *jsonFS) LoadMessagesFile(domain, lang, ext string) ([]byte, error) {
49 if v, ok := p.x[lang]; ok {
50 if v, ok := v.LC_MESSAGES[domain+ext]; ok {
51 return json.Marshal(v)
52 }
53 }
54 return nil, fmt.Errorf("not found")
55 }
56 func (p *jsonFS) LoadResourceFile(domain, lang, name string) ([]byte, error) {
57 if v, ok := p.x[lang]; ok {
58 if v, ok := v.LC_RESOURCE[domain]; ok {
59 return []byte(v[name]), nil
60 }
61 }
62 return nil, fmt.Errorf("not found")
63 }
64 func (p *jsonFS) String() string {
65 return "gettext.nilfs(" + p.name + ")"
66 }
67
View as plain text