/
repository.go
111 lines (93 loc) · 3.54 KB
/
repository.go
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
package ios
import (
"regexp"
"strings"
"github.com/prongbang/filex"
"github.com/prongbang/localizegen/pkg/common"
"github.com/prongbang/localizegen/pkg/core"
"github.com/prongbang/localizegen/pkg/csvx"
)
type Repository interface {
GenerateStringsResources(csv csvx.CsvList, languages core.Languages, localeIndex int) string
GenerateSwiftResources(csv csvx.CsvList, languages core.Languages, localeIndex int) string
GenerateStringsResourceFile(csv csvx.CsvList, languages core.Languages, locale string, target string, localeIndex int, filename string) core.Result
GenerateSwiftResourceFile(csv csvx.CsvList, languages core.Languages, target string, localeIndex int, filename string) core.Result
}
type repository struct {
FileX filex.FileX
}
func (r *repository) GenerateStringsResources(csv csvx.CsvList, languages core.Languages, localeIndex int) string {
content := ""
localeLen := len(languages)
for i := 1; i < len(csv); i++ {
row := csv[i]
rowLen := common.ColNotEmpty(row)
if rowLen >= 0 && rowLen <= localeLen {
continue
}
// Pattern
escapedKey, _ := regexp.Compile("\\s{1,}")
escapedStringBinding, _ := regexp.Compile("%s")
escapedDigitBinding, _ := regexp.Compile("{\\d}")
escapedDoubleQuote, _ := regexp.Compile("[\"]")
escapedSingleQuote, _ := regexp.Compile("[']")
escapedNewLine, _ := regexp.Compile("(?:\\r\\n|\\r|\\n)")
// Prepare data
escapedContent := row[localeIndex]
escapedContent = escapedStringBinding.ReplaceAllString(escapedContent, "%@")
escapedContent = escapedDigitBinding.ReplaceAllString(escapedContent, "%@")
escapedContent = escapedDoubleQuote.ReplaceAllString(escapedContent, `"`)
escapedContent = escapedSingleQuote.ReplaceAllString(escapedContent, "\\'")
escapedContent = escapedNewLine.ReplaceAllString(escapedContent, "\\n")
// Create key
key := escapedKey.ReplaceAllString(row[0], "_")
key = strings.ToLower(key)
content += "\n\"" + key + "\" = \"" + escapedContent + "\";"
}
return content
}
func (r *repository) GenerateSwiftResources(csv csvx.CsvList, languages core.Languages, localeIndex int) string {
content := "import Foundation\n\npublic enum LocalizablesType: String {"
localeLen := len(languages)
for i := 1; i < len(csv); i++ {
row := csv[i]
rowLen := common.ColNotEmpty(row)
if rowLen >= 0 && rowLen <= localeLen {
continue
}
// Pattern
escapedKey, _ := regexp.Compile("\\s{1,}")
// Prepare data
key := escapedKey.ReplaceAllString(row[0], "_")
key = strings.ToLower(key)
content += "\n\tcase " + key
}
content += "\n}"
return content
}
func (r *repository) GenerateStringsResourceFile(csv csvx.CsvList, languages core.Languages, locale string, target string, localeIndex int, filename string) core.Result {
targets := target + "/" + locale + ".lproj"
stringS := r.GenerateStringsResources(csv, languages, localeIndex)
fName, err := r.FileX.CreateFile(targets, filename, stringS)
result := core.Result{Filename: fName, Status: "Success"}
if err != nil {
result.Status = "Error"
result.Message = err.Error()
}
return result
}
func (r *repository) GenerateSwiftResourceFile(csv csvx.CsvList, languages core.Languages, target string, localeIndex int, filename string) core.Result {
stringS := r.GenerateSwiftResources(csv, languages, localeIndex)
fName, err := r.FileX.CreateFile(target, filename, stringS)
result := core.Result{Filename: fName, Status: "Success"}
if err != nil {
result.Status = "Error"
result.Message = err.Error()
}
return result
}
func NewRepository(fileX filex.FileX) Repository {
return &repository{
FileX: fileX,
}
}