fastlane-plugin-google_sheet_localize 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fd292bac4d8626916e67ced0f1b6f20aaa774144c1008b234bbcde6eb21b07a1
|
4
|
+
data.tar.gz: 538f1fc89c8cbcbd3ff661a473f37a89aa4809d453a4d1f3c79dda1ba19a0051
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ffbeb72764b0d070f059f35d48c2eb4e1e021dd950a2f156629b8e2d2abbfca38be58cdf9f4e9a5e3c02b306a44e014e5dcbb56346a42fda168e07e9805d38fd
|
7
|
+
data.tar.gz: e59221b83e07ef8f0ef5e5514271eb071505b9f6f81d7dab2a8a0662a355a312968c115c6bf2f755d64d3f0f430fd87f9da0d4b4df04a951f94d4b0978a8e09a
|
@@ -10,13 +10,14 @@ module Fastlane
|
|
10
10
|
spreadsheet_id = "https://docs.google.com/spreadsheets/d/#{params[:sheet_id]}"
|
11
11
|
tabs = params[:tabs]
|
12
12
|
plaform = params[:platform]
|
13
|
+
path = params[:localization_path]
|
13
14
|
|
14
15
|
spreadsheet = session.spreadsheet_by_url(spreadsheet_id)
|
15
16
|
|
16
17
|
# Get the first worksheet
|
17
18
|
worksheet = spreadsheet.worksheets.first
|
18
19
|
|
19
|
-
languages = numberOfLanguages(worksheet)
|
20
|
+
languages = self.numberOfLanguages(worksheet)
|
20
21
|
|
21
22
|
result = []
|
22
23
|
|
@@ -38,19 +39,19 @@ module Fastlane
|
|
38
39
|
|
39
40
|
filterdWorksheets.each { |worksheet|
|
40
41
|
contentRows = worksheet.rows.drop(1)
|
41
|
-
language['items'].concat(generateJSONObject(contentRows, i))
|
42
|
+
language['items'].concat(self.generateJSONObject(contentRows, i))
|
42
43
|
}
|
43
44
|
|
44
45
|
result.push(language)
|
45
46
|
|
46
47
|
end
|
47
|
-
createFiles(result, platform, path)
|
48
|
+
self.createFiles(result, platform, path)
|
48
49
|
end
|
49
50
|
|
50
|
-
def generateJSONObject(contentRows, index)
|
51
|
+
def self.generateJSONObject(contentRows, index)
|
51
52
|
result = Array.new
|
52
53
|
for i in 0..contentRows.count - 1
|
53
|
-
item = generateSingleObject(contentRows[i], index)
|
54
|
+
item = self.generateSingleObject(contentRows[i], index)
|
54
55
|
|
55
56
|
if item[:identifierIos] != "" && item[:identifierAndroid] != ""
|
56
57
|
result.push(item)
|
@@ -61,13 +62,13 @@ module Fastlane
|
|
61
62
|
|
62
63
|
end
|
63
64
|
|
64
|
-
def writeToJSONFile(languages)
|
65
|
+
def self.writeToJSONFile(languages)
|
65
66
|
File.open("output.json","w") do |f|
|
66
67
|
f.write(JSON.pretty_generate(languages))
|
67
68
|
end
|
68
69
|
end
|
69
70
|
|
70
|
-
def generateSingleObject(row, column)
|
71
|
+
def self.generateSingleObject(row, column)
|
71
72
|
identifierIos = row[0]
|
72
73
|
identifierAndroid = row[1]
|
73
74
|
|
@@ -84,8 +85,8 @@ module Fastlane
|
|
84
85
|
|
85
86
|
end
|
86
87
|
|
87
|
-
def createFiles(languages, platform, destinationPath)
|
88
|
-
languages.each { |language| createFileForLanguage(language, platform, destinationPath) }
|
88
|
+
def self.createFiles(languages, platform, destinationPath)
|
89
|
+
languages.each { |language| self.createFileForLanguage(language, platform, destinationPath) }
|
89
90
|
|
90
91
|
if platform == "ios"
|
91
92
|
|
@@ -113,27 +114,24 @@ module Fastlane
|
|
113
114
|
end
|
114
115
|
end
|
115
116
|
|
116
|
-
text = mapInvalidPlaceholder(item['text'])
|
117
|
+
text = self.mapInvalidPlaceholder(item['text'])
|
117
118
|
|
118
|
-
arguments = findArgumentsInText(text)
|
119
|
-
|
120
|
-
puts "Arguments"
|
121
|
-
puts arguments.count
|
119
|
+
arguments = self.findArgumentsInText(text)
|
122
120
|
|
123
121
|
if arguments.count == 0
|
124
122
|
f.write("\n\t///Sheet comment: #{item['comment']}\n\tpublic static let #{constantName} = localized(identifier: \"#{identifier}\")\n")
|
125
123
|
else
|
126
|
-
f.write(createiOSFunction(constantName, identifier, arguments, item['comment']))
|
124
|
+
f.write(self.createiOSFunction(constantName, identifier, arguments, item['comment']))
|
127
125
|
end
|
128
126
|
}
|
129
127
|
f.write("\n}")
|
130
|
-
f.write(createiOSFileEndString())
|
128
|
+
f.write(self.createiOSFileEndString())
|
131
129
|
end
|
132
130
|
|
133
131
|
end
|
134
132
|
end
|
135
133
|
|
136
|
-
def createFileForLanguage(language, platform, destinationPath)
|
134
|
+
def self.createFileForLanguage(language, platform, destinationPath)
|
137
135
|
if platform == "ios"
|
138
136
|
|
139
137
|
swiftFilename = "Localization.swift"
|
@@ -148,7 +146,7 @@ module Fastlane
|
|
148
146
|
File.open(filepath, "w") do |f|
|
149
147
|
filteredItems.each { |item|
|
150
148
|
|
151
|
-
text = mapInvalidPlaceholder(item['text'])
|
149
|
+
text = self.mapInvalidPlaceholder(item['text'])
|
152
150
|
|
153
151
|
f.write("//#{item['comment']}\n\"#{item['identifierIos']}\" = \"#{text}\";\n")
|
154
152
|
}
|
@@ -168,11 +166,11 @@ module Fastlane
|
|
168
166
|
end
|
169
167
|
end
|
170
168
|
|
171
|
-
def createiOSFileEndString()
|
169
|
+
def self.createiOSFileEndString()
|
172
170
|
return "\n\nextension Localization {\n\tprivate static func localized(identifier key: String, _ args: CVarArg...) -> String {\n\t\tlet format = NSLocalizedString(key, tableName: nil, bundle: Bundle.main, comment: \"\")\n\n\t\tguard !args.isEmpty else { return format }\n\n\t\treturn String(format: format, locale: Locale.current, arguments: args)\n\t}\n}"
|
173
171
|
end
|
174
172
|
|
175
|
-
def createiOSFunction(constantName, identifier, arguments, comment)
|
173
|
+
def self.createiOSFunction(constantName, identifier, arguments, comment)
|
176
174
|
functionTitle = "\n\t///Sheet comment: #{comment}\n\tpublic static func #{constantName}("
|
177
175
|
|
178
176
|
arguments.each_with_index do |item, index|
|
@@ -197,11 +195,9 @@ module Fastlane
|
|
197
195
|
return functionTitle
|
198
196
|
end
|
199
197
|
|
200
|
-
def findArgumentsInText(text)
|
198
|
+
def self.findArgumentsInText(text)
|
201
199
|
result = Array.new
|
202
|
-
filtered = mapInvalidPlaceholder(text)
|
203
|
-
|
204
|
-
puts filtered
|
200
|
+
filtered = self.mapInvalidPlaceholder(text)
|
205
201
|
|
206
202
|
stringIndexes = (0 ... filtered.length).find_all { |i| filtered[i,2] == '%@' }
|
207
203
|
intIndexes = (0 ... filtered.length).find_all { |i| filtered[i,2] == '%d' }
|
@@ -224,23 +220,15 @@ module Fastlane
|
|
224
220
|
result = result.concat(doubleIndexes.map { |e| { "index": e, "type": "Double" }})
|
225
221
|
end
|
226
222
|
|
227
|
-
puts result
|
228
|
-
result = result.sort { |a, b| a[:index] <=> b[:index] }
|
229
|
-
puts result
|
230
|
-
|
231
|
-
puts "count"
|
232
|
-
puts result.count
|
233
|
-
|
234
|
-
|
235
223
|
return result
|
236
224
|
end
|
237
225
|
|
238
|
-
def mapInvalidPlaceholder(text)
|
226
|
+
def self.mapInvalidPlaceholder(text)
|
239
227
|
filtered = text.gsub('%s', '%@')
|
240
228
|
return filtered
|
241
229
|
end
|
242
230
|
|
243
|
-
def numberOfLanguages(worksheet)
|
231
|
+
def self.numberOfLanguages(worksheet)
|
244
232
|
i = worksheet.num_cols
|
245
233
|
return i - 3
|
246
234
|
end
|
@@ -250,7 +238,7 @@ module Fastlane
|
|
250
238
|
end
|
251
239
|
|
252
240
|
def self.authors
|
253
|
-
["Mario Hahn"]
|
241
|
+
["Mario Hahn", "Thomas Koller"]
|
254
242
|
end
|
255
243
|
|
256
244
|
def self.return_value
|
@@ -277,13 +265,19 @@ module Fastlane
|
|
277
265
|
FastlaneCore::ConfigItem.new(key: :platform,
|
278
266
|
env_name: "PLATFORM",
|
279
267
|
description: "Plaform, ios or android",
|
280
|
-
optional:
|
268
|
+
optional: true,
|
269
|
+
default_value: "ios",
|
281
270
|
type: String),
|
282
271
|
FastlaneCore::ConfigItem.new(key: :tabs,
|
283
272
|
env_name: "TABS",
|
284
273
|
description: "Array of all Google Sheet Tabs",
|
285
274
|
optional: false,
|
286
|
-
type: Array)
|
275
|
+
type: Array),
|
276
|
+
FastlaneCore::ConfigItem.new(key: :localization_path,
|
277
|
+
env_name: "LOCALIZATION_PATH",
|
278
|
+
description: "Output path",
|
279
|
+
optional: false,
|
280
|
+
type: String)
|
287
281
|
]
|
288
282
|
end
|
289
283
|
|