crowdin-cli 0.5.1 → 0.5.3

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
  SHA1:
3
- metadata.gz: ca8a6106bede17a0348f4cde54823cf779579783
4
- data.tar.gz: a7004c0632c8115cee028c8c0b6a367774ced70d
3
+ metadata.gz: 670a39458358d6f3b7be7cb8e4d17d1218ae10c5
4
+ data.tar.gz: abc0a523a67c8a6d05a9bfb12613f8857a2bda9a
5
5
  SHA512:
6
- metadata.gz: 787ccfe292caa45919033c849b25b947653a40a96e60da62826858c6cb1d1f4215221322aed60e86a5187c4526dea132afd06972430095fce9c17a85fefb112b
7
- data.tar.gz: 5bb5f8afe7014b66a8847279776e19195c9b554b19cd2e84b069bd085c7e097344a2d95e1cd3a7f0aa3ec3092c58318375038dc4358c56b662d4e003b49cdfc1
6
+ metadata.gz: 13580b9db9a409a01ebc2dc18207f4e0f97a97184f67e9cb859b93de1efaf97ae5811c591434f75f24c0fca36437c4a94976c8840084426a1f0d378d7bff53af
7
+ data.tar.gz: 1e30247d743d9f1b08363866985938d7ddc4c2f56555d80c61da360e3479f4f04dbf2d0db6db4766f999c486b57a3fa9a3b417861d260009c49b94acc8b21df3
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2012-2015 Anton Maminov
3
+ Copyright (c) 2012-2016 Anton Maminov
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -216,7 +216,7 @@ base_path: /path/to/your/project
216
216
  preserve_hierarchy: true
217
217
  ```
218
218
 
219
- ### [I Have No Idea How To Call This Section]
219
+ ### Uploading files to specified path with specified type
220
220
 
221
221
  This add support for 2 optional parameters in the yaml file section: `dest` and `type`.
222
222
  This is useful typically for some projects, where the uploaded name must be different so Crowdin can detect the type correctly.
@@ -301,9 +301,41 @@ files:
301
301
  first_line_contains_header: true
302
302
  scheme: "identifier,source_phrase,context,uk,ru,fr"
303
303
  multilingual_spreadsheet: true
304
+ ```
305
+
306
+ ### Versions Management
304
307
 
