init v1 script (#8)

* init v1 script

* .

* complete dashboard script

* init agent script (posix)

* complete agent script (posix)
This commit is contained in:
UUBulb
2024-11-30 13:49:06 +08:00
committed by GitHub
parent 7eb6a3af01
commit 7132b6d671
22 changed files with 2422 additions and 2666 deletions

View File

@ -1,10 +1,13 @@
package main
import (
"encoding/json"
"bufio"
"fmt"
"os"
"text/template"
"regexp"
"strings"
"github.com/chai2010/gettext-go"
)
const (
@ -12,17 +15,13 @@ const (
en_US = "en_US"
)
var localeMap map[string]map[string]interface{}
func main() {
if len(os.Args) != 3 {
printUsage()
exitWithError("Error: Need exactly 2 arguments")
}
if err := readLocalesFromFile(os.Args[1]); err != nil {
exitWithError(fmt.Sprintf("readLocalesFromFile: %v", err))
}
readLocalesFromDir(os.Args[1])
if err := parseTemplate(os.Args[2]); err != nil {
exitWithError(fmt.Sprintf("parseTemplate: %v", err))
@ -30,7 +29,7 @@ func main() {
}
func printUsage() {
fmt.Printf("usage: %s [locale-file] [locale]\n", os.Args[0])
fmt.Printf("usage: %s [localedir] [locale]\n", os.Args[0])
}
func exitWithError(message string) {
@ -38,37 +37,64 @@ func exitWithError(message string) {
os.Exit(1)
}
func readLocalesFromFile(file string) error {
b, err := os.ReadFile(file)
if err != nil {
return err
}
return json.Unmarshal(b, &localeMap)
func readLocalesFromDir(dir string) {
gettext.BindLocale(gettext.New("nezha", dir))
}
func parseTemplate(lang string) error {
tmpl, err := template.ParseFiles("template.sh")
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
}
switch lang {
case zh_CN:
file, err := os.Create("install.sh")
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
}
defer file.Close()
return tmpl.Execute(file, localeMap[zh_CN])
case en_US:
file, err := os.Create("install_en.sh")
if err != nil {
return err
}
defer file.Close()
return tmpl.Execute(file, localeMap[en_US])
default:
return fmt.Errorf("unsupported locale: %s", lang)
}
return nil
}