golang.zx2c4.com/wireguard/windows@v0.5.4-0.20230123132234-dcc0eb72a04b/gotext.go (about) 1 //go:build generate 2 3 //go:generate go run gotext.go 4 5 /* SPDX-License-Identifier: MIT 6 * 7 * Copyright (C) 2019-2022 WireGuard LLC. All Rights Reserved. 8 */ 9 10 package main 11 12 import ( 13 "encoding/json" 14 "os" 15 "os/exec" 16 "path/filepath" 17 "strings" 18 19 "golang.org/x/text/message/pipeline" 20 ) 21 22 func main() { 23 langDirs, err := os.ReadDir("locales") 24 if err != nil { 25 panic(err) 26 } 27 var langs []string 28 for _, dir := range langDirs { 29 if !dir.IsDir() { 30 continue 31 } 32 lang := dir.Name() 33 if jsonData, err := os.ReadFile(filepath.Join("locales", lang, "messages.gotext.json")); err == nil { 34 var translations pipeline.Messages 35 if err := json.Unmarshal(jsonData, &translations); err != nil { 36 panic(err) 37 } 38 lang = translations.Language.String() 39 if lang != dir.Name() { 40 err = os.Rename(filepath.Join("locales", dir.Name()), filepath.Join("locales", lang)) 41 if err != nil { 42 panic(err) 43 } 44 } 45 } else if os.IsNotExist(err) { 46 panic(err) 47 } 48 langs = append(langs, lang) 49 } 50 if len(langs) == 0 { 51 panic("no locales found") 52 } 53 gotext, err := os.CreateTemp("", "gotext*.exe") 54 if err != nil { 55 panic(err) 56 } 57 gotextFilename := gotext.Name() 58 gotext.Close() 59 defer os.Remove(gotextFilename) 60 cmd := exec.Command("go", "build", "-o", gotextFilename, "golang.org/x/text/cmd/gotext") 61 cmd.Stdout = os.Stdout 62 cmd.Stderr = os.Stderr 63 err = cmd.Run() 64 if err != nil { 65 panic(err) 66 } 67 cmd = exec.Command(gotextFilename, "-srclang=en", "update", "-out=zgotext.go", "-lang="+strings.Join(langs, ",")) 68 cmd.Env = append(os.Environ(), "GOOS=windows", "GOARCH=amd64") 69 cmd.Stdout = os.Stdout 70 cmd.Stderr = os.Stderr 71 err = cmd.Run() 72 if err != nil { 73 panic(err) 74 } 75 }