...

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

Documentation: github.com/chai2010/gettext-go

     1  // Copyright 2013 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  	"archive/zip"
     9  	"bytes"
    10  	"fmt"
    11  )
    12  
    13  type FileSystem interface {
    14  	LocaleList() []string
    15  	LoadMessagesFile(domain, lang, ext string) ([]byte, error)
    16  	LoadResourceFile(domain, lang, name string) ([]byte, error)
    17  	String() string
    18  }
    19  
    20  func NewFS(name string, x interface{}) FileSystem {
    21  	if x == nil {
    22  		if name != "" {
    23  			return OS(name)
    24  		}
    25  		return NilFS(name)
    26  	}
    27  
    28  	switch x := x.(type) {
    29  	case []byte:
    30  		if len(x) == 0 {
    31  			return OS(name)
    32  		}
    33  		if r, err := zip.NewReader(bytes.NewReader(x), int64(len(x))); err == nil {
    34  			return ZipFS(r, name)
    35  		}
    36  		if fs, err := newJson(x, name); err == nil {
    37  			return fs
    38  		}
    39  	case string:
    40  		if len(x) == 0 {
    41  			return OS(name)
    42  		}
    43  		if r, err := zip.NewReader(bytes.NewReader([]byte(x)), int64(len(x))); err == nil {
    44  			return ZipFS(r, name)
    45  		}
    46  		if fs, err := newJson([]byte(x), name); err == nil {
    47  			return fs
    48  		}
    49  	case FileSystem:
    50  		return x
    51  	}
    52  
    53  	return NilFS(name)
    54  }
    55  
    56  func OS(root string) FileSystem {
    57  	return newOsFS(root)
    58  }
    59  
    60  func ZipFS(r *zip.Reader, name string) FileSystem {
    61  	return newZipFS(r, name)
    62  }
    63  
    64  func NilFS(name string) FileSystem {
    65  	return &nilFS{name}
    66  }
    67  
    68  type nilFS struct {
    69  	name string
    70  }
    71  
    72  func (p *nilFS) LocaleList() []string {
    73  	return nil
    74  }
    75  
    76  func (p *nilFS) LoadMessagesFile(domain, lang, ext string) ([]byte, error) {
    77  	return nil, fmt.Errorf("not found")
    78  }
    79  func (p *nilFS) LoadResourceFile(domain, lang, name string) ([]byte, error) {
    80  	return nil, fmt.Errorf("not found")
    81  }
    82  func (p *nilFS) String() string {
    83  	return "gettext.nilfs(" + p.name + ")"
    84  }
    85  

View as plain text