fastlane-plugin-google_sheet_localize 0.1.5 → 0.1.6

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: 714e70705a464315aecdc814d690b1e5d2f926d9c7ff51c87270a6e7b1314441
4
- data.tar.gz: d84410222307f26d577c3e8998dc97bb2bc2f6495585d3106c65b01cf32f24ed
3
+ metadata.gz: 87a4897b4267a2b1ec85e0decd035d4bbcaeec53b481a9c9d672476aad6065b6
4
+ data.tar.gz: ea0718e1d745c797e1ccf9c79d08dd299f8848381521652f4a524ad5f2a2ff47
5
5
  SHA512:
6
- metadata.gz: 7927ff4ab444a083e5d770214c6d65d5d2a99602279c08b3f1f7ff34d23b1976f6e028c16b86e670574f9a84d2dae3268ead22e8adebb3c8021777c295abd99c
7
- data.tar.gz: f92f4e8907c7043f7fecf7f65d45002a619f425e9be73413dd8548c521023d10a5d43270725672d267aed47d103ba6ae56efebd710cee51d944e55b6fd50d1ea
6
+ metadata.gz: e252a54b79b9728660ad3307d99caaec6500219fd11dbd4ffbf437340a9ae791be4e2879278c2f77fadfb1ecc5c787eac168883f0db2ced044ffeca68d67e031
7
+ data.tar.gz: 06e2fbf3ab587f03d94fd915abd7268daabaeef07a3a4bc9738aaf78eb87a48bb940de0ecfc3524ac9a123138cc64f01d8696d592bd2ee915660ec8361a023c8
@@ -13,41 +13,42 @@ module Fastlane
13
13
  tabs = params[:tabs]
14
14
  platform = params[:platform]
15
15
  path = params[:localization_path]
16
+ language_titles = params[:language_titles]
17
+ default_language = params[:default_language]
16
18
 
17
19
  spreadsheet = session.spreadsheet_by_url(spreadsheet_id)
18
-
19
- # Get the first worksheet
20
20
  worksheet = spreadsheet.worksheets.first
21
21
 
22
- languages = self.numberOfLanguages(worksheet)
23
-
24
22
  result = []
25
23
 
26
- for i in 2..1+languages
24
+ for i in 0..worksheet.max_cols
25
+
27
26
  title = worksheet.rows[0][i]
28
27
 
29
- language = {
30
- 'language' => title,
31
- 'items' => []
32
- }
28
+ if language_titles.include?(title)
33
29
 
34
- filterdWorksheets = []
30
+ language = {
31
+ 'language' => title,
32
+ 'items' => []
33
+ }
35
34
 
36
- if tabs.count == 0
37
- filterdWorksheets = spreadsheet.worksheets
38
- else
39
- filterdWorksheets = spreadsheet.worksheets.select { |item| tabs.include?(item.title) }
40
- end
35
+ filterdWorksheets = []
41
36
 
42
- filterdWorksheets.each { |worksheet|
43
- contentRows = worksheet.rows.drop(1)
44
- language['items'].concat(self.generateJSONObject(contentRows, i))
45
- }
37
+ if tabs.count == 0
38
+ filterdWorksheets = spreadsheet.worksheets
39
+ else
40
+ filterdWorksheets = spreadsheet.worksheets.select { |item| tabs.include?(item.title) }
41
+ end
46
42
 
47
- result.push(language)
43
+ filterdWorksheets.each { |worksheet|
44
+ contentRows = worksheet.rows.drop(1)
45
+ language['items'].concat(self.generateJSONObject(contentRows, i))
46
+ }
48
47
 
48
+ result.push(language)
49
+ end
49
50
  end
50
- self.createFiles(result, platform, path)
51
+ self.createFiles(result, platform, path, default_language)
51
52
  end
52
53
 
53
54
  def self.generateJSONObject(contentRows, index)
@@ -64,12 +65,6 @@ module Fastlane
64
65
 
65
66
  end
66
67
 
67
- def self.writeToJSONFile(languages)
68
- File.open("output.json","w") do |f|
69
- f.write(JSON.pretty_generate(languages))
70
- end
71
- end
72
-
73
68
  def self.generateSingleObject(row, column)
74
69
  identifierIos = row[0]
75
70
  identifierAndroid = row[1]
@@ -87,8 +82,15 @@ module Fastlane
87
82
 
88
83
  end
89
84
 
90
- def self.createFiles(languages, platform, destinationPath)
91
- languages.each { |language| self.createFileForLanguage(language, platform, destinationPath) }
85
+ def filterUnusedRows(items, identifier)
86
+ return items.select { |item|
87
+ iosIdentifier = item[identifier]
88
+ iosIdentifier != "NR" && iosIdentifier != ""
89
+ }
90
+ end
91
+
92
+ def self.createFiles(languages, platform, destinationPath, defaultLanguage)
93
+ self.createFilesForLanguages(languages, platform, destinationPath, defaultLanguage)
92
94
 
93
95
  if platform == "ios"
94
96
 
@@ -135,35 +137,43 @@ module Fastlane
135
137
  end
136
138
  end
137
139
 
138
- def self.createFileForLanguage(language, platform, destinationPath)
139
- if platform == "ios"
140
+ def self.createFilesForLanguages(languages, platform, destinationPath, defaultLanguage)
140
141
 