308
+ In version `0.5.0` we added support for versions management feature in Crowdin. Read more in our [blog](http://blog.crowdin.com/post/130133108120/new-feature-versions-management).
309
+
310
+ This is how Crowdin CLI command looks like if you upload source texts from the branch:
311
+ ```
312
+ crowdin-cli upload sources -b {branch_name}
305
313
  ```
306
314
 
315
+ Upload translations texts from the branch:
316
+ ```
317
+ crowdin-cli upload translations -b {branch_name}
318
+ ```
319
+
320
+ Download translations from the branch:
321
+ ```
322
+ crowdin-cli download -b {branch_name}
323
+ ```
324
+
325
+ ### Using a common base path for multiple branches
326
+
327
+ By default CLI tool uses the base path without taking the branch into account when using the new versions management feature.
328
+ In case you need to specify a common base path that contains the branches in subfolders named after branch names you can add `base_path_contains_branch_subfolders: true` option in main section of the configuration file.
329
+
330
+ Configuration file example:
331
+ ```
332
+ ---
333
+ project_identifier: test
334
+ api_key: KeepTheAPIkeySecret
335
+ base_url: https://api.crowdin.com
336
+ base_path: /path/to/your/project
337
+ base_path_contains_branch_subfolders: true
338
+ ```
307
339
 
308
340
  ## Configurations Examples
309
341
 
@@ -416,10 +448,10 @@ Installation/SystemRequirements:
416
448
  - Java
417
449
  - rvm
418
450
 
419
- Install JRuby 9.0.0.0 and Warbler gem:
451
+ Install JRuby `>=9.0.0.0` and Warbler gem `>=2.0.0`:
420
452
 
421
453
  ```
422
- $ rvm install jruby-9.0.0.0
454
+ $ rvm install jruby
423
455
  $ gem install warbler --pre
424
456
  ```
425
457
 
@@ -427,8 +459,8 @@ Create a new file called `Gemfile` in new project directory, an specify `crowdin
427
459
 
428
460
  ```ruby
429
461
  source 'https://rubygems.org'
430
- gem 'crowdin-api', '=0.3.0'
431
- gem 'crowdin-cli', '=0.4.6'
462
+ gem 'crowdin-api', '=0.4.0'
463
+ gem 'crowdin-cli', '=0.5.1'
432
464
  ```
433
465
 
434
466
  Create a new file called `bin/crowdin-cli`:
@@ -459,7 +491,7 @@ Install dependencies:
459
491
  $ bundle
460
492
  ```
461
493
 
462
- Compile/package with warbler
494
+ Compile/package with Warbler:
463
495
 
464
496
  ```
465
497
  $ warble jar
@@ -467,7 +499,7 @@ $ warble jar
467
499
 
468
500
  and rename `warbler.jar` to whatever you want.
469
501
 
470
- Run jar in any computer with Java:
502
+ Run jar in any computer with installed Java:
471
503
 
472
504
  ```
473
505
  java -jar <myapp>.jar
@@ -485,6 +517,47 @@ java -jar <myapp>.jar
485
517
 
486
518
  Author: Anton Maminov (anton.maminov@gmail.com)
487
519
 
488
- Copyright: 2012-2015 [crowdin.com](http://crowdin.com/)
520
+ Copyright: 2012-2016 [crowdin.com](http://crowdin.com/)
489
521
 
490
522
  This project is licensed under the MIT license, a copy of which can be found in the LICENSE file.
523
+
524
+ ```
525
+
526
+ `.-:://oooosyyyyyyyyyyyyyyyyyyyysoooo+///:::...
527
+ .-//oyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyysoo//:-.`
528
+ .:+syyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyssssssssssssyyyyyyyyyyyyso+/:.`
529
+ `:oyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyssoo+++///::::::::::::::::::-------::::////+ooooo+/:.
530
+ `:oyyyyyyyyyyyyyyyyyyyyyyyyyyyso++/::::::::::::--......```` ```
531
+ -+yyyyyyyyyyyyyyyyyyyyyyyyyso+/:::::::::--...``
532
+ .oyyyyyyyyyyyyyyyyyyyyyyyyo+::::::::--.`` ....-----------------....`
533
+ /yyyyyyyyyyyyyyyyyyyyyyyo/:::::::-..` ..-:/+oosssyyyyyyyyyyyyyyyyyyyyyssssssso++/:--`
534
+ `oyyyyyyyyyyyyyyyyyyyyyyo/::::::-.` .-/+ssyyyyyyyyyyyyyyyysssooo++////::----..........```
535
+ `syyyyyyyyyyyyyyyyyyyyys/:::::-.` .:+syyyyyyyyyyyyyyysoo+//:::---..```
536
+ oyyyyyyyyyyyyyyyyyyyyy+:::::-. ./syyyyyyyyyyyyyyso+/::::--.``
537
+ :yyyyyyyyyyyyyyyyyyyyy+::::-. -oyyyyyyyyyyyyyys+/::::-.`` `.--::/++++ssssssssso++++/::-.`
538
+ oyyyyyyyyyyyyyyyyyyyy+::::-` .oyyyyyyyyyyyyyyo/:::-.` .-/+ssyyyyyyyyssoo++///::----......``
539
+ .yyyyyyyyyyyyyyyyyyyys::::- :syyyyyyyyyyyyys/:::-` ./osyyyyyyyyso+/::-.````
540
+ :ossyyyyyyyyyyyyyyyyy/:::- -yyyyyyyyyyyyyy+:::-` -oyyyyyyyyso/::-.``
541
+ ``.:/+oosssyyyyyyyo::::` `syyyyyyyyyyyyyo:::. `oyyyyyyyyy+::-.`
542
+ .:::::::///++oo::::- -yyyyyyyyyyyyys:::. `oyyyyyyyys/:-`
543
+ -::::::::::::::::::. /yyyyyyyyyyyyy+::- :yyyyyyyyy/:.
544
+ -:::::::::::::::::: .:::++ooosssss:::` /ssyyyyyyo:-
545
+ o+/:-::::::::::::::::::- :::::::::::::` ``.///////:.
546
+ yyyyyyssoo++////:::::::. ::::::::::::- `..::::::::.
547
+ yyyyyyyyyyyyyyyysso::::. -o+/++///////:::- :yyssssss/:.
548
+ yyyyyyyyyyyyyyyyyyy::::. .yyyyyyyyyyyys:::` `yyyyyyyyo:-
549
+ +yyyyyyyyyyyyyyyyyy/:::. syyyyyyyyyyyy/::. /yyyyyyyy/:.
550
+ -yyyyyyyyyyyyyyyyyy/:::: :yyyyyyyyyyyyo::: `oyyyyyyyy/:-`
551
+ `syyyyyyyyyyyyyyyyyo::::` oyyyyyyyyyyyy+::- /syyyyyyyo/:-.`` `````.
552
+ :yyyyyyyyyyyyyyyyyy/:::- `syyyyyyyyyyyy/::-` `/oyyyyyyyssoo+++//:-.`
553
+ +yyyyyyyyyyyyyyyyyo::::- `oyyyyyyyyyyyyo:::-` `-://oo+///--`
554
+ `syyyyyyyyyyyyyyyyy+::::- /yyyyyyyyyyyyyo/:::-..` ``..`
555
+ `syyyyyyyyyyyyyyyyy+::::-` `/syyyyyyyyyyyyso++//::::/:///:-.`
556
+ `+yyyyyyyyyyyyyyyyys/::::-` .:+yyyyyyyyyyyyyyyysso/:.`
557
+ -syyyyyyyyyyyyyyyyyo:::::-.` `.---////----..
558
+ `/syyyyyyyyyyyyyyyyyo+::::::-..``
559
+ -+yyyyyyyyyyyyyyyyyyso+/:::::::---......--::-..`
560
+ -/oyyyyyyyyyyyyyyyyyyyysssoooooooo++/-.`
561
+ `-:/oosyyyyyyyyyyyyyooo//::.`
562
+
563
+ ```
@@ -82,6 +82,7 @@ def export_pattern_to_path(path, export_pattern, lang, languages_mapping = nil)
82
82
  '%android_code%' => android_locale_code(lang['locale']),
83
83
  '%osx_code%' => osx_language_code(lang['crowdin_code']) + '.lproj',
84
84
  '%osx_xliff%' => osx_language_code(lang['crowdin_code']) + '.xliff',
85
+ '%osx_locale%' => osx_language_code(lang['crowdin_code']),
85
86
  }
86
87
 
87
88
  placeholders = pattern.inject([]){ |memo, h| memo << h.first[/%(.*)%/, 1] }
@@ -209,7 +210,8 @@ def get_invalid_placeholders(export_pattern)
209
210
  '%locale_with_underscore%',
210
211
  '%android_code%',
211
212
  '%osx_code%',
212
- '%osx_liff%',
213
+ '%osx_xliff%',
214
+ '%osx_locale%',
213
215
  '%original_file_name%',
214
216
  '%original_path%',
215
217
  '%file_extension%',
@@ -254,8 +256,14 @@ def unzip_file_with_translations(zipfile_name, dest_path, files_list, ignore_mat
254
256
 
255
257
  Zip::File.open(zipfile_name) do |zipfile|
256
258
  zipfile.select { |zip_entry| zip_entry.file? }.each do |f|
259
+ filename = f.name
260
+ if @branch_name and @base_path_contains_branch_subfolders
261
+ # strip branch from filename
262
+ filename = f.name.sub(File.join(@branch_name, '/'), '')
263
+ end
264
+
257
265
  # `f' - relative path in archive
258
- file = files_list[f.name]
266
+ file = files_list[filename]
259
267
  if file
260
268
  fpath = File.join(dest_path, file)
261
269
  FileUtils.mkdir_p(File.dirname(fpath))
@@ -452,7 +460,7 @@ command :upload do |c|
452
460
  end
453
461
  end # Find
454
462
 
455
- end # if File.exists?
463
+ end # if File.exist?
456
464
  end # @config['files']
457
465
 
458
466
  if dest_files.empty?
@@ -630,7 +638,7 @@ command :upload do |c|
630
638
  file_translation_languages = translation_languages
631
639
  end
632
640
 
633
- if File.exists?(File.join(@base_path, file['source']))
641
+ if File.exist?(File.join(@base_path, file['source']))
634
642
  dest = file['dest'] || file['source']
635
643
  dest.sub!(/\A#{Regexp.escape(@base_path)}/, '')
636
644
  dest_files << dest
@@ -732,6 +740,9 @@ command :download do |c|
732
740
  c.desc I18n.t('app.commands.download.switches.ignore_match.desc')
733
741
  c.switch ['ignore-match'], negatable: false
734
742
 
743
+ c.desc I18n.t('app.commands.download.switches.include_unchanged')
744
+ c.switch ['include-unchanged'], negatable: false
745
+
735
746
  c.action do |global_options, options, args|
736
747
  if @branch_name
737
748
  branch = @project_info['files'].find { |h| h['node_type'] == 'branch' && h['name'] == @branch_name }
@@ -768,15 +779,17 @@ command :download do |c|
768
779
  params = {}
769
780
  params[:branch] = @branch_name if @branch_name
770
781
 
771
- # use export API method before to download the most recent translations
772
- print 'Building ZIP archive with the latest translations '
773
- export_translations = @crowdin.export_translations(params)
774
- if export_translations['success']
775
- if export_translations['success']['status'] == 'built'
776
- puts "- OK"
777
- elsif export_translations['success']['status'] == 'skipped'
778
- puts "- Skipped"
779
- puts "Warning: Export was skipped. Please note that this method can be invoked only once per 30 minutes."
782
+ unless options['include-unchanged']
783
+ # use export API method before to download the most recent translations
784
+ print 'Building ZIP archive with the latest translations '
785
+ export_translations = @crowdin.export_translations(params)
786
+ if export_translations['success']
787
+ if export_translations['success']['status'] == 'built'
788
+ puts "- OK"
789
+ elsif export_translations['success']['status'] == 'skipped'
790
+ puts "- Skipped"
791
+ puts "Warning: Export was skipped. Please note that this method can be invoked only once per 30 minutes."
792
+ end
780
793
  end
781
794
  end
782
795
 
@@ -803,7 +816,7 @@ command :download do |c|
803
816
  file_translation_languages = translation_languages
804
817
  end
805
818
 
806
- if File.exists?(File.join(@base_path, file['source']))
819
+ if File.exist?(File.join(@base_path, file['source']))
807
820
  dest = file['source'].sub(/\A#{Regexp.escape(@base_path)}/, '')
808
821
 
809
822
  file_translation_languages.each do |lang|
@@ -952,7 +965,7 @@ command :list do |ls_cmd|
952
965
  end
953
966
  end # Find
954
967
 
955
- end # if File.exists?
968
+ end # if File.exist?
956
969
  end # @config['files']
957
970
 
958
971
  common_dir = @preserve_hierarchy ? '' : find_common_directory_path(dest_files)
@@ -985,7 +998,7 @@ command :list do |ls_cmd|
985
998
 
986
999
  ignores = file['ignore'] || []
987
1000
 
988
- if File.exists?(File.join(@base_path, file['source']))
1001
+ if File.exist?(File.join(@base_path, file['source']))
989
1002
  dest = file['source'].sub(/\A#{Regexp.escape(@base_path)}/, '')
990
1003
 
991
1004
  translation_languages.each do |lang|
@@ -1053,7 +1066,7 @@ pre do |globals, command, options, args|
1053
1066
  'translatable_elements',
1054
1067
  ]
1055
1068
 
1056
- unless File.exists?(globals[:config])
1069
+ unless File.exist?(globals[:config])
1057
1070
  exit_now! <<-EOS.strip_heredoc
1058
1071
  Can't find configuration file (default `crowdin.yaml').
1059
1072
  Type `crowdin-cli help` to know how to specify custom configuration file
@@ -1095,7 +1108,7 @@ pre do |globals, command, options, args|
1095
1108
 
1096
1109
  # user credentials in the user-specific config file have a higher priority than project-specific
1097
1110
  #
1098
- if File.exists?(globals[:identity])
1111
+ if File.exist?(globals[:identity])
1099
1112
  identity = YAML.load(ERB.new(File.read(globals[:identity])).result) || {}
1100
1113
  ['api_key', 'project_identifier', 'base_path'].each do |key|
1101
1114
  @config[key] = identity[key] if identity[key]
@@ -1170,10 +1183,26 @@ pre do |globals, command, options, args|
1170
1183
  EOS
1171
1184
  end
1172
1185
 
1186
+ @base_path_contains_branch_subfolders = false
1187
+ if @config['base_path_contains_branch_subfolders']
1188
+ @base_path_contains_branch_subfolders = case @config['base_path_contains_branch_subfolders']
1189
+ when true
1190
+ true
1191
+ when false
1192
+ false
1193
+ else
1194
+ exit_now! <<-EOS.strip_heredoc
1195
+ Parameter `base_path_contains_branch_subfolders` allows values of true or false.
1196
+ EOS
1197
+ end
1198
+ end
1199
+
1173
1200
  @branch_name = options[:branch] || nil
1174
- # @base_path = @branch_name ? File.join(@base_path, @branch_name) : @base_path
1201
+ if @branch_name and @base_path_contains_branch_subfolders
1202
+ @base_path = File.join(@base_path, @branch_name)
1203
+ end
1175
1204
 
1176
- unless Dir.exists?(@base_path)
1205
+ unless Dir.exist?(@base_path)
1177
1206
  exit_now! <<-EOS.strip_heredoc
1178
1207
  No such directory `#{@base_path}`. Please make sure that the `base_path` is properly set.
1179
1208
  EOS
@@ -1,5 +1,5 @@
1
1
  module Crowdin
2
2
  module CLI
3
- VERSION = '0.5.1'
3
+ VERSION = '0.5.3'
4
4
  end
5
5
  end
@@ -65,6 +65,9 @@ en:
65
65
  ignore_match:
66
66
  desc: |
67
67
  Exit with a zero even if no files matched
68
+ include_unchanged:
69
+ desc: |
70
+ Download all translation files whether or not they have changes
68
71
 
69
72
  list:
70
73
  desc: Show a list of files (the current project)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: crowdin-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.5.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Crowdin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-16 00:00:00.000000000 Z
11
+ date: 2016-05-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -150,7 +150,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
150
150
  version: '0'
151
151
  requirements: []
152
152
  rubyforge_project:
153
- rubygems_version: 2.4.8
153
+ rubygems_version: 2.5.1
154
154
  signing_key:
155
155
  specification_version: 4
156
156
  summary: Crowdin CLI.