...

Source file src/github.com/chai2010/gettext-go/fs_json.go

Documentation: github.com/chai2010/gettext-go

     1  // Copyright 2020 ChaiShushan <chaishushan{AT}gmail.com>. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     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"`      // msgctxt context
    18  			MsgId       string   `json:"msgid"`        // msgid untranslated-string
    19  			MsgIdPlural string   `json:"msgid_plural"` // msgid_plural untranslated-string-plural
    20  			MsgStr      []string `json:"msgstr"`       // msgstr translated-string
    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