fastlane-plugin-lokalise 1.0.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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