fastlane-plugin-lokalise 1.0.1 → 2.0.0

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: a5e7e187badad268439404f393a092153774eb6778d8732ce92e4379db96546f
4
- data.tar.gz: 195d0918db2c6cdfe1d92c721106172c15d5d51214884ed2b04c63d8f12e550f
3
+ metadata.gz: 3b466bad5687613831754575de39a2d69618fe645c0113576b1457d5afa797ee
4
+ data.tar.gz: b5be9291d6707c64c2cb830bf33df02365a8a3a9c6680bddbbdc1701502bee5a
5
5
  SHA512:
6
- metadata.gz: ecf0b5fda98a53918cb169384e007f7c27bedc6217926fbd3635d9bfc563867ee1e563a6fc62794cc51e216bb95e52bf6b749fdd46e1ab3f67be4af6f0ced5cd
7
- data.tar.gz: c63f815688f58cf1344e84db50f67bc7d3a807cefe8f2a8ca673e06c731eb1054efcfccd3ecb6bbbfd94fe1bd6e1dff85d3be864eac706b6519532874b98400e
6
+ metadata.gz: a336dfac596785a46a36a073384bde98512c5f2aaeb6ef862c5800d856acf7f14edb8023fc4effe455f148ea43991ffd8ad9e6f79c825997a51c51ab0152c0e9
7
+ data.tar.gz: ab3469836a68162b9c8dccbf3915063d7cb0d57103616c70b297e72d82af948a3cc61b680bd9cada4456b635eed77ae0a86a697a6b81beb0ce190ed86c474454
data/README.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  This project is a port of the [lokalise-fastlane-actions](https://github.com/lokalise/lokalise-fastlane-actions) project. The goal is for it to be packaged as a Fastlane Plugin that can be imported as a gem.
4
4
 
5
+ **Note:** The commands in version 2.x are not compatible with version 1.x.
6
+
5
7
 
6
8
  ## Install
7
9
 
@@ -12,7 +14,7 @@ fastlane add_plugin lokalise
12
14
 
13
15
  Or added to the Pluginfile as:
14
16
  ```
15
- gem 'fastlane-plugin-lokalise', git: 'https://github.com/BasouKazuma/fastlane-plugin-lokalise'
17
+ gem 'fastlane-plugin-lokalise'
16
18
  ```
17
19
 
18
20
 
@@ -36,13 +38,13 @@ Parameters:
36
38
 
37
39
  This action imports metadata from files generated by Deliver action and uploads iTunes Connect metadata using information from Lokalise.
38
40
 
41
+ - `platform`. The name of the platform you are generating metadata for (`android` or `ios`). Can be set up using enviromental parameter `FASTLANE_PLATFORM_NAME`
39
42
  - `api_token`. Your API token. Can be set up using enviromental parameter `LOKALISE_API_TOKEN`
40
43
  - `project_identifier`. Your Project ID. Can be set up using enviromental parameter `LOKALISE_PROJECT_ID`
41
- - `action`. Action to perform *(can be `update_lokalise_itunes`, `download_lokalise_itunes`, `update_itunes`, `update_lokalise_googleplay` or `update_googleplay`)*.
44
+ - `action`. Action to perform *(can be `download_from_lokalise`, or `upload_to_lokalise`)*.
42
45
  - `add_languages`. Add missing languages to lokalise *(`false` by default)*.
43
46
  - `override_translation`. Override translations in lokalise.
44
- - `release_number`. Application release number. Required with `update_googleplay` action.
45
- - `validate_only`. Only validate the metadata. Used with `update_googleplay` action *(`false` by default)*.
47
+ - `release_number`. Application release number. Required for Android actions.
46
48
 
47
49
  ### add_keys_to_lokalise
48
50
 
@@ -56,6 +58,71 @@ Parameters:
56
58
  - `keys`. Keys to add *(must be passed as array of strings)*.
57
59
 
58
60
 
61
+ ## How To
62
+
63
+ In this section we assume you know about Fastlane's Fastfile and how to interact with it. If you do not, please look over the Fastlane Documentation.
64
+ https://docs.fastlane.tools/
65
+
66
+ ### Upload metadata to the App Store or Google Play
67
+
68
+ First you need to download the metadata from Lokalise into the `fastlane/metadata` directory:
69
+ ```ruby
70
+ lokalise_metadata(
71
+ action: download_from_lokalise,
72
+ api_token: (string),
73
+ project_identifier: (number.number),
74
+ )
75
+ ```
76
+
77
+ Then you can upload what is currently in the `fastlane/metadata` folder to the App Store using the deliver action:
78
+ https://docs.fastlane.tools/actions/deliver/
79
+ ```ruby
80
+ deliver(
81
+ ...
82
+ )
83
+ ```
84
+ Or for Google Play the supply action:
85
+ https://docs.fastlane.tools/actions/supply/
86
+ ```ruby
87
+ supply(
88
+ ...
89
+ )
90
+ ```
91
+
92
+ ### Upload metadata to Lokalise
93
+
94
+ First you need to download the metadata from the App Store:
95
+ https://docs.fastlane.tools/actions/deliver/
96
+ ```ruby
97
+ desc "Downloads metadata from App Store Connect"
98
+ lane :download_appstore_metadata do
99
+ ENV["DELIVER_FORCE_OVERWRITE"] = "1"
100
+ sh("fastlane deliver download_metadata")
101
+ ENV["DELIVER_FORCE_OVERWRITE"] = "0"
102
+ end
103
+ ```
104
+
105
+ Or from Google Play:
106
+ https://docs.fastlane.tools/actions/supply/
107
+ ```ruby
108
+ desc "Downloads metadata from Google Play"
109
+ lane :download_googleplay_metadata do
110
+ # Replace metadata_path if not in the default location
111
+ metadata_path = "fastlane/metadata/android"
112
+ sh("rm -rf #{metadata_path}")
113
+ sh("fastlane supply init")
114
+ end
115
+ ```
116
+
117
+ Then you can upload what is currently in the `fastlane/metdata` folder to Lokalise using:
118
+ ```ruby
119
+ lokalise_metadata(
120
+ action: "update_lokalise_itunes",
121
+ add_languages: true,
122
+ override_translation: true
123
+ )
124
+ ```
125
+
59
126
  ## Development
60
127
 
61
128
  This can be locally built and installed as a gem by doing the following on the repo:
@@ -106,7 +106,7 @@ module Fastlane
106
106
 
107
107
 
108
108
  def self.is_supported?(platform)
109
- [:ios, :mac].include? platform
109
+ [:ios, :android, :mac].include? platform
110
110
  end
111
111
 
112
112
 
@@ -175,7 +175,7 @@ module Fastlane
175
175
 
176
176
 
177
177
  def self.is_supported?(platform)
178
- [:ios, :mac].include? platform
178
+ [:ios, :android, :mac].include? platform
179
179
  end
180
180
 
181
181
 
@@ -1,5 +1,6 @@
1
1
  require 'net/http'
2
2
 
3
+
3
4
  module Fastlane
4
5
  module Actions
5
6
  class LokaliseMetadataAction < Action
@@ -7,59 +8,58 @@ module Fastlane
7
8
  @params
8
9
  def self.run(params)
9
10
  @params = params
10
- action = params[:action]
11
-
12
- case action
13
- when "update_itunes"
14
- key_file = metadata_key_file_itunes()
15
- metadata = get_metadata_from_lokalise_itunes()
16
- run_deliver_action(metadata)
17
- when "download_lokalise_itunes"
18
- key_file = metadata_key_file_itunes()
19
- metadata = get_metadata_from_lokalise_itunes()
20
- write_lokalise_translations_to_itunes_metadata(metadata)
21
- when "update_googleplay"
22
- release_number = params[:release_number]
23
- UI.user_error! "Release number is required when using `update_googleplay` action (should be an integer and greater that 0)" unless (release_number and release_number.is_a?(Integer) and release_number > 0)
24
- key_file = metadata_key_file_googleplay
25
- metadata = get_metadata_from_lokalise_googleplay()
26
- save_metadata_to_files(metadata, release_number)
27
- run_supply_action(params[:validate_only])
28
- when "update_lokalise_itunes"
29
- metadata = get_metadata_itunes_connect()
30
- add_languages = params[:add_languages]
31
- override_translation = params[:override_translation]
32
- if add_languages == true
33
- create_languages(metadata.keys, true)
34
- end
35
- if override_translation == true
36
- upload_metadata_itunes(metadata) unless metadata.empty?
37
- else
38
- lokalise_metadata = get_metadata_from_lokalise_itunes()
39
- filtered_metadata = filter_metadata(metadata, lokalise_metadata)
40
- upload_metadata_itunes(filtered_metadata) unless filtered_metadata.empty?
41
- end
42
- when "update_lokalise_googleplay"
43
- metadata = get_metadata_google_play()
44
- add_languages = params[:add_languages]
45
- override_translation = params[:override_translation]
46
- if add_languages == true
47
- create_languages(metadata.keys, false)
48
- end
49
- if override_translation == true
50
- upload_metadata_google_play(metadata) unless metadata.empty?
51
- else
52
- lokalise_metadata = get_metadata_from_lokalise_googleplay()
53
- filtered_metadata = filter_metadata(metadata, lokalise_metadata)
54
- upload_metadata_google_play(filtered_metadata) unless filtered_metadata.empty?
55
- end
11
+
12
+ case @params[:platform]
13
+ when "ios"
14
+ case @params[:action]
15
+ when "download_from_lokalise"
16
+ metadata = get_metadata_from_lokalise()
17
+ write_lokalise_translations_to_itunes_metadata(metadata)
18
+ when "upload_to_lokalise"
19
+ metadata = get_metadata()
20
+ add_languages = params[:add_languages]
21
+ override_translation = params[:override_translation]
22
+ if add_languages == true
23
+ create_languages(metadata.keys)
24
+ end
25
+ if override_translation == true
26
+ upload_metadata_itunes(metadata) unless metadata.empty?
27
+ else
28
+ lokalise_metadata = get_metadata_from_lokalise()
29
+ filtered_metadata = filter_metadata(metadata, lokalise_metadata)
30
+ upload_metadata_itunes(filtered_metadata) unless filtered_metadata.empty?
31
+ end
32
+ end
33
+ when "android"
34
+ case @params[:action]
35
+ when "download_from_lokalise"
36
+ release_number = params[:release_number]
37
+ UI.user_error! "Release number is required for Android (should be an integer and greater that 0)" unless (release_number and release_number.is_a?(Integer) and release_number > 0)
38
+ metadata = get_metadata_from_lokalise()
39
+ write_lokalise_translations_to_googleplay_metadata(metadata, release_number)
40
+ when "upload_to_lokalise"
41
+ metadata = get_metadata()
42
+ add_languages = params[:add_languages]
43
+ override_translation = params[:override_translation]
44
+ if add_languages == true
45
+ create_languages(metadata.keys)
46
+ end
47
+ if override_translation == true
48
+ upload_metadata_google_play(metadata) unless metadata.empty?
49
+ else
50
+ lokalise_metadata = get_metadata_from_lokalise()
51
+ filtered_metadata = filter_metadata(metadata, lokalise_metadata)
52
+ upload_metadata_google_play(filtered_metadata) unless filtered_metadata.empty?
53
+ end
54
+ end
56
55
  end
56
+
57
57
  end
58
58
 
59
59
 
60
- def self.create_languages(languages, for_itunes)
60
+ def self.create_languages(languages)
61
61
  data = {
62
- iso: languages.map { |language| fix_language_name(language, for_itunes, true) } .to_json
62
+ iso: languages.map { |language| fix_language_name(language, true) } .to_json
63
63
  }
64
64
  make_request("language/add", data)
65
65
  end
@@ -93,7 +93,8 @@ module Fastlane
93
93
  if translations.empty? == false
94
94
  translation = translations[key]
95
95
  final_translations[lang] = translation if translation != nil && translation.empty? == false
96
- path = File.join('.', 'fastlane', 'metadata', lang)
96
+ metadata_path = get_metadata_path()
97
+ path = File.join(metadata_path, lang)
97
98
  filename = "#{parameter}.txt"
98
99
  output_file = File.join(path, filename)
99
100
  FileUtils.mkdir_p(path) unless File.exist?(path)
@@ -107,79 +108,30 @@ module Fastlane
107
108
  end
108
109
 
109
110
 
110
- def self.run_deliver_action(metadata)
111
- config = FastlaneCore::Configuration.create(Actions::DeliverAction.available_options, {})
112
- config.load_configuration_file("Deliverfile")
113
- config[:metadata_path] = "./fastlane/no_metadata"
114
- config[:screenshots_path] = "./fastlane/no_screenshot"
115
- config[:skip_screenshots] = true
116
- config[:run_precheck_before_submit] = false
117
- config[:skip_binary_upload] = true
118
- config[:skip_app_version_update] = true
119
- config[:force] = true
120
-
121
- metadata_key_file_itunes().each { |key, parameter|
122
- final_translations = {}
123
-
124
- metadata.each { |lang, translations|
125
- if translations.empty? == false
126
- translation = translations[key]
127
- final_translations[lang] = translation if translation != nil && translation.empty? == false
128
- end
129
- }
130
-
131
- config[parameter.to_sym] = final_translations
132
- }
133
-
134
- Actions::DeliverAction.run(config)
135
- end
136
-
137
-
138
- def self.run_supply_action(validate_only)
139
- config = FastlaneCore::Configuration.create(Actions::SupplyAction.available_options, {})
140
- config[:skip_upload_apk] = true
141
- config[:skip_upload_aab] = true
142
- config[:skip_upload_screenshots] = true
143
- config[:skip_upload_images] = true
144
- config[:validate_only] = validate_only
145
-
146
- Actions::SupplyAction.run(config)
147
- end
148
-
149
-
150
- def self.save_metadata_to_files(metadata, release_number)
151
-
152
- translations = {}
153
-
111
+ def self.write_lokalise_translations_to_googleplay_metadata(metadata, release_number)
154
112
  metadata_key_file_googleplay().each { |key, parameter|
155
113
  final_translations = {}
156
-
157
114
  metadata.each { |lang, translations|
158
115
  if translations.empty? == false
159
116
  translation = translations[key]
160
117
  final_translations[lang] = translation if translation != nil && translation.empty? == false
161
- end
162
- }
163
-
164
- translations[parameter.to_sym] = final_translations
165
- }
166
-
167
- FileUtils.rm_rf(Dir['fastlane/metadata/android/*'])
168
-
169
- translations.each { |key, parameter|
170
- parameter.each { |lang, text|
171
- path = "fastlane/metadata/android/#{lang}/#{key}.txt"
172
- if "#{key}" == "changelogs"
173
- path = "fastlane/metadata/android/#{lang}/changelogs/#{release_number}.txt"
174
- end
175
- dirname = File.dirname(path)
176
- unless File.directory?(dirname)
177
- FileUtils.mkdir_p(dirname)
118
+ metadata_path = get_metadata_path()
119
+ if "#{parameter}" == "changelogs"
120
+ path = File.join(metadata_path, lang, parameter)
121
+ filename = "#{release_number}.txt"
122
+ else
123
+ path = File.join('.', metadata_path, lang)
124
+ filename = "#{parameter}.txt"
125
+ end
126
+ output_file = File.join(path, filename)
127
+ FileUtils.mkdir_p(path) unless File.exist?(path)
128
+ puts "Updating '#{output_file}'..."
129
+ File.open(output_file, 'wb') do |file|
130
+ file.write(final_translations[lang])
131
+ end
178
132
  end
179
- File.write(path, text)
180
133
  }
181
134
  }
182
-
183
135
  end
184
136
 
185
137
 
@@ -213,36 +165,32 @@ module Fastlane
213
165
  end
214
166
 
215
167
 
216
- def self.upload_metadata(metadata_keys, for_itunes, metadata)
217
-
168
+ def self.upload_metadata(metadata_keys, metadata)
218
169
  keys = []
219
-
220
170
  metadata_keys.each do |key, value|
221
- key = make_key_object_from_metadata(key, metadata, for_itunes)
171
+ key = make_key_object_from_metadata(key, metadata)
222
172
  if key
223
173
  keys << key
224
174
  end
225
175
  end
226
-
227
176
  data = {
228
177
  data: keys.to_json
229
178
  }
230
-
231
179
  make_request("string/set", data)
232
180
  end
233
181
 
234
182
 
235
183
  def self.upload_metadata_itunes(metadata)
236
- upload_metadata(metadata_key_file_itunes, true, metadata)
184
+ upload_metadata(metadata_key_file_itunes, metadata)
237
185
  end
238
186
 
239
187
 
240
188
  def self.upload_metadata_google_play(metadata)
241
- upload_metadata(metadata_key_file_googleplay, false, metadata)
189
+ upload_metadata(metadata_key_file_googleplay, metadata)
242
190
  end
243
191
 
244
192
 
245
- def self.make_key_object_from_metadata(key, metadata, for_itunes)
193
+ def self.make_key_object_from_metadata(key, metadata)
246
194
  key_data = {
247
195
  "key" => key,
248
196
  "platform_mask" => 16,
@@ -251,7 +199,7 @@ module Fastlane
251
199
  metadata.each { |iso_code, data|
252
200
  translation = data[key]
253
201
  unless translation == nil || translation.empty?
254
- key_data["translations"][fix_language_name(iso_code, for_itunes, true)] = translation
202
+ key_data["translations"][fix_language_name(iso_code, true)] = translation
255
203
  end
256
204
  }
257
205
  unless key_data["translations"].empty?
@@ -262,99 +210,91 @@ module Fastlane
262
210
  end
263
211
 
264
212
 
265
- def self.get_metadata_google_play()
266
- available_languages = google_play_languages
267
- return get_metadata(available_languages, "fastlane/metadata/android/", false)
268
- end
269
-
270
-
271
- def self.get_metadata_itunes_connect()
272
- available_languages = itunes_connect_languages
273
- return get_metadata(available_languages, "fastlane/metadata/", true)
213
+ def self.get_metadata_path()
214
+ if @params[:metadata_path]
215
+ metadata_path = @params[:metadata_path]
216
+ else
217
+ case @params[:platform]
218
+ when "android"
219
+ metadata_path = "fastlane/metadata/android/"
220
+ else
221
+ metadata_path = "fastlane/metadata/"
222
+ end
223
+ end
274
224
  end
275
225
 
276
226
 
277
- def self.get_metadata(available_languages, folder, for_itunes)
227
+ def self.get_metadata()
228
+ case @params[:platform]
229
+ when "ios"
230
+ available_languages = itunes_connect_languages
231
+ when "android"
232
+ available_languages = google_play_languages
233
+ end
234
+ metadata_path = get_metadata_path()
278
235
  complete_metadata = {}
279
-
280
236
  available_languages.each { |iso_code|
281
- language_directory = "#{folder}#{iso_code}"
237
+ language_directory = File.join(metadata_path, iso_code)
282
238
  if Dir.exist? language_directory
283
239
  language_metadata = {}
284
- if for_itunes
240
+ case @params[:platform]
241
+ when "ios"
285
242
  metadata_key_file_itunes().each { |key, file|
286
- populate_hash_key_from_file(language_metadata, key, language_directory + "/#{file}.txt")
243
+ populate_hash_key_from_file(language_metadata, key, File.join(language_directory, "#{file}.txt"))
287
244
  }
288
- else
245
+ when "android"
289
246
  metadata_key_file_googleplay().each { |key, file|
290
247
  if file == "changelogs"
291
- changelog_directory = "#{folder}#{iso_code}/changelogs"
248
+ changelog_directory = File.join(language_directory, "changelogs")
292
249
  files = Dir.entries("#{changelog_directory}")
293
250
  collectedFiles = files.collect { |s| s.partition(".").first.to_i }
294
251
  sortedFiles = collectedFiles.sort
295
- populate_hash_key_from_file(language_metadata, key, language_directory + "/changelogs/#{sortedFiles.last}.txt")
296
- else
297
- populate_hash_key_from_file(language_metadata, key, language_directory + "/#{file}.txt")
252
+ populate_hash_key_from_file(language_metadata, key, File.join(language_directory, "changelogs", "#{sortedFiles.last}.txt"))
253
+ else
254
+ populate_hash_key_from_file(language_metadata, key, File.join(language_directory, "#{file}.txt"))
298
255
  end
299
256
  }
300
257
  end
301
258
  complete_metadata[iso_code] = language_metadata
302
259
  end
303
260
  }
304
-
305
261
  return complete_metadata
306
262
  end
307
263
 
308
264
 
309
- def self.get_metadata_from_lokalise(valid_keys, for_itunes)
310
-
265
+ def self.get_metadata_from_lokalise()
266
+ case @params[:platform]
267
+ when "ios"
268
+ valid_keys = metadata_key_file_itunes().keys
269
+ valid_languages = itunes_connect_languages_in_lokalise()
270
+ key_name = "key_ios"
271
+ when "android"
272
+ valid_keys = metadata_key_file_googleplay().keys
273
+ valid_languages = google_play_languages_in_lokalise()
274
+ key_name = "key_android"
275
+ end
311
276
  data = {
312
277
  platform_mask: 16,
313
278
  keys: valid_keys.to_json,
314
279
  }
315
-
316
280
  response = make_request("string/list", data)
317
-
318
- if for_itunes
319
- valid_languages = itunes_connect_languages_in_lokalise()
320
- else
321
- valid_languages = google_play_languages_in_lokalise()
322
- end
323
281
  metadata = {}
324
-
325
282
  response["strings"].each { |lang, translation_objects|
326
283
  if valid_languages.include?(lang)
327
284
  translations = {}
328
285
  translation_objects.each { |object|
329
- if for_itunes
330
- key = object["key_ios"]
331
- else
332
- key = object["key_android"]
333
- end
286
+ key = object[key_name]
334
287
  translation = object["translation"]
335
288
  if valid_keys.include?(key) && translation != nil && translation.empty? == false
336
289
  translations[key] = translation
337
290
  end
338
291
  }
339
292
  if translations.empty? == false
340
- metadata[fix_language_name(lang, for_itunes)] = translations
293
+ metadata[fix_language_name(lang)] = translations
341
294
  end
342
295
  end
343
296
  }
344
297
  return metadata
345
-
346
- end
347
-
348
-
349
- def self.get_metadata_from_lokalise_itunes()
350
- valid_keys = metadata_keys_itunes()
351
- return get_metadata_from_lokalise(valid_keys, true)
352
- end
353
-
354
-
355
- def self.get_metadata_from_lokalise_googleplay()
356
- valid_keys = metadata_keys_googleplay()
357
- return get_metadata_from_lokalise(valid_keys, false)
358
298
  end
359
299
 
360
300
 
@@ -369,16 +309,6 @@ module Fastlane
369
309
  end
370
310
 
371
311
 
372
- def self.metadata_keys_itunes()
373
- return metadata_key_file_itunes().keys
374
- end
375
-
376
-
377
- def self.metadata_keys_googleplay()
378
- return metadata_key_file_googleplay().keys
379
- end
380
-
381
-
382
312
  def self.metadata_key_file_itunes()
383
313
  return {
384
314
  "appstore.app.name" => "name",
@@ -406,201 +336,94 @@ module Fastlane
406
336
 
407
337
  def self.itunes_connect_languages_in_lokalise()
408
338
  return itunes_connect_languages().map { |lang|
409
- fix_language_name(lang, true, true)
339
+ fix_language_name(lang, true)
410
340
  }
411
341
  end
412
342
 
413
343
 
414
344
  def self.google_play_languages_in_lokalise()
415
345
  return google_play_languages().map { |lang|
416
- fix_language_name(lang, false, true)
346
+ fix_language_name(lang, true)
417
347
  }
418
348
  end
419
349
 
420
350
 
421
351
  def self.itunes_connect_languages()
422
- return [
423
- "cs",
424
- "da",
425
- "de-DE",
426
- "el",
427
- "en-AU",
428
- "en-CA",
429
- "en-GB",
430
- "en-US",
431
- "es-MX",
432
- "es-ES",
433
- "fi",
434
- "fr-FR",
435
- "fr-CA",
436
- "id",
437
- "it",
438
- "ja",
439
- "ko",
440
- "ms",
441
- "nl-NL",
442
- "no",
443
- "pt-BR",
444
- "pt-PT",
445
- "ru",
446
- "sv",
447
- "th",
448
- "tr",
449
- "vi",
450
- "zh-Hans",
451
- "zh-Hant"
452
- ]
352
+ languages = FastlaneCore::Languages::ALL_LANGUAGES
353
+ languages.each do |lang|
354
+ lang.gsub!("_", '-')
355
+ end
356
+ return languages
453
357
  end
454
358
 
455
359
 
456
360
  def self.google_play_languages()
457
- return [
458
- 'af',
459
- 'am',
460
- 'ar',
461
- 'hy',
462
- 'az-AZ',
463
- 'eu-ES',
464
- 'be',
465
- 'bn-BD',
466
- 'bg',
467
- 'my',
468
- 'ca',
469
- 'zh-CN',
470
- 'zh-TW',
471
- 'zh-HK',
472
- 'hr',
473
- 'cs',
474
- 'da',
475
- 'nl-NL',
476
- 'en-AU',
477
- 'en-CA',
478
- 'en-IN',
479
- 'en-SG',
480
- 'en-ZA',
481
- 'en-GB',
482
- 'en-US',
483
- 'et-EE',
484
- 'fil',
485
- 'fi',
486
- 'fr-CA',
487
- 'fr-FR',
488
- 'gl-ES',
489
- 'ka-GE',
490
- 'de-DE',
491
- 'el-GR',
492
- 'he',
493
- 'hi-IN',
494
- 'hu',
495
- 'is-IS',
496
- 'id',
497
- 'it-IT',
498
- 'ja',
499
- 'kn-IN',
500
- 'km-KH',
501
- 'ko',
502
- 'ky',
503
- 'lo',
504
- 'lv-LV',
505
- 'lt-LT',
506
- 'mk-MK',
507
- 'ms',
508
- 'ml-IN',
509
- 'mr',
510
- 'mn-MN',
511
- 'ne-NP',
512
- 'no',
513
- 'fa',
514
- 'pl',
515
- 'pt-BR',
516
- 'pt-PT',
517
- 'ro',
518
- 'ru-RU',
519
- 'sr',
520
- 'si',
521
- 'sk',
522
- 'sl-SI',
523
- 'es-419',
524
- 'es-ES',
525
- 'es-US',
526
- 'sw',
527
- 'sv-SE',
528
- 'ta-IN',
529
- 'te-IN',
530
- 'th',
531
- 'tr',
532
- 'uk',
533
- 'vi',
534
- 'zu'
535
- ]
361
+ languages = Supply::Languages::ALL_LANGUAGES
362
+ languages.each do |lang|
363
+ lang.gsub!("_", '-')
364
+ end
365
+ return languages
536
366
  end
537
367
 
538
368
 
539
- def self.fix_language_name(name, for_itunes, for_lokalise = false)
540
- if for_itunes
541
- if for_lokalise
542
- name = name.gsub("-","_")
543
- name = "en" if name == "en_US"
544
- name = "de" if name == "de_DE"
545
- name = "es" if name == "es_ES"
546
- name = "fr" if name == "fr_FR"
547
- else
548
- name = name.gsub("_","-")
549
- name = "en-US" if name == "en"
550
- name = "de-DE" if name == "de"
551
- name = "es-ES" if name == "es"
552
- name = "fr-FR" if name == "fr"
369
+ def self.itunes_to_lokalise_language_map()
370
+ return {
371
+ "de-DE" => "de",
372
+ "en-US" => "en",
373
+ "es-ES" => "es",
374
+ "fr-FR" => "fr"
375
+ }
376
+ end
377
+
378
+
379
+ def self.googleplay_to_lokalise_language_map()
380
+ return {
381
+ "cs-CZ" => "cs",
382
+ "da-DK" => "da",
383
+ "en-US" => "en",
384
+ "et" => "et_EE",
385
+ "fi-FI" => "fi",
386
+ "iw-IL" => "he",
387
+ "hu-HU" => "hu",
388
+ "hy-AM" => "hy",
389
+ "ja-JP" => "ja",
390
+ "ko-KR" => "ko",
391
+ "ky-KG" => "ky",
392
+ "lt" => "lt_LT",
393
+ "lv" => "lv_LV",
394
+ "lo-LA" => "lo",
395
+ "mr-IN" => "mr",
396
+ "ms-MY" => "ms",
397
+ "my-MM" => "my",
398
+ "no-NO" => "no",
399
+ "pl-PL" => "pl",
400
+ "si-LK" => "si",
401
+ "sl" => "sl_SI",
402
+ "tr-TR" => "tr"
403
+ }
404
+ end
405
+
406
+
407
+ def self.fix_language_name(language, for_lokalise = false)
408
+ if @params[:platform] == "android"
409
+ language_map = googleplay_to_lokalise_language_map()
410
+ else
411
+ language_map = itunes_to_lokalise_language_map()
412
+ end
413
+ if for_lokalise
414
+ if language_map.key?(language)
415
+ return language_map[language]
416
+ else
417
+ return language.gsub("-", "_")
553
418
  end
554
419
  else
555
- if for_lokalise
556
- name = name.gsub("-","_")
557
- name = "tr" if name == "tr_TR"
558
- name = "hy" if name == "hy_AM"
559
- name = "my" if name == "my_MM"
560
- name = "ms" if name == "ms_MY"
561
- name = "cs" if name == "cs_CZ"
562
- name = "da" if name == "da_DK"
563
- name = "et_EE" if name == "et"
564
- name = "fi" if name == "fi_FI"
565
- name = "he" if name == "iw_IL"
566
- name = "hu" if name == "hu_HU"
567
- name = "ja" if name == "ja_JP"
568
- name = "ko" if name == "ko_KR"
569
- name = "ky" if name == "ky_KG"
570
- name = "lo" if name == "lo_LA"
571
- name = "lv_LV" if name == "lv"
572
- name = "lt_LT" if name == "lt"
573
- name = "mr" if name == "mr_IN"
574
- name = "no" if name == "no_NO"
575
- name = "pl" if name == "pl_PL"
576
- name = "si" if name == "si_LK"
577
- name = "sl_SI" if name == "sl"
578
- else
579
- name = name.gsub("_","-")
580
- name = "tr-TR" if name == "tr"
581
- name = "hy-AM" if name == "hy"
582
- name = "my-MM" if name == "my"
583
- name = "ms-MY" if name == "ms"
584
- name = "cs-CZ" if name == "cs"
585
- name = "da-DK" if name == "da"
586
- name = "et" if name == "et-EE"
587
- name = "fi-FI" if name == "fi"
588
- name = "iw-IL" if name == "he"
589
- name = "hu-HU" if name == "hu"
590
- name = "ja-JP" if name == "ja"
591
- name = "ko-KR" if name == "ko"
592
- name = "ky-KG" if name == "ky"
593
- name = "lo-LA" if name == "lo"
594
- name = "lv" if name == "lv-LV"
595
- name = "lt" if name == "lt-LT"
596
- name = "mr-IN" if name == "mr"
597
- name = "no-NO" if name == "no"
598
- name = "pl-PL" if name == "pl"
599
- name = "si-LK" if name == "si"
600
- name = "sl" if name == "sl-SI"
420
+ language_map = language_map.invert
421
+ if language_map.key?(language)
422
+ return language_map[language]
423
+ else
424
+ return language.gsub("_", "-")
601
425
  end
602
426
  end
603
- return name
604
427
  end
605
428
 
606
429
 
@@ -621,6 +444,9 @@ module Fastlane
621
444
 
622
445
  def self.available_options
623
446
  [
447
+ FastlaneCore::ConfigItem.new(key: :platform,
448
+ env_name: "FASTLANE_PLATFORM_NAME",
449
+ description: "Fastlane platform name"),
624
450
  FastlaneCore::ConfigItem.new(key: :api_token,
625
451
  env_name: "LOKALISE_API_TOKEN",
626
452
  description: "API Token for Lokalise",
@@ -633,6 +459,9 @@ module Fastlane
633
459
  verify_block: proc do |value|
634
460
  UI.user_error! "No Project Identifier for Lokalise given, pass using `project_identifier: 'identifier'`" unless (value and not value.empty?)
635
461
  end),
462
+ FastlaneCore::ConfigItem.new(key: :metadata_path,
463
+ description: "Location where the metadata files should be stored and read from",
464
+ optional: true),
636
465
  FastlaneCore::ConfigItem.new(key: :add_languages,
637
466
  description: "Add missing languages in lokalise",
638
467
  optional: true,
@@ -650,35 +479,27 @@ module Fastlane
650
479
  UI.user_error! "Override translation should be true or false" unless [true, false].include? value
651
480
  end),
652
481
  FastlaneCore::ConfigItem.new(key: :action,
653
- description: "Action to perform (can be update_lokalise_itunes or update_lokalise_googleplay or update_itunes or update_googleplay)",
482
+ description: "Action to perform (download_from_lokalise, upload_to_lokalise)",
654
483
  optional: false,
655
484
  is_string: true,
656
485
  verify_block: proc do |value|
657
- UI.user_error! "Action should be update_lokalise_googleplay or update_lokalise_itunes or update_itunes or update_googleplay" unless ["update_lokalise_itunes", "download_lokalise_itunes", "update_lokalise_googleplay", "update_itunes", "update_googleplay"].include? value
486
+ UI.user_error! "Action should be one of the following: download_from_lokalise, upload_to_lokalise" unless ["download_from_lokalise", "upload_to_lokalise"].include? value
658
487
  end),
659
488
  FastlaneCore::ConfigItem.new(key: :release_number,
660
- description: "Release number is required to update google play",
489
+ description: "Release number is required for Android actions",
661
490
  optional: true,
662
491
  is_string: false),
663
- FastlaneCore::ConfigItem.new(key: :validate_only,
664
- description: "Only validate the metadata (works with only update_googleplay action)",
665
- optional: true,
666
- is_string: false,
667
- default_value: false,
668
- verify_block: proc do |value|
669
- UI.user_error! "Validate only should be true or false" unless [true, false].include? value
670
- end),
671
492
  ]
672
493
  end
673
494
 
674
495
 
675
496
  def self.authors
676
- ["Fedya-L"]
497
+ ["Fedya-L", "BasouKazuma"]
677
498
  end
678
499
 
679
500
 
680
501
  def self.is_supported?(platform)
681
- [:ios, :mac].include? platform
502
+ [:ios, :android, :mac].include? platform
682
503
  end
683
504
 
684
505
 
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
2
  module Lokalise
3
- VERSION = "1.0.1"
3
+ VERSION = "2.0.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane-plugin-lokalise
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Abbas Jaffery
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-02-08 00:00:00.000000000 Z
11
+ date: 2019-02-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: zip