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  }