mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-19 18:02:01 +00:00
92 lines
2.1 KiB
Go
92 lines
2.1 KiB
Go
// Copyright 2013 ChaiShushan <chaishushan{AT}gmail.com>. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package gettext
|
|
|
|
import (
|
|
"archive/zip"
|
|
"bytes"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"os"
|
|
"sort"
|
|
"strings"
|
|
)
|
|
|
|
type osFS struct {
|
|
root string
|
|
}
|
|
|
|
func newOsFS(root string) FileSystem {
|
|
// locale zip file
|
|
if fi, err := os.Stat(root); err == nil && !fi.IsDir() {
|
|
if strings.HasSuffix(strings.ToLower(root), ".zip") {
|
|
if x, err := ioutil.ReadFile(root); err == nil {
|
|
if r, err := zip.NewReader(bytes.NewReader(x), int64(len(x))); err == nil {
|
|
return ZipFS(r, root)
|
|
}
|
|
}
|
|
}
|
|
if strings.HasSuffix(strings.ToLower(root), ".json") {
|
|
if x, err := ioutil.ReadFile(root); err == nil {
|
|
if fs, err := newJson(x, root); err == nil {
|
|
return fs
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// locale dir
|
|
return &osFS{root: root}
|
|
}
|
|
|
|
func (p *osFS) LocaleList() []string {
|
|
list, err := ioutil.ReadDir(p.root)
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
ssMap := make(map[string]bool)
|
|
for _, dir := range list {
|
|
if dir.IsDir() {
|
|
ssMap[dir.Name()] = true
|
|
}
|
|
}
|
|
var locales = make([]string, 0, len(ssMap))
|
|
for s := range ssMap {
|
|
locales = append(locales, s)
|
|
}
|
|
sort.Strings(locales)
|
|
return locales
|
|
}
|
|
|
|
func (p *osFS) LoadMessagesFile(domain, locale, ext string) ([]byte, error) {
|
|
trName := p.makeMessagesFileName(domain, locale, ext)
|
|
rcData, err := ioutil.ReadFile(trName)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return rcData, nil
|
|
}
|
|
|
|
func (p *osFS) LoadResourceFile(domain, locale, name string) ([]byte, error) {
|
|
rcName := p.makeResourceFileName(domain, locale, name)
|
|
rcData, err := ioutil.ReadFile(rcName)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return rcData, nil
|
|
}
|
|
|
|
func (p *osFS) String() string {
|
|
return "gettext.localfs(" + p.root + ")"
|
|
}
|
|
|
|
func (p *osFS) makeMessagesFileName(domain, lang, ext string) string {
|
|
return fmt.Sprintf("%s/%s/LC_MESSAGES/%s%s", p.root, lang, domain, ext)
|
|
}
|
|
|
|
func (p *osFS) makeResourceFileName(domain, lang, name string) string {
|
|
return fmt.Sprintf("%s/%s/LC_RESOURCE/%s/%s", p.root, lang, domain, name)
|
|
}
|