UUBulb 7132b6d671
init v1 script (#8)
* init v1 script

* .

* complete dashboard script

* init agent script (posix)

* complete agent script (posix)
2024-11-30 13:49:06 +08:00

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
}