141
- swiftFilename = "Localization.swift"
142
- swiftFilepath = "#{destinationPath}/#{swiftFilename}"
142
+ languages.each { |language|
143
143
 
144
- filteredItems = language["items"].select { |item|
145
- iosIdentifier = item['identifierIos']
146
- iosIdentifier != "NR" && iosIdentifier != ""
147
- }
144
+ if platform == "ios"
145
+
146
+ filteredItems = self.filterUnusedRows(language["items"],'identifierIos')
148
147
 
149
148
  filename = "Localizable.strings"
150
149
  filepath = "#{destinationPath}/#{language['language']}.lproj/#{filename}"
151
- FileUtils.mkdir_p language['language']
150
+ FileUtils.mkdir_p "#{destinationPath}/#{language['language']}.lproj"
152
151
  File.open(filepath, "w") do |f|
153
- filteredItems.each { |item|
152
+ filteredItems.each_with_index { |item, index|
154
153
 
155
154
  text = self.mapInvalidPlaceholder(item['text'])
156
155
  comment = item['comment']
157
156
  identifier = item['identifierIos']
158
157
 
159
158
  line = ""
160
-
161
159
  if identifier.include?('//')
162
160
  line = "\n\n#{identifier}\n"
163
161
  else
162
+
163
+ if text == "" || text == "TBD"
164
+ default_language_object = languages.select { |languageItem| languageItem['language'] == defaultLanguage }.first["items"]
165
+ default_language_object = self.filterUnusedRows(default_language_object,'identifierIos')
166
+
167
+ defaultLanguageText = default_language_object[index]['text']
168
+ puts "found empty text for identifier: #{identifier} for language:#{language['language']}, replaceing it with #{defaultLanguageText}"
169
+ text = self.mapInvalidPlaceholder(defaultLanguageText)
170
+ end
171
+
164
172
  line = "\"#{identifier}\" = \"#{text}\";"
165
173
  if !comment.to_s.empty?
166
174
  line = line + " //#{comment}\n"
175
+ else
176
+ line = line + "\n"
167
177
  end
168
178
  end
169
179
 
@@ -173,16 +183,40 @@ module Fastlane
173
183
  end
174
184
 
175
185
  if platform == "android"
176
- FileUtils.mkdir_p "values-#{language['language']}"
177
- File.open("values-#{language['language']}/strings.xml", "w") do |f|
186
+ languageDir = language['language']
187
+
188
+ if languageDir == "en"
189
+ languageDir = "values"
190
+ else
191
+ languageDir = "values-#{languageDir}"
192
+ end
193
+
194
+ FileUtils.mkdir_p "#{destinationPath}/#{languageDir}"
195
+ File.open("#{destinationPath}/#{languageDir}/strings.xml", "w") do |f|
178
196
  f.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n")
179
197
  f.write("<resources>\n")
180
198
  language["items"].each { |item|
181
- f.write("\t<!--#{item['comment']}-->\n\t<string name=\"#{item['identifierAndroid']}\"><![CDATA[#{item['text']}]]></string>\n")
199
+
200
+ comment = item['comment']
201
+ identifier = item['identifierAndroid']
202
+ text = item['text']
203
+
204
+ if !identifier.to_s.empty? && identifier != "NR"
205
+ line = ""
206
+
207
+ if !comment.to_s.empty?
208
+ line = line + "\t<!--#{comment}-->\n"
209
+ end
210
+
211
+ line = line + "\t<string name=\"#{identifier}\"><![CDATA[#{text}]]></string>\n"
212
+
213
+ f.write(line)
214
+ end
182
215
  }
183
216
  f.write("</resources>\n")
184
217
  end
185
218
  end
219
+ }
186
220
  end
187
221
 
188
222
  def self.createiOSFileEndString()
@@ -243,15 +277,10 @@ module Fastlane
243
277
  end
244
278
 
245
279
  def self.mapInvalidPlaceholder(text)
246
- filtered = text.gsub('%s', '%@')
280
+ filtered = text.gsub('%s', '%@').gsub('"', '\"')
247
281
  return filtered
248
282
  end
249
283
 
250
- def self.numberOfLanguages(worksheet)
251
- i = worksheet.num_cols
252
- return i - 3
253
- end
254
-
255
284
  def self.description
256
285
  "Creates .strings files for iOS and strings.xml files for Android"
257
286
  end
@@ -292,6 +321,16 @@ module Fastlane
292
321
  description: "Array of all Google Sheet Tabs",
293
322
  optional: false,
294
323
  type: Array),
324
+ FastlaneCore::ConfigItem.new(key: :language_titles,
325
+ env_name: "LANGUAGE_TITLES",
326
+ description: "Alle language titles",
327
+ optional: false,
328
+ type: Array),
329
+ FastlaneCore::ConfigItem.new(key: :default_language,
330
+ env_name: "DEFAULT_LANGUAGE",
331
+ description: "Default Language",
332
+ optional: false,
333
+ type: String),
295
334
  FastlaneCore::ConfigItem.new(key: :localization_path,
296
335
  env_name: "LOCALIZATION_PATH",
297
336
  description: "Output path",
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
2
  module GoogleSheetLocalize
3
- VERSION = "0.1.5"
3
+ VERSION = "0.1.6"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane-plugin-google_sheet_localize
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mario Hahn