mirror of
https://github.com/nezhahq/scripts.git
synced 2025-07-12 13:29:32 +08:00

* init v1 script * . * complete dashboard script * init agent script (posix) * complete agent script (posix)
101 lines
1.8 KiB
Go
101 lines
1.8 KiB
Go
package main
|
|
|
|
import (
|
|
"bufio"
|
|
"fmt"
|
|
"os"
|
|
"regexp"
|
|
"strings"
|
|
|
|
"github.com/chai2010/gettext-go"
|
|
)
|
|
|
|
const (
|
|
zh_CN = "zh_CN"
|
|
en_US = "en_US"
|
|
)
|
|
|
|
func main() {
|
|
if len(os.Args) != 3 {
|
|
printUsage()
|
|
exitWithError("Error: Need exactly 2 arguments")
|
|
}
|
|
|
|
readLocalesFromDir(os.Args[1])
|
|
|
|
if err := parseTemplate(os.Args[2]); err != nil {
|
|
exitWithError(fmt.Sprintf("parseTemplate: %v", err))
|
|
}
|
|
}
|
|
|
|
func printUsage() {
|
|
fmt.Printf("usage: %s [localedir] [locale]\n", os.Args[0])
|
|
}
|
|
|
|
func exitWithError(message string) {
|
|
fmt.Fprintln(os.Stderr, message)
|
|
os.Exit(1)
|
|
}
|
|
|
|
func readLocalesFromDir(dir string) {
|
|
gettext.BindLocale(gettext.New("nezha", dir))
|
|
}
|
|
|
|
func parseTemplate(lang string) error {
|
|
gettext.SetLanguage(lang)
|
|
regex := regexp.MustCompile(`_\("([^"]+)"\)`)
|
|
|
|
var file *os.File
|
|
var err error
|
|
switch lang {
|
|
case zh_CN:
|
|
file, err = os.Create("install.sh")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer file.Close()
|
|
case en_US:
|
|
file, err = os.Create("install_en.sh")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer file.Close()
|
|
default:
|
|
return fmt.Errorf("unsupported locale: %s", lang)
|
|
}
|
|
|
|
template, err := os.Open("nezha/template.sh")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
var newline string
|
|
scanner := bufio.NewScanner(template)
|
|
buf := make([]byte, 1024*1024)
|
|
scanner.Buffer(buf, len(buf))
|
|
|
|
writer := bufio.NewWriter(file)
|
|
defer writer.Flush()
|
|
|
|
for scanner.Scan() {
|
|
line := scanner.Text()
|
|
matches := regex.FindAllStringSubmatch(line, -1)
|
|
|
|
if len(matches) > 0 {
|
|
orig := matches[0][0]
|
|
translated := fmt.Sprintf("\"%s\"", gettext.PGettext("", matches[0][1]))
|
|
newline = strings.ReplaceAll(line, orig, translated)
|
|
} else {
|
|
newline = line
|
|
}
|
|
|
|
_, err := writer.WriteString(fmt.Sprintln(newline))
|
|
if err != nil {
|
|
fmt.Println("Error writing to file:", err)
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|