babelyoda 2.0.2 → 2.0.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.
- data/babelyoda.gemspec +1 -0
- data/lib/babelyoda.rb +79 -48
- data/lib/babelyoda/genstrings.rb +7 -1
- data/lib/babelyoda/git.rb +14 -8
- data/lib/babelyoda/ibtool.rb +4 -4
- data/lib/babelyoda/logger.rb +17 -14
- data/lib/babelyoda/strings.rb +2 -3
- data/lib/babelyoda/tanker.rb +31 -4
- data/lib/babelyoda/version.rb +1 -1
- data/lib/babelyoda/xib.rb +7 -3
- metadata +29 -24
data/babelyoda.gemspec
CHANGED
@@ -25,4 +25,5 @@ Gem::Specification.new do |s|
|
|
25
25
|
s.add_runtime_dependency "builder", '~> 3.0', '>= 3.0.0'
|
26
26
|
s.add_runtime_dependency "nokogiri", '~> 1.5', '>= 1.5.0'
|
27
27
|
s.add_runtime_dependency "term-ansicolor", '~> 1.0', '>= 1.0.7'
|
28
|
+
s.add_runtime_dependency "log4r-color", '~> 1.2'
|
28
29
|
end
|
data/lib/babelyoda.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
BABELYODA_PATH = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
2
2
|
|
3
3
|
require 'awesome_print'
|
4
|
+
require 'fileutils'
|
4
5
|
|
5
6
|
require_relative 'babelyoda/genstrings'
|
6
7
|
require_relative 'babelyoda/git'
|
@@ -8,6 +9,7 @@ require_relative 'babelyoda/ibtool'
|
|
8
9
|
require_relative 'babelyoda/keyset'
|
9
10
|
require_relative 'babelyoda/localization_key'
|
10
11
|
require_relative 'babelyoda/localization_value'
|
12
|
+
require_relative 'babelyoda/logger'
|
11
13
|
require_relative 'babelyoda/rake'
|
12
14
|
require_relative 'babelyoda/specification'
|
13
15
|
require_relative 'babelyoda/tanker'
|
@@ -31,30 +33,31 @@ namespace :babelyoda do
|
|
31
33
|
|
32
34
|
desc "Extract strings from sources"
|
33
35
|
task :extract_strings do
|
34
|
-
puts "Extracting strings from sources..."
|
35
|
-
dev_lang = spec.development_language
|
36
|
-
|
37
36
|
spec.scm.transaction("[Babelyoda] Extract strings from sources") do
|
37
|
+
$logger.info "Extracting strings from sources..."
|
38
|
+
dev_lang = spec.development_language
|
38
39
|
Babelyoda::Genstrings.run(spec.source_files, dev_lang) do |keyset|
|
39
40
|
old_strings_filename = strings_filename(keyset.name, dev_lang)
|
40
41
|
old_strings = Babelyoda::Strings.new(old_strings_filename, dev_lang).read
|
41
42
|
old_strings.merge!(keyset)
|
42
43
|
old_strings.save!
|
43
|
-
|
44
|
+
$logger.debug "#{old_strings_filename}: #{old_strings.keys.size} keys"
|
44
45
|
end
|
45
46
|
end
|
46
47
|
end
|
47
48
|
|
48
49
|
desc "Extract strings from XIBs"
|
49
50
|
task :extract_xib_strings do
|
50
|
-
puts "Extracting .strings from XIBs..."
|
51
51
|
spec.scm.transaction("[Babelyoda] Extract strings from XIBs") do
|
52
|
+
$logger.info "Extracting .strings from XIBs..."
|
52
53
|
spec.xib_files.each do |xib_filename|
|
53
54
|
xib = Babelyoda::Xib.new(xib_filename, spec.development_language)
|
54
55
|
next unless xib.extractable?(spec.development_language)
|
55
56
|
keyset = xib.strings
|
56
|
-
|
57
|
-
|
57
|
+
unless keyset.empty?
|
58
|
+
$logger.debug "#{xib_filename} => #{xib.strings_filename}"
|
59
|
+
Babelyoda::Strings.save_keyset(keyset, xib.strings_filename, spec.development_language)
|
60
|
+
end
|
58
61
|
end
|
59
62
|
end
|
60
63
|
end
|
@@ -63,62 +66,93 @@ namespace :babelyoda do
|
|
63
66
|
task :extract => [:extract_strings, :extract_xib_strings] do
|
64
67
|
end
|
65
68
|
|
69
|
+
desc "Drops empty local keysets"
|
70
|
+
task :drop_empty_strings do
|
71
|
+
spec.scm.transaction("[Babelyoda] Drop empty .strings files") do
|
72
|
+
$logger.info "Dropping empty .strings files..."
|
73
|
+
files_to_drop = []
|
74
|
+
spec.strings_files.each do |filename|
|
75
|
+
strings = Babelyoda::Strings.new(filename, spec.development_language).read!
|
76
|
+
if strings.empty?
|
77
|
+
files_to_drop << filename
|
78
|
+
spec.localization_languages.each do |language|
|
79
|
+
localized_filename = File.localized(filename, language)
|
80
|
+
files_to_drop << localized_filename if File.exist?(localized_filename)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
files_to_drop.each do |filename|
|
85
|
+
$logger.info "REMOVED empty file: #{filename}"
|
86
|
+
FileUtils.rm filename
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
66
91
|
desc "Create remote keysets for local keysets"
|
67
|
-
task :create_keysets => :extract do
|
68
|
-
|
69
|
-
puts "Creating remote keysets for local keysets..."
|
92
|
+
task :create_keysets => [:extract, :drop_empty_strings] do
|
93
|
+
$logger.info "Creating remote keysets for local keysets..."
|
70
94
|
remote_keyset_names = spec.engine.list
|
71
95
|
spec.strings_files.each do |filename|
|
72
96
|
keyset_name = Babelyoda::Keyset.keyset_name(filename)
|
73
97
|
if remote_keyset_names.include?(keyset_name)
|
74
|
-
|
98
|
+
$logger.debug "Tanker: An existing keyset found: #{keyset_name}"
|
75
99
|
next
|
76
100
|
end
|
77
|
-
spec.
|
78
|
-
|
101
|
+
strings = Babelyoda::Strings.new(filename, spec.development_language).read!
|
102
|
+
unless strings.empty?
|
103
|
+
spec.engine.create(keyset_name)
|
104
|
+
$logger.debug "Tanker: Created NEW keyset: #{keyset_name}"
|
105
|
+
end
|
79
106
|
end
|
80
107
|
end
|
81
108
|
|
82
109
|
desc "Drops remote keys not found in local keysets"
|
83
110
|
task :drop_orphan_keys => :create_keysets do
|
84
|
-
|
111
|
+
$logger.info "Dropping orphan keys..."
|
85
112
|
spec.strings_files.each do |filename|
|
86
113
|
strings = Babelyoda::Strings.new(filename, spec.development_language).read!
|
87
|
-
|
114
|
+
$logger.debug "Processing keyset: #{strings.name}"
|
88
115
|
remote_keyset = spec.engine.load_keyset(strings.name)
|
89
|
-
|
90
|
-
remote_keyset.keys.
|
91
|
-
unless strings.keys.has_key?(key
|
92
|
-
|
93
|
-
|
116
|
+
original_keys_size = remote_keyset.keys.size
|
117
|
+
remote_keyset.keys.delete_if do |key, value|
|
118
|
+
unless strings.keys.has_key?(key)
|
119
|
+
$logger.debug "Found orphan key: #{key}"
|
120
|
+
true
|
121
|
+
else
|
122
|
+
false
|
94
123
|
end
|
95
124
|
end
|
96
|
-
|
97
|
-
|
125
|
+
next if original_keys_size == remote_keyset.keys.size
|
126
|
+
unless remote_keyset.empty?
|
127
|
+
$logger.debug "Keys removed: #{original_keys_size - remote_keyset.keys.size}, keyset REPLACED."
|
128
|
+
spec.engine.replace(remote_keyset)
|
129
|
+
else
|
130
|
+
$logger.debug "All keys removed: keyset DELETED."
|
131
|
+
spec.engine.drop_keyset!(remote_keyset.name)
|
98
132
|
end
|
99
|
-
spec.engine.replace(remote_keyset)
|
100
|
-
puts " Dropped keys: #{keys_to_drop.size}"
|
101
133
|
end
|
102
134
|
end
|
103
135
|
|
104
136
|
desc "Pushes resources to the translators"
|
105
137
|
task :push => :drop_orphan_keys do
|
106
|
-
|
138
|
+
$logger.info "Pushing local keys to the remote..."
|
107
139
|
spec.strings_files.each do |filename|
|
108
140
|
strings = Babelyoda::Strings.new(filename, spec.development_language).read!
|
109
|
-
|
141
|
+
$logger.debug "Processing keyset: #{strings.name}"
|
110
142
|
remote_keyset = spec.engine.load_keyset(strings.name, nil, :unapproved)
|
111
143
|
result = remote_keyset.merge!(strings, preserve: true)
|
112
144
|
remote_keyset.ensure_languages!(spec.all_languages)
|
113
|
-
|
114
|
-
|
145
|
+
if result[:new] > 0 || result[:updated] > 0
|
146
|
+
spec.engine.replace(remote_keyset)
|
147
|
+
$logger.debug "New keys: #{result[:new]} Updated keys: #{result[:updated]}"
|
148
|
+
end
|
115
149
|
end
|
116
150
|
end
|
117
151
|
|
118
152
|
desc "Fetches remote strings and merges them down into local .string files"
|
119
153
|
task :fetch_strings do
|
120
|
-
puts "Fetching remote translations..."
|
121
154
|
spec.scm.transaction("[Babelyoda] Merge in remote translations") do
|
155
|
+
$logger.info "Fetching remote translations..."
|
122
156
|
spec.strings_files.each do |filename|
|
123
157
|
keyset_name = Babelyoda::Keyset.keyset_name(filename)
|
124
158
|
remote_keyset = spec.engine.load_keyset(keyset_name, nil, :unapproved)
|
@@ -126,7 +160,7 @@ namespace :babelyoda do
|
|
126
160
|
spec.all_languages.each do |language|
|
127
161
|
keyset_filename = strings_filename(keyset_name, language)
|
128
162
|
Babelyoda::Strings.save_keyset(remote_keyset, keyset_filename, language)
|
129
|
-
|
163
|
+
$logger.debug "#{keyset_filename}"
|
130
164
|
end
|
131
165
|
end
|
132
166
|
end
|
@@ -134,15 +168,17 @@ namespace :babelyoda do
|
|
134
168
|
|
135
169
|
desc "Incrementally localizes XIB files"
|
136
170
|
task :localize_xibs do
|
137
|
-
puts "Translating XIB files..."
|
138
|
-
|
139
171
|
spec.scm.transaction("[Babelyoda] Localize XIB files") do
|
172
|
+
$logger.info "Translating XIB files..."
|
140
173
|
spec.xib_files.each do |filename|
|
141
174
|
xib = Babelyoda::Xib.new(filename, spec.development_language)
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
175
|
+
if xib.localizable?
|
176
|
+
xib.import_strings(spec.scm)
|
177
|
+
spec.localization_languages.each do |language|
|
178
|
+
xib.localize_incremental(language, spec.scm)
|
179
|
+
end
|
180
|
+
else
|
181
|
+
$logger.warn "#{filename} has no localizable resources. No localization needed."
|
146
182
|
end
|
147
183
|
end
|
148
184
|
end
|
@@ -169,7 +205,7 @@ namespace :babelyoda do
|
|
169
205
|
combined_keyset.merge!(lang_strings)
|
170
206
|
end
|
171
207
|
end
|
172
|
-
$logger.
|
208
|
+
$logger.info("#{spec.development_language}: #{combined_keyset.keys.size} keys", false)
|
173
209
|
missing = {}
|
174
210
|
spec.localization_languages.each do |language|
|
175
211
|
missing[language] = Babelyoda::Keyset.new("babelyoda.verify.#{language}")
|
@@ -202,22 +238,17 @@ namespace :babelyoda do
|
|
202
238
|
keysets = ENV['KEYSETS'].split(',')
|
203
239
|
if keysets.include?('*')
|
204
240
|
keysets = spec.engine.list
|
205
|
-
|
241
|
+
$logger.info "Dropping ALL keysets: #{keysets}"
|
206
242
|
else
|
207
|
-
|
243
|
+
$logger.info "Dropping keysets: #{keysets}"
|
208
244
|
end
|
209
245
|
keysets.each do |keyset_name|
|
210
|
-
|
211
|
-
|
212
|
-
key = Babelyoda::LocalizationKey.new("Dummy", "Dummy")
|
213
|
-
value = Babelyoda::LocalizationValue.new(:en, "Dummy")
|
214
|
-
key << value
|
215
|
-
keyset.merge_key!(key)
|
216
|
-
spec.engine.replace(keyset)
|
246
|
+
$logger.debug "Dropping: #{keyset_name}"
|
247
|
+
spec.engine.drop_keyset!(keyset_name)
|
217
248
|
end
|
218
|
-
puts "All done!"
|
219
249
|
else
|
220
|
-
|
250
|
+
$logger.error "Please provide keyset names to drop in the KEYSET environment variable. " +
|
251
|
+
"Separate by commas. Use * for ALL."
|
221
252
|
end
|
222
253
|
end
|
223
254
|
|
data/lib/babelyoda/genstrings.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'fileutils'
|
2
2
|
require 'tmpdir'
|
3
3
|
|
4
|
+
require_relative 'logger'
|
4
5
|
require_relative 'keyset'
|
5
6
|
require_relative 'strings'
|
6
7
|
|
@@ -10,7 +11,12 @@ module Babelyoda
|
|
10
11
|
keysets = {}
|
11
12
|
files.each do |fn|
|
12
13
|
Dir.mktmpdir do |dir|
|
13
|
-
|
14
|
+
ncmd = "genstrings -littleEndian -o '#{dir}' '#{fn}' 2>&1"
|
15
|
+
output = `#{ncmd}`
|
16
|
+
raise "genstrings failed: #{ncmd}#{output.empty? ? "" : " #{output}"}" unless $?
|
17
|
+
unless output.empty?
|
18
|
+
$logger.warn output.gsub!(/[\n\r]/, ' ')
|
19
|
+
end
|
14
20
|
Dir.glob(File.join(dir, '*.strings')).each do |strings_file|
|
15
21
|
strings = Babelyoda::Strings.new(strings_file, language).read!
|
16
22
|
strings.name = File.join('Resources', File.basename(strings.name))
|
data/lib/babelyoda/git.rb
CHANGED
@@ -47,7 +47,10 @@ module Babelyoda
|
|
47
47
|
end
|
48
48
|
|
49
49
|
def check_requirements!
|
50
|
-
|
50
|
+
unless clean?
|
51
|
+
$logger.error "The working copy is not clean. Please commit your work before running Babelyoda tasks."
|
52
|
+
exit 1
|
53
|
+
end
|
51
54
|
end
|
52
55
|
|
53
56
|
def git_modified?(filename)
|
@@ -56,7 +59,7 @@ module Babelyoda
|
|
56
59
|
|
57
60
|
def git_status
|
58
61
|
result = {}
|
59
|
-
`git status --porcelain`.scan(/^(\sM|\?\?)\s+(.*)$/).each do |m|
|
62
|
+
`git status --porcelain`.scan(/^(\sM|\sD|\?\?)\s+(.*)$/).each do |m|
|
60
63
|
result[m[1]] = m[0]
|
61
64
|
end
|
62
65
|
result
|
@@ -65,13 +68,16 @@ module Babelyoda
|
|
65
68
|
def git_add!(filename)
|
66
69
|
ncmd = ['git', 'add', filename]
|
67
70
|
rc = Kernel.system(*ncmd)
|
68
|
-
$logger.error "
|
71
|
+
$logger.error "#{ncmd}" unless rc
|
69
72
|
end
|
70
73
|
|
71
74
|
def git_commit!(msg)
|
72
|
-
ncmd =
|
73
|
-
|
74
|
-
$logger.error
|
75
|
+
ncmd = "git commit -m \"#{msg}\" 2>&1"
|
76
|
+
output = `#{ncmd}`
|
77
|
+
$logger.error ncmd unless $?
|
78
|
+
unless output.empty?
|
79
|
+
$logger.info output.gsub!(/[\n\r]/, ' ')
|
80
|
+
end
|
75
81
|
end
|
76
82
|
|
77
83
|
def git_show(sha1, filename = nil)
|
@@ -83,12 +89,12 @@ module Babelyoda
|
|
83
89
|
end
|
84
90
|
blob
|
85
91
|
}
|
86
|
-
$logger.error "
|
92
|
+
$logger.error "#{ncmd}" unless $? == 0
|
87
93
|
end
|
88
94
|
|
89
95
|
def git_ls_sha1(filename)
|
90
96
|
matches = `git ls-files -s '#{filename}'`.match(/^\d{6}\s+([^\s]+)\s+.*$/)
|
91
|
-
$logger.error "
|
97
|
+
$logger.error "Couldn't get SHA1 for: #{filename}" unless matches
|
92
98
|
matches[1]
|
93
99
|
end
|
94
100
|
|
data/lib/babelyoda/ibtool.rb
CHANGED
@@ -8,7 +8,7 @@ module Babelyoda
|
|
8
8
|
basename = File.basename(xib_filename, '.xib')
|
9
9
|
strings_filename = File.join(dir, "#{basename}.strings")
|
10
10
|
cmd = "ibtool --generate-strings-file '#{strings_filename}' '#{xib_filename}'"
|
11
|
-
$logger.error "
|
11
|
+
$logger.error "#{cmd}" unless Kernel.system(cmd)
|
12
12
|
return Babelyoda::Strings.new(strings_filename, language).read!
|
13
13
|
end
|
14
14
|
end
|
@@ -21,7 +21,7 @@ module Babelyoda
|
|
21
21
|
|
22
22
|
ncmd = ['ibtool', '--strings-file', strings_fn, '--write', target_xib_fn, source_xib_fn]
|
23
23
|
rc = Kernel.system(*ncmd)
|
24
|
-
$logger.error "
|
24
|
+
$logger.error "#{ncmd}" unless rc
|
25
25
|
end
|
26
26
|
|
27
27
|
def self.localize_incrementally(source_xib_fn, target_xib_fn, strings_fn, old_source_xib_fn)
|
@@ -36,13 +36,13 @@ module Babelyoda
|
|
36
36
|
ncmd = ['ibtool', '--previous-file', old_source_xib_fn, '--incremental-file', target_xib_fn,
|
37
37
|
'--strings-file', strings_fn, '--localize-incremental', '--write', target_xib_fn, source_xib_fn]
|
38
38
|
rc = Kernel.system(*ncmd)
|
39
|
-
$logger.error "
|
39
|
+
$logger.error "#{ncmd}" unless rc
|
40
40
|
end
|
41
41
|
|
42
42
|
def self.import_strings(filename, strings_filename)
|
43
43
|
ncmd = ['ibtool', '--import-strings-file', strings_filename, '--write', filename, filename]
|
44
44
|
rc = Kernel.system(*ncmd)
|
45
|
-
$logger.error "
|
45
|
+
$logger.error "#{ncmd}" unless rc
|
46
46
|
end
|
47
47
|
|
48
48
|
private
|
data/lib/babelyoda/logger.rb
CHANGED
@@ -1,16 +1,19 @@
|
|
1
|
-
require '
|
1
|
+
require 'log4r-color'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
3
|
+
unless $logger
|
4
|
+
Log4r::Logger.root.level = ENV['DEBUG'] ? Log4r::DEBUG : (ENV['VERBOSE'] ? Log4r::INFO : Log4r::WARN)
|
5
|
+
|
6
|
+
Log4r::ColorOutputter.new 'color', {
|
7
|
+
:colors => {
|
8
|
+
:debug => :black,
|
9
|
+
:info => :blue,
|
10
|
+
:warn => :yellow,
|
11
|
+
:error => :red,
|
12
|
+
:fatal => {:color => :red, :background => :white}
|
13
|
+
},
|
14
|
+
:formatter => Log4r::PatternFormatter.new(:pattern => "%l %m")
|
15
|
+
}
|
15
16
|
|
16
|
-
$logger
|
17
|
+
$logger = Log4r::Logger.new('babelyoda')
|
18
|
+
$logger.add('color')
|
19
|
+
end
|
data/lib/babelyoda/strings.rb
CHANGED
@@ -21,9 +21,8 @@ module Babelyoda
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def read
|
24
|
-
|
25
|
-
|
26
|
-
File.open(localized_filename, read_mode) do |f|
|
24
|
+
if File.exist?(@filename)
|
25
|
+
File.open(@filename, read_mode) do |f|
|
27
26
|
lexer = StringsLexer.new
|
28
27
|
parser = StringsParser.new(lexer, @language)
|
29
28
|
parser.parse(f.read) do |localization_key|
|
data/lib/babelyoda/tanker.rb
CHANGED
@@ -3,7 +3,8 @@ require 'net/http'
|
|
3
3
|
require 'nokogiri'
|
4
4
|
require 'stringio'
|
5
5
|
|
6
|
-
|
6
|
+
require_relative 'logger'
|
7
|
+
require_relative 'specification_loader'
|
7
8
|
|
8
9
|
module Babelyoda
|
9
10
|
class Keyset
|
@@ -104,6 +105,10 @@ module Babelyoda
|
|
104
105
|
Babelyoda::Keyset.new(keyset_name)
|
105
106
|
end
|
106
107
|
|
108
|
+
def drop_keyset!(keyset_name)
|
109
|
+
delete("/admin/project/#{project_id}/keyset/", { :keyset => keyset_name })
|
110
|
+
end
|
111
|
+
|
107
112
|
private
|
108
113
|
|
109
114
|
MULTIPART_BOUNDARY = '114YANDEXTANKERCLIENTBNDR';
|
@@ -151,8 +156,8 @@ module Babelyoda
|
|
151
156
|
req.content_type = multipart_content_type
|
152
157
|
req.body = multipart_data(payload)
|
153
158
|
|
154
|
-
|
155
|
-
|
159
|
+
$logger.debug "POST URI: #{uri}"
|
160
|
+
$logger.debug "POST BODY: #{req.body}"
|
156
161
|
|
157
162
|
res = Net::HTTP.start(uri.host, uri.port) do |http|
|
158
163
|
http.request(req)
|
@@ -174,7 +179,29 @@ module Babelyoda
|
|
174
179
|
req = Net::HTTP::Get.new(uri.request_uri)
|
175
180
|
req['AUTHORIZATION'] = token
|
176
181
|
|
177
|
-
|
182
|
+
$logger.debug "GET URI: #{uri}"
|
183
|
+
|
184
|
+
res = Net::HTTP.start(uri.host, uri.port) do |http|
|
185
|
+
http.request(req)
|
186
|
+
end
|
187
|
+
|
188
|
+
case res
|
189
|
+
when Net::HTTPSuccess, Net::HTTPRedirection
|
190
|
+
Nokogiri::XML.parse(res.body)
|
191
|
+
else
|
192
|
+
doc = Nokogiri::XML.parse(res.body)
|
193
|
+
error = doc.css('result error')[0].content
|
194
|
+
raise Error.new(error)
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
def delete(method_name, payload = nil)
|
199
|
+
uri = URI(method(method_name))
|
200
|
+
uri.query = URI.encode_www_form(payload) if payload
|
201
|
+
req = Net::HTTP::Delete.new(uri.request_uri)
|
202
|
+
req['AUTHORIZATION'] = token
|
203
|
+
|
204
|
+
$logger.debug "DELETE URI: #{uri}"
|
178
205
|
|
179
206
|
res = Net::HTTP.start(uri.host, uri.port) do |http|
|
180
207
|
http.request(req)
|
data/lib/babelyoda/version.rb
CHANGED
data/lib/babelyoda/xib.rb
CHANGED
@@ -49,7 +49,7 @@ module Babelyoda
|
|
49
49
|
end
|
50
50
|
|
51
51
|
def localize(language, scm)
|
52
|
-
|
52
|
+
$logger.debug "Localizing #{filename} => #{File.localized(filename, language)}..."
|
53
53
|
assert_localization_target(language)
|
54
54
|
strings_fn = strings_filename(language)
|
55
55
|
$logger.error "No strings file found: #{strings_fn}" unless File.exist?(strings_fn)
|
@@ -61,7 +61,7 @@ module Babelyoda
|
|
61
61
|
unless localizable_incrementally?(scm, language)
|
62
62
|
localize(language, scm)
|
63
63
|
else
|
64
|
-
|
64
|
+
$logger.debug "Incrementally localizing #{filename} => #{File.localized(filename, language)}..."
|
65
65
|
strings_fn = strings_filename(language)
|
66
66
|
$logger.error "No strings file found: #{strings_fn}" unless File.exist?(strings_fn)
|
67
67
|
|
@@ -76,10 +76,14 @@ module Babelyoda
|
|
76
76
|
end
|
77
77
|
|
78
78
|
def import_strings(scm)
|
79
|
-
|
79
|
+
$logger.debug "Importing #{strings_filename} => #{filename}"
|
80
80
|
Babelyoda::Ibtool.import_strings(filename, strings_filename)
|
81
81
|
end
|
82
82
|
|
83
|
+
def localizable?
|
84
|
+
File.exist?(strings_filename)
|
85
|
+
end
|
86
|
+
|
83
87
|
private
|
84
88
|
|
85
89
|
def localizable_incrementally?(scm, language)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: babelyoda
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-01-
|
12
|
+
date: 2012-01-20 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement: &
|
16
|
+
requirement: &70285764429160 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -24,10 +24,10 @@ dependencies:
|
|
24
24
|
version: 2.8.0
|
25
25
|
type: :development
|
26
26
|
prerelease: false
|
27
|
-
version_requirements: *
|
27
|
+
version_requirements: *70285764429160
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: awesome_print
|
30
|
-
requirement: &
|
30
|
+
requirement: &70285764427000 !ruby/object:Gem::Requirement
|
31
31
|
none: false
|
32
32
|
requirements:
|
33
33
|
- - ~>
|
@@ -38,10 +38,10 @@ dependencies:
|
|
38
38
|
version: 1.0.2
|
39
39
|
type: :runtime
|
40
40
|
prerelease: false
|
41
|
-
version_requirements: *
|
41
|
+
version_requirements: *70285764427000
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: rake
|
44
|
-
requirement: &
|
44
|
+
requirement: &70285764425280 !ruby/object:Gem::Requirement
|
45
45
|
none: false
|
46
46
|
requirements:
|
47
47
|
- - ~>
|
@@ -52,10 +52,10 @@ dependencies:
|
|
52
52
|
version: 0.9.2.2
|
53
53
|
type: :runtime
|
54
54
|
prerelease: false
|
55
|
-
version_requirements: *
|
55
|
+
version_requirements: *70285764425280
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: active_support
|
58
|
-
requirement: &
|
58
|
+
requirement: &70285764423640 !ruby/object:Gem::Requirement
|
59
59
|
none: false
|
60
60
|
requirements:
|
61
61
|
- - ~>
|
@@ -66,10 +66,10 @@ dependencies:
|
|
66
66
|
version: 3.0.0
|
67
67
|
type: :runtime
|
68
68
|
prerelease: false
|
69
|
-
version_requirements: *
|
69
|
+
version_requirements: *70285764423640
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: rchardet19
|
72
|
-
requirement: &
|
72
|
+
requirement: &70285764422500 !ruby/object:Gem::Requirement
|
73
73
|
none: false
|
74
74
|
requirements:
|
75
75
|
- - ~>
|
@@ -80,10 +80,10 @@ dependencies:
|
|
80
80
|
version: 1.3.5
|
81
81
|
type: :runtime
|
82
82
|
prerelease: false
|
83
|
-
version_requirements: *
|
83
|
+
version_requirements: *70285764422500
|
84
84
|
- !ruby/object:Gem::Dependency
|
85
85
|
name: builder
|
86
|
-
requirement: &
|
86
|
+
requirement: &70285764421240 !ruby/object:Gem::Requirement
|
87
87
|
none: false
|
88
88
|
requirements:
|
89
89
|
- - ~>
|
@@ -94,10 +94,10 @@ dependencies:
|
|
94
94
|
version: 3.0.0
|
95
95
|
type: :runtime
|
96
96
|
prerelease: false
|
97
|
-
version_requirements: *
|
97
|
+
version_requirements: *70285764421240
|
98
98
|
- !ruby/object:Gem::Dependency
|
99
99
|
name: nokogiri
|
100
|
-
requirement: &
|
100
|
+
requirement: &70285764420020 !ruby/object:Gem::Requirement
|
101
101
|
none: false
|
102
102
|
requirements:
|
103
103
|
- - ~>
|
@@ -108,10 +108,10 @@ dependencies:
|
|
108
108
|
version: 1.5.0
|
109
109
|
type: :runtime
|
110
110
|
prerelease: false
|
111
|
-
version_requirements: *
|
111
|
+
version_requirements: *70285764420020
|
112
112
|
- !ruby/object:Gem::Dependency
|
113
113
|
name: term-ansicolor
|
114
|
-
requirement: &
|
114
|
+
requirement: &70285764418840 !ruby/object:Gem::Requirement
|
115
115
|
none: false
|
116
116
|
requirements:
|
117
117
|
- - ~>
|
@@ -122,7 +122,18 @@ dependencies:
|
|
122
122
|
version: 1.0.7
|
123
123
|
type: :runtime
|
124
124
|
prerelease: false
|
125
|
-
version_requirements: *
|
125
|
+
version_requirements: *70285764418840
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: log4r-color
|
128
|
+
requirement: &70285764417700 !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
130
|
+
requirements:
|
131
|
+
- - ~>
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '1.2'
|
134
|
+
type: :runtime
|
135
|
+
prerelease: false
|
136
|
+
version_requirements: *70285764417700
|
126
137
|
description: A simple utility to push/pull l10n resources of an Xcode project to/from
|
127
138
|
the translators
|
128
139
|
email:
|
@@ -170,18 +181,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
170
181
|
- - ! '>='
|
171
182
|
- !ruby/object:Gem::Version
|
172
183
|
version: '0'
|
173
|
-
segments:
|
174
|
-
- 0
|
175
|
-
hash: -1710872162034708641
|
176
184
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
177
185
|
none: false
|
178
186
|
requirements:
|
179
187
|
- - ! '>='
|
180
188
|
- !ruby/object:Gem::Version
|
181
189
|
version: '0'
|
182
|
-
segments:
|
183
|
-
- 0
|
184
|
-
hash: -1710872162034708641
|
185
190
|
requirements: []
|
186
191
|
rubyforge_project: babelyoda
|
187
192
|
rubygems_version: 1.8.10
|