-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtransifex-download.go
More file actions
118 lines (110 loc) · 2.56 KB
/
Copy pathtransifex-download.go
File metadata and controls
118 lines (110 loc) · 2.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
package main
import (
"fmt"
"log"
"os"
"path"
"strings"
"github.com/go-tent/tent/core"
"github.com/go-tent/tent/destination"
"github.com/go-tent/tent/item"
"github.com/go-tent/tent/source"
"github.com/go-tent/tent/transifex"
)
func TransifexDownload() {
langs := os.Args[2:]
if len(langs) == 0 {
log.Fatalln("Please specify a language")
}
list, err := dstClient.ListResources()
if err != nil {
log.Fatalln(err)
}
var resources = make(map[string]transifex.Resource)
for _, r := range list {
resources[r.Name] = r
}
src, err := getSource()
if err != nil {
log.Fatalln(err)
}
root, err := core.NewRoot(core.Components...)
if err != nil {
log.Fatalln(err)
}
txsrc := make(transifexSource)
go txsrc.run(src, resources, langs)
log.Println("Decoding translations...")
if err := root.Decode(&txsrc); err != nil {
log.Fatalln(err)
}
for _, cat := range root.Sub {
for l := range links {
if err := checkLink(&cat, l); err != nil {
log.Printf("link: %s %s - %s", cat.ID, l, err)
}
}
}
dst := destination.NewFile(outDir)
prefix := make([]string, 0, 4)
for _, cat := range root.Sub {
prefix = append(prefix[:1], cat.ID)
for _, cat := range cat.Sub {
prefix = append(prefix[:2], cat.ID)
WriteCat(dst, prefix, &cat)
for _, cat := range cat.Sub {
prefix = append(prefix[:3], cat.ID)
WriteCat(dst, prefix, &cat)
for _, cat := range cat.Sub {
prefix = append(prefix[:4], cat.ID)
WriteCat(dst, prefix, &cat)
}
}
}
}
}
type msg struct {
item.Item
error
}
type transifexSource chan msg
func (t transifexSource) run(src source.Source, resources map[string]transifex.Resource, langs []string) {
defer close(t)
for i, err := src.Next(); i != nil; i, err = src.Next() {
if err != nil {
t <- msg{nil, err}
continue
}
name := strings.TrimPrefix(i.Name(), projectLang+"/")
if _, ok := i18n[path.Ext(name)]; !ok || name == i.Name() {
continue
}
r, ok := resources[name]
if !ok {
log.Println(name, "not found!")
continue
}
log.Println(r.Slug)
for _, l := range langs {
b, err := dstClient.GetTranslationFile(r.Slug, l)
if err != nil {
t <- msg{nil, fmt.Errorf("%s[%s] %s", name, l, err)}
continue
}
body := string(b)
body = strings.ReplaceAll(body, "] (", "](")
body = linkFinder.ReplaceAllStringFunc(body, replaceLinks)
t <- msg{item.Memory{ID: "/" + l + "/" + name, Contents: []byte(body)}, nil}
}
}
}
func (t transifexSource) Next() (item.Item, error) {
for {
v := <-t
if v.error != nil {
log.Println("tx next", v)
continue
}
return v.Item, nil
}
}