add i18n embedding
parent
c5dd598ac8
commit
9c1d6a5bbe
@ -0,0 +1,90 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"github.com/urfave/cli"
|
||||
|
||||
"github.com/bradrydzewski/togo/template"
|
||||
)
|
||||
|
||||
type (
|
||||
i18nParams struct {
|
||||
Package string
|
||||
Files []*i18nFile
|
||||
}
|
||||
i18nFile struct {
|
||||
Base string
|
||||
Name string
|
||||
Path string
|
||||
Ext string
|
||||
Data string
|
||||
}
|
||||
)
|
||||
|
||||
var i18nCommand = cli.Command{
|
||||
Name: "i18n",
|
||||
Usage: "embed i18n files",
|
||||
Action: i18nAction,
|
||||
Flags: []cli.Flag{
|
||||
cli.StringFlag{
|
||||
Name: "package",
|
||||
Value: "i18n",
|
||||
},
|
||||
cli.StringFlag{
|
||||
Name: "input",
|
||||
Value: "files/*.all.json",
|
||||
},
|
||||
cli.StringFlag{
|
||||
Name: "output",
|
||||
Value: "i18n_gen.go",
|
||||
},
|
||||
cli.BoolFlag{
|
||||
Name: "encode",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
func i18nAction(c *cli.Context) error {
|
||||
pattern := c.Args().First()
|
||||
if pattern == "" {
|
||||
pattern = c.String("input")
|
||||
}
|
||||
|
||||
matches, err := filepath.Glob(pattern)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
params := i18nParams{
|
||||
Package: c.String("package"),
|
||||
}
|
||||
|
||||
for _, match := range matches {
|
||||
raw, ioerr := ioutil.ReadFile(match)
|
||||
if ioerr != nil {
|
||||
return ioerr
|
||||
}
|
||||
params.Files = append(params.Files, &i18nFile{
|
||||
Path: match,
|
||||
Name: filepath.Base(match),
|
||||
Base: strings.TrimSuffix(filepath.Base(match), filepath.Ext(match)),
|
||||
Ext: filepath.Ext(match),
|
||||
Data: string(raw),
|
||||
})
|
||||
}
|
||||
|
||||
wr := os.Stdout
|
||||
if output := c.String("output"); output != "" {
|
||||
wr, err = os.Create(output)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer wr.Close()
|
||||
}
|
||||
|
||||
return template.Execute(wr, "i18n.tmpl", params)
|
||||
}
|
@ -0,0 +1,8 @@
|
||||
{
|
||||
"greeting": {
|
||||
"other": "Hello"
|
||||
},
|
||||
"welcome": {
|
||||
"other": "Welcome"
|
||||
}
|
||||
}
|
@ -0,0 +1 @@
|
||||
{}
|
@ -0,0 +1,5 @@
|
||||
- id: greeting
|
||||
translation: Hello
|
||||
|
||||
- id: welcome
|
||||
translation: Welcome
|
@ -0,0 +1,8 @@
|
||||
{
|
||||
"greeting": {
|
||||
"other": ""
|
||||
},
|
||||
"welcome": {
|
||||
"other": ""
|
||||
}
|
||||
}
|
@ -0,0 +1,8 @@
|
||||
{
|
||||
"greeting": {
|
||||
"other": "Hello"
|
||||
},
|
||||
"welcome": {
|
||||
"other": "Welcome"
|
||||
}
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
- id: greeting
|
||||
translation: Hola
|
||||
|
||||
- id: welcome
|
||||
translation: Bienvenidos
|
@ -0,0 +1,8 @@
|
||||
{
|
||||
"greeting": {
|
||||
"other": "Bonjour"
|
||||
},
|
||||
"welcome": {
|
||||
"other": "Bienvenue"
|
||||
}
|
||||
}
|
@ -0,0 +1 @@
|
||||
{}
|
@ -0,0 +1,5 @@
|
||||
- id: greeting
|
||||
translation: Bonjour
|
||||
|
||||
- id: welcome
|
||||
translation: Bienvenue
|
@ -0,0 +1,8 @@
|
||||
{
|
||||
"greeting": {
|
||||
"other": "Hello"
|
||||
},
|
||||
"welcome": {
|
||||
"other": "Welcome"
|
||||
}
|
||||
}
|
@ -0,0 +1 @@
|
||||
{}
|
@ -0,0 +1,12 @@
|
||||
package i18n
|
||||
|
||||
//go:generate goi18n -flat -outdir files files/en-us.yaml
|
||||
//go:generate goi18n -flat -outdir files files/fr-fr.yaml files/en-us.yaml
|
||||
//go:generate goi18n -flat -outdir files files/es-es.yaml files/en-us.yaml
|
||||
//go:generate goi18n -flat -outdir files files/zh-cn.yaml files/en-us.yaml
|
||||
|
||||
//go:generate goi18n -flat -outdir files files/fr-fr.all.json files/fr-fr.untranslated.json files/en-us.all.json
|
||||
//go:generate goi18n -flat -outdir files files/fr-fr.all.json files/es-es.untranslated.json files/en-us.all.json
|
||||
//go:generate goi18n -flat -outdir files files/fr-fr.all.json files/zh-cn.untranslated.json files/en-us.all.json
|
||||
|
||||
//go:generate togo i18n
|
@ -0,0 +1,73 @@
|
||||
package i18n
|
||||
|
||||
import "github.com/nicksnyder/go-i18n/i18n"
|
||||
|
||||
// list of embedded template files.
|
||||
var files = []struct {
|
||||
name string
|
||||
data string
|
||||
}{
|
||||
{
|
||||
name: "en-us.all.json",
|
||||
data: enUsall,
|
||||
}, {
|
||||
name: "es-es.all.json",
|
||||
data: esEsall,
|
||||
}, {
|
||||
name: "fr-fr.all.json",
|
||||
data: frFrall,
|
||||
}, {
|
||||
name: "zh-cn.all.json",
|
||||
data: zhCnall,
|
||||
},
|
||||
}
|
||||
|
||||
func init() {
|
||||
for _, file := range files {
|
||||
i18n.ParseTranslationFileBytes(file.Name, []byte(file.data))
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// embedded template files.
|
||||
//
|
||||
|
||||
// files/en-us.all.json
|
||||
var enUsall = `{
|
||||
"greeting": {
|
||||
"other": "Hello"
|
||||
},
|
||||
"welcome": {
|
||||
"other": "Welcome"
|
||||
}
|
||||
}`
|
||||
|
||||
// files/es-es.all.json
|
||||
var esEsall = `{
|
||||
"greeting": {
|
||||
"other": ""
|
||||
},
|
||||
"welcome": {
|
||||
"other": ""
|
||||
}
|
||||
}`
|
||||
|
||||
// files/fr-fr.all.json
|
||||
var frFrall = `{
|
||||
"greeting": {
|
||||
"other": "Bonjour"
|
||||
},
|
||||
"welcome": {
|
||||
"other": "Bienvenue"
|
||||
}
|
||||
}`
|
||||
|
||||
// files/zh-cn.all.json
|
||||
var zhCnall = `{
|
||||
"greeting": {
|
||||
"other": "Hello"
|
||||
},
|
||||
"welcome": {
|
||||
"other": "Welcome"
|
||||
}
|
||||
}`
|
@ -0,0 +1,31 @@
|
||||
package {{ .Package }}
|
||||
|
||||
import "github.com/nicksnyder/go-i18n/i18n"
|
||||
|
||||
// list of embedded template files.
|
||||
var files = []struct{
|
||||
name string
|
||||
data string
|
||||
} {
|
||||
{{ range .Files -}}
|
||||
{
|
||||
name: {{ printf "%q" .Name }},
|
||||
data: {{ .Base | camelize }},
|
||||
},
|
||||
{{- end }}
|
||||
}
|
||||
|
||||
func init() {
|
||||
for _, file := range files {
|
||||
i18n.ParseTranslationFileBytes(file.Name, []byte(file.data))
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// embedded template files.
|
||||
//
|
||||
|
||||
{{ range .Files }}
|
||||
// {{ .Path }}
|
||||
var {{ .Base | camelize }} = `{{ .Data }}`
|
||||
{{ end }}
|
Loading…
Reference in New Issue