locca 0.9.2 → 0.9.3

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
  SHA1:
3
- metadata.gz: 80210a9c3fa5a0b6ff72aa7deb9e01189dd1a4c1
4
- data.tar.gz: a57ecb711907788e14c9a17e24fbe716ff8dc85b
3
+ metadata.gz: 59c4dfcb6f714c36e0e945658fde5705de3bb971
4
+ data.tar.gz: ac9cdc3cf716780c68acabaa7a22fec331722501
5
5
  SHA512:
6
- metadata.gz: 1ae7c80f63fa7298442856284d45a38dd1b2ccc4afd4720299f03b12f26df974d75f80ed93b01e78f2c2e8785a29eddcc07c3bd45e07ab9f76f0a75608897adc
7
- data.tar.gz: 40d0fbc0c067f87fcc89d1703db50a8c0e6bd52a60e9e2dd22f39607bf33ffb46e7b3cbdf3eaa566798c148eb0a6971766e3fb5a5f14d2487fd41e5cfde41383
6
+ metadata.gz: 6dab801c6e1d3e582ce3285bbfffa1afcb8f5ca111f48a07dfe0d828115b995589a747ee9b87b5445afdc843bec8c145fea9c1057298deabbddbba8a11f66e58
7
+ data.tar.gz: aaa95ea21cbf1c66ae5eec112753c27566d04a3bc19f0d69f8b17d93dd7485e468fe0b1249d3c0ba07c48b1b9dd79b71f092859de031d88a1d82eb9efdda4997
data/bin/locca CHANGED
@@ -72,6 +72,18 @@ command :sync do |c|
72
72
  end
73
73
  end
74
74
 
75
+ desc 'Translate the untranslated'
76
+ command :translate do |c|
77
+ c.action do |global_options, options, args|
78
+ work_dir = global_options['work-dir'.to_sym]
79
+ if not work_dir
80
+ work_dir = Dir.getwd
81
+ end
82
+
83
+ $locca.translate(project_in_dir(work_dir), args[0])
84
+ end
85
+ end
86
+
75
87
  pre do |global, command, options, args|
76
88
  $locca = Locca::Locca.new()
77
89
  true
@@ -34,6 +34,7 @@ require 'locca/config_validator'
34
34
  require 'locca/actions/build_action'
35
35
  require 'locca/actions/merge_action'
36
36
  require 'locca/actions/sync_action'
37
+ require 'locca/actions/translate_action'
37
38
 
38
39
  require 'locca/sync/onesky'
39
40
 
@@ -84,6 +85,20 @@ module Locca
84
85
  action.execute()
85
86
  end
86
87
 
88
+ def translate(project, lang = nil)
89
+ if not project
90
+ raise 'Can\'t initialize Locca with nil project'
91
+ end
92
+
93
+ if not lang
94
+ lang = project.base_lang
95
+ end
96
+
97
+ collection_builder = collection_builder()
98
+ action = TranslateAction.new(project, lang, collection_builder, collection_writer(), collection_merger())
99
+ action.execute()
100
+ end
101
+
87
102
  def collection_builder()
88
103
  parser = Babelyoda::StringsParser.new(Babelyoda::StringsLexer.new())
89
104
  return CollectionBuilder.new(File, parser)
@@ -0,0 +1,77 @@
1
+ #
2
+ # The MIT License (MIT)
3
+ #
4
+ # Copyright (c) 2014 Evgeny Shurakov
5
+ #
6
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ # of this software and associated documentation files (the "Software"), to deal
8
+ # in the Software without restriction, including without limitation the rights
9
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ # copies of the Software, and to permit persons to whom the Software is
11
+ # furnished to do so, subject to the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be included in all
14
+ # copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ # SOFTWARE.
23
+ #
24
+
25
+ require 'tempfile'
26
+ require 'open3'
27
+
28
+ module Locca
29
+ class TranslateAction
30
+ def initialize(project, lang, collection_builder, collection_writer, collection_merger)
31
+ @project = project
32
+ @lang = lang
33
+ @collection_merger = collection_merger
34
+ @collection_builder = collection_builder
35
+ @collection_writer = collection_writer
36
+ end
37
+
38
+ def execute()
39
+ editor = ENV['EDITOR']
40
+ if !editor
41
+ raise ArgumentError, 'EDITOR variable should be defined'
42
+ end
43
+
44
+ @project.collection_names().each do |collection_name|
45
+ collection_path = @project.path_for_collection(collection_name, @lang)
46
+ collection = @collection_builder.collection_at_path(collection_path)
47
+
48
+ tmpCollection = Collection.new()
49
+
50
+ collection.sorted_each do |item|
51
+ if item.translated?
52
+ next
53
+ end
54
+
55
+ tmpCollection.add_item(item)
56
+ end
57
+
58
+ if tmpCollection.count == 0
59
+ next
60
+ end
61
+
62
+ tmpFile = Tempfile.new("#{collection_name}.#{@lang}.tmp")
63
+
64
+ @collection_writer.write_to_path(tmpCollection, tmpFile.path)
65
+ command = "#{editor} #{tmpFile.path}"
66
+ stdout,stderr,status = Open3.capture3(command)
67
+ if status.success?
68
+ translated_collection = @collection_builder.collection_at_path(tmpFile.path)
69
+ @collection_merger.merge(translated_collection, collection, (CollectionMerger::ACTION_UPDATE))
70
+ @collection_writer.write_to_path(collection, collection_path)
71
+ end
72
+ tmpFile.close
73
+ tmpFile.unlink
74
+ end
75
+ end
76
+ end
77
+ end
@@ -48,6 +48,15 @@ module Locca
48
48
  return result
49
49
  end
50
50
 
51
+ def collection_names
52
+ result = Set.new()
53
+ Dir.glob(File.join(@lang_dir, "#{@base_lang}.lproj", '*.strings')) do |filepath|
54
+ result.add(File.basename(filepath, '.strings'))
55
+ end
56
+
57
+ return result
58
+ end
59
+
51
60
  def path_for_collection(collection_name, lang)
52
61
  return File.join(@lang_dir, "#{lang}.lproj", "#{collection_name}.strings")
53
62
  end
@@ -22,7 +22,6 @@
22
22
  # SOFTWARE.
23
23
  #
24
24
 
25
- require 'json'
26
25
  require 'digest/md5'
27
26
  require 'rest_client'
28
27
 
@@ -22,5 +22,5 @@
22
22
  # SOFTWARE.
23
23
  #
24
24
  module Locca
25
- VERSION = '0.9.2'
25
+ VERSION = '0.9.3'
26
26
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: locca
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.2
4
+ version: 0.9.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shurakov Evgeny
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-11 00:00:00.000000000 Z
11
+ date: 2014-08-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - '>='
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rest-client
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  description:
84
98
  email: inbox@shurakov.name
85
99
  executables:
@@ -94,6 +108,7 @@ files:
94
108
  - lib/locca/actions/build_action.rb
95
109
  - lib/locca/actions/merge_action.rb
96
110
  - lib/locca/actions/sync_action.rb
111
+ - lib/locca/actions/translate_action.rb
97
112
  - lib/locca/collection.rb
98
113
  - lib/locca/collection_builder.rb
99
114
  - lib/locca/collection_item.rb