Utilities for internal use.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

49 lines
809 B

  1. package main
  2. import (
  3. "code.as/writeas/internal"
  4. "encoding/json"
  5. "fmt"
  6. "io/ioutil"
  7. "os"
  8. "strings"
  9. )
  10. func main() {
  11. if len(os.Args) < 3 {
  12. internal.ErrQuit("usage: json-to-l10n filename lang")
  13. }
  14. file := os.Args[1]
  15. lang := os.Args[2]
  16. phrases := parseJSON(file)
  17. out := `package l10n
  18. var phrases` + strings.ToUpper(lang) + ` = map[string]string{
  19. `
  20. for t, p := range phrases {
  21. out += fmt.Sprintf("\t\"%s\": \"%s\",\n", t, p)
  22. }
  23. out += "}"
  24. fmt.Println(out)
  25. }
  26. func parseJSON(filename string) map[string]string {
  27. raw, err := ioutil.ReadFile(filename)
  28. if err != nil {
  29. internal.ErrQuit("unable to read file: %v", err)
  30. }
  31. r := map[string]string{}
  32. var c map[string]map[string]string
  33. json.Unmarshal(raw, &c)
  34. for _, obj := range c {
  35. for k, v := range obj {
  36. r[k] = v
  37. }
  38. }
  39. return r
  40. }