xlocalize 0.2.1 → 0.2.2
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 +4 -4
- data/.travis.yml +16 -0
- data/README.md +6 -0
- data/lib/xlocalize/executor.rb +57 -73
- data/lib/xlocalize/version.rb +1 -1
- data/lib/xlocalize/webtranslateit.rb +42 -46
- data/lib/xlocalize/xliff.rb +48 -0
- data/lib/xlocalize.rb +18 -8
- data/xlocalize.gemspec +3 -2
- metadata +27 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fc1db3d226514b4c5d809d86fd2dedcdde3723cc
|
4
|
+
data.tar.gz: 3b7203835f011707bf6e2a5f9211d52fba40b018
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b9d1f17f00b1523166cabad373f60e6b8eab502f5113575c19c758335be5d05d60df2af20a8fe704abc736e6324355bbb3a4f31477da1e0a0b697e8612c80833
|
7
|
+
data.tar.gz: 06d71123e95960f687ad162389adf70c6fce1f692f44727ead36a74ebaa49106d1060d9dcd7e923328c94ae8a1dec01d6bc61824e2b97e13dee34b2302a63569
|
data/.travis.yml
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
language: ruby
|
2
|
+
cache: bundler
|
3
|
+
rvm: 2.0.0
|
4
|
+
osx_image: xcode8
|
5
|
+
git:
|
6
|
+
depth: 1
|
7
|
+
before_install: gem install bundler
|
8
|
+
install: bundle install
|
9
|
+
script: bundle exec rspec -f d -c
|
10
|
+
os: osx
|
11
|
+
addons:
|
12
|
+
code_climate:
|
13
|
+
repo_token: b4206ed2b9443314c998e8909dfa31f0ed476ea5ab460b98e102cd20508ff564
|
14
|
+
after_success:
|
15
|
+
- bundle exec codeclimate-test-reporter
|
16
|
+
|
data/README.md
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
[](https://travis-ci.org/viktorasl/xlocalize)
|
2
|
+
[](https://badge.fury.io/rb/xlocalize)
|
3
|
+
[](https://codeclimate.com/github/viktorasl/xlocalize)
|
4
|
+
[](https://codeclimate.com/github/viktorasl/xlocalize/coverage)
|
5
|
+
[](http://inch-ci.org/github/viktorasl/xlocalize)
|
6
|
+
|
1
7
|
# Xlocalize
|
2
8
|
|
3
9
|
To see all commands execute:
|
data/lib/xlocalize/executor.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
require 'xlocalize/webtranslateit'
|
2
|
+
require 'xlocalize/xliff'
|
2
3
|
require 'colorize'
|
3
4
|
require 'nokogiri'
|
4
5
|
require 'plist'
|
5
6
|
require 'yaml'
|
6
|
-
require 'pathname'
|
7
7
|
|
8
8
|
module Xlocalize
|
9
9
|
class Executor
|
@@ -30,7 +30,10 @@ module Xlocalize
|
|
30
30
|
end
|
31
31
|
|
32
32
|
purelyze(master_lang, target, excl_prefix, project)
|
33
|
+
push_master_file(wti, master_lang, master_file_name)
|
34
|
+
end
|
33
35
|
|
36
|
+
def push_master_file(wti, master_lang, master_file_name)
|
34
37
|
# Pushing master file to WebtranslateIt
|
35
38
|
begin
|
36
39
|
puts "Uploading master file to WebtranslateIt"
|
@@ -49,68 +52,50 @@ module Xlocalize
|
|
49
52
|
|
50
53
|
def purelyze(locale, target, excl_prefix, project)
|
51
54
|
locale_file_name = locale_file_name(locale)
|
52
|
-
target_prefix = "#{target}/"
|
53
55
|
doc = Nokogiri::XML(open(locale_file_name))
|
54
56
|
|
55
|
-
puts "Removing all files not matching required targets"
|
56
|
-
doc.
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
puts "Removing trans-unit
|
62
|
-
doc.
|
63
|
-
node.parent.remove if node.content.start_with?(excl_prefix)
|
64
|
-
}
|
65
|
-
|
66
|
-
puts "Filtering plurals"
|
67
|
-
plurals = {}
|
68
|
-
doc.xpath("//xmlns:file").each { |node|
|
69
|
-
fname = node["original"]
|
70
|
-
next if !fname.end_with?(".strings")
|
71
|
-
fname_stringsdict = fname << 'dict'
|
72
|
-
file_full_path = Pathname.new(project).split.first.to_s << '/' << fname_stringsdict
|
73
|
-
next if !File.exist?(file_full_path)
|
74
|
-
|
75
|
-
Plist::parse_xml(file_full_path).each do |key, val|
|
76
|
-
values = val["value"]
|
77
|
-
transl = values.select { |k, v| ['zero', 'one', 'few', 'other'].include?(k) }
|
78
|
-
plurals[fname_stringsdict] = {key => transl}
|
79
|
-
sel = 'body > trans-unit[id="' << key << '"]'
|
80
|
-
node.css(sel).remove
|
81
|
-
end
|
82
|
-
}
|
83
|
-
|
84
|
-
puts "Removing all files having no trans-unit elements after removal"
|
85
|
-
doc.xpath("//xmlns:body").each { |node|
|
86
|
-
node.parent.remove if node.elements.count == 0
|
87
|
-
}
|
57
|
+
puts "Removing all files not matching required targets" if $VERBOSE
|
58
|
+
doc.filter_not_target_files(target)
|
59
|
+
puts "Removing trans-unit's having reserverd prefix in their sources" if $VERBOSE
|
60
|
+
doc.filter_trans_units(excl_prefix)
|
61
|
+
puts "Filtering plurals" if $VERBOSE
|
62
|
+
plurals = doc.filter_plurals(project)
|
63
|
+
puts "Removing all files having no trans-unit elements after removal" if $VERBOSE
|
64
|
+
doc.filter_empty_files
|
88
65
|
|
89
|
-
puts "Writing modified XLIFF file to #{locale_file_name}"
|
66
|
+
puts "Writing modified XLIFF file to #{locale_file_name}" if $VERBOSE
|
90
67
|
File.open(locale_file_name, 'w') { |f| f.write(doc.to_xml) }
|
91
|
-
|
92
68
|
if !plurals.empty?
|
93
|
-
puts "Writing plurals to plurals YAML file"
|
69
|
+
puts "Writing plurals to plurals YAML file" if $VERBOSE
|
94
70
|
File.open(plurals_file_name(locale), 'w') { |f| f.write({locale => plurals}.to_yaml) }
|
95
71
|
end
|
96
72
|
end
|
97
73
|
|
74
|
+
def out_list_of_translations_of_locale(wti, locale, translations)
|
75
|
+
puts "Downloading translations for #{locale}"
|
76
|
+
translations = wti.pull(locale)
|
77
|
+
plurals_content = translations['plurals']
|
78
|
+
|
79
|
+
out_list = [{
|
80
|
+
"path" => "#{locale}.xliff",
|
81
|
+
"content" => translations['xliff']
|
82
|
+
}]
|
83
|
+
out_list << {
|
84
|
+
"path" => "#{locale}_plurals.yaml",
|
85
|
+
"content" => plurals_content
|
86
|
+
} if not plurals_content.nil?
|
87
|
+
|
88
|
+
return out_list
|
89
|
+
end
|
90
|
+
|
98
91
|
def download(wti, locales)
|
99
92
|
begin
|
100
93
|
locales.each do |locale|
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
puts "Done saving xliff.".green
|
107
|
-
}
|
108
|
-
|
109
|
-
if !translations['plurals'].nil?
|
110
|
-
File.open("#{locale}_plurals.yaml", "w") {|file|
|
111
|
-
file.write(translations['plurals'])
|
112
|
-
puts "Done saving plurals.".green
|
113
|
-
}
|
94
|
+
out_list_of_translations_of_locale(wti, locale, translations).each do |out|
|
95
|
+
File.open(out["path"], "w") do |file|
|
96
|
+
file.write(out["content"])
|
97
|
+
puts "Done saving #{out['path']}.".green
|
98
|
+
end
|
114
99
|
end
|
115
100
|
end
|
116
101
|
rescue => err
|
@@ -118,26 +103,26 @@ module Xlocalize
|
|
118
103
|
end
|
119
104
|
end
|
120
105
|
|
121
|
-
def
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
# TODO: join all parts till the last '.'
|
134
|
-
name += "#{part.split('.')[0]}.strings"
|
135
|
-
else
|
136
|
-
name += part
|
137
|
-
end
|
106
|
+
def filename_from_xliff_provided_filename(file_name)
|
107
|
+
parts = file_name.split('/')
|
108
|
+
name = ""
|
109
|
+
parts.each_with_index do |part, idx|
|
110
|
+
name += "/" if idx > 0
|
111
|
+
if part.end_with?(".lproj")
|
112
|
+
name += "#{locale}.lproj"
|
113
|
+
elsif idx+1 == parts.count
|
114
|
+
# TODO: join all parts till the last '.'
|
115
|
+
name += "#{part.split('.')[0]}.strings"
|
116
|
+
else
|
117
|
+
name += part
|
138
118
|
end
|
139
|
-
|
140
|
-
|
119
|
+
end
|
120
|
+
return name
|
121
|
+
end
|
122
|
+
|
123
|
+
def import_xliff(locale)
|
124
|
+
Nokogiri::XML(open("#{locale}.xliff")).xpath("//xmlns:file").each do |node|
|
125
|
+
File.open(filename_from_xliff_provided_filename(node["original"]), "w") do |file|
|
141
126
|
(node > "body > trans-unit").each do |trans_unit|
|
142
127
|
key = trans_unit["id"]
|
143
128
|
target = (trans_unit > "target").text
|
@@ -148,7 +133,6 @@ module Xlocalize
|
|
148
133
|
file.write "\"#{key}\" = #{target.inspect};\n\n"
|
149
134
|
end
|
150
135
|
end
|
151
|
-
|
152
136
|
end
|
153
137
|
end
|
154
138
|
|
@@ -172,11 +156,11 @@ module Xlocalize
|
|
172
156
|
end
|
173
157
|
|
174
158
|
def import(locales)
|
175
|
-
puts 'Importing translations'
|
159
|
+
puts 'Importing translations' if $VERBOSE
|
176
160
|
locales.each do |locale|
|
177
161
|
import_xliff(locale)
|
178
162
|
import_plurals_if_needed(locale)
|
179
|
-
puts "Done #{locale}".green
|
163
|
+
puts "Done #{locale}".green if $VERBOSE
|
180
164
|
end
|
181
165
|
end
|
182
166
|
end
|
data/lib/xlocalize/version.rb
CHANGED
@@ -11,10 +11,10 @@ module Xlocalize
|
|
11
11
|
attr_reader :xliff_file_id
|
12
12
|
attr_reader :plurals_file_id
|
13
13
|
|
14
|
-
def initialize(key)
|
14
|
+
def initialize(key, http = Net::HTTP.new("webtranslateit.com", 443))
|
15
15
|
@key = key
|
16
16
|
|
17
|
-
@http =
|
17
|
+
@http = http
|
18
18
|
@http.use_ssl = true
|
19
19
|
|
20
20
|
@http.request(Net::HTTP::Get.new("/api/projects/#{@key}")) {|response|
|
@@ -23,73 +23,69 @@ module Xlocalize
|
|
23
23
|
project["project_files"].each {|file|
|
24
24
|
next if file["locale_code"] != @source_locale
|
25
25
|
@xliff_file_id = file["id"] if file['name'].end_with? '.xliff'
|
26
|
-
@plurals_file_id = file["id"] if file['name'] == 'plurals.
|
26
|
+
@plurals_file_id = file["id"] if file['name'] == 'plurals.yml'
|
27
27
|
}
|
28
|
-
raise "Could not find master xliff file for source locale #{@source_locale}" if @xliff_file_id.nil?
|
29
28
|
}
|
29
|
+
raise "Could not find master xliff file for source locale #{@source_locale}" if @xliff_file_id.nil?
|
30
|
+
end
|
31
|
+
|
32
|
+
def send_request(request)
|
33
|
+
resp = nil
|
34
|
+
@http.request(request) { |res|
|
35
|
+
if !res.code.to_i.between?(200, 300)
|
36
|
+
raise JSON.parse(res.body)["error"]
|
37
|
+
end
|
38
|
+
resp = res
|
39
|
+
}
|
40
|
+
return resp
|
41
|
+
end
|
42
|
+
|
43
|
+
def master_file_for_locale_request(file_id, file, override)
|
44
|
+
# /api/projects/:project_token/files/:master_project_file_id/locales/:locale_code [PUT]
|
45
|
+
return Net::HTTP::Put::Multipart.new("/api/projects/#{@key}/files/#{file_id}/locales/#{@source_locale}", {
|
46
|
+
"file" => UploadIO.new(file, "text/plain", file.path),
|
47
|
+
"merge" => !override,
|
48
|
+
"ignore_missing" => true,
|
49
|
+
"label" => "",
|
50
|
+
"low_priority" => false
|
51
|
+
})
|
30
52
|
end
|
31
53
|
|
32
54
|
def push_master_plurals(plurals_file, override = true)
|
33
55
|
if @plurals_file_id.nil?
|
34
|
-
|
56
|
+
if $VERBOSE
|
57
|
+
$stderr.puts 'Creating plurals file'
|
58
|
+
end
|
35
59
|
# /api/projects/:project_token/files [POST]
|
36
|
-
|
60
|
+
send_request(Net::HTTP::Post::Multipart.new("/api/projects/#{@key}/files", {
|
37
61
|
"file" => UploadIO.new(plurals_file, "text/plain", plurals_file.path),
|
38
|
-
"name" => "plurals.
|
62
|
+
"name" => "plurals.yml",
|
39
63
|
"low_priority" => false
|
40
|
-
})
|
41
|
-
@http.request(request) { |res|
|
42
|
-
if !res.code.to_i.between?(200, 300)
|
43
|
-
raise JSON.parse(res.body)["error"]
|
44
|
-
end
|
45
|
-
}
|
64
|
+
}))
|
46
65
|
else
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
"merge" => !override,
|
52
|
-
"ignore_missing" => true,
|
53
|
-
"label" => "",
|
54
|
-
"low_priority" => false
|
55
|
-
})
|
56
|
-
@http.request(request) { |res|
|
57
|
-
if !res.code.to_i.between?(200, 300)
|
58
|
-
raise JSON.parse(res.body)["error"]
|
59
|
-
end
|
60
|
-
}
|
66
|
+
if $VERBOSE
|
67
|
+
$stderr.puts 'Updating plurals file'
|
68
|
+
end
|
69
|
+
send_request(master_file_for_locale_request(@plurals_file_id, plurals_file, override))
|
61
70
|
end
|
62
71
|
end
|
63
72
|
|
64
73
|
def push_master(file, plurals_file, override = true)
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
"merge" => !override,
|
70
|
-
"ignore_missing" => true,
|
71
|
-
"label" => "",
|
72
|
-
"low_priority" => false })
|
73
|
-
|
74
|
-
@http.request(request) {|res|
|
75
|
-
if !res.code.to_i.between?(200, 300)
|
76
|
-
raise JSON.parse(res.body)["error"]
|
77
|
-
end
|
78
|
-
}
|
79
|
-
|
74
|
+
if $VERBOSE
|
75
|
+
$stderr.puts 'Updating xliff file'
|
76
|
+
end
|
77
|
+
send_request(master_file_for_locale_request(@xliff_file_id, file, override))
|
80
78
|
push_master_plurals(plurals_file, override) if not plurals_file.nil?
|
81
79
|
end
|
82
80
|
|
83
81
|
def pull(locale)
|
84
82
|
# downloading master xliff file
|
85
83
|
data = {}
|
86
|
-
res =
|
87
|
-
raise JSON.parse(res.body)["error"] if !res.code.to_i.between?(200, 300)
|
84
|
+
res = send_request(Net::HTTP::Get.new("/api/projects/#{@key}/files/#{@xliff_file_id}/locales/#{locale}"))
|
88
85
|
data['xliff'] = res.body
|
89
86
|
# downloading master plurals file
|
90
87
|
if !@plurals_file_id.nil?
|
91
|
-
res =
|
92
|
-
raise JSON.parse(res.body)["error"] if !res.code.to_i.between?(200, 300)
|
88
|
+
res = send_request(Net::HTTP::Get.new("/api/projects/#{@key}/files/#{@plurals_file_id}/locales/#{locale}"))
|
93
89
|
data['plurals'] = res.body
|
94
90
|
end
|
95
91
|
return data
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'nokogiri'
|
2
|
+
require 'pathname'
|
3
|
+
|
4
|
+
module Xlocalize
|
5
|
+
class ::Nokogiri::XML::Document
|
6
|
+
|
7
|
+
def filter_not_target_files(target)
|
8
|
+
target_prefix = "#{target}/"
|
9
|
+
self.xpath("//xmlns:file").each { |node|
|
10
|
+
fname = node["original"]
|
11
|
+
node.remove if !fname.start_with?(target_prefix) || !fname.include?(".lproj/")
|
12
|
+
}
|
13
|
+
end
|
14
|
+
|
15
|
+
def filter_trans_units(prefix)
|
16
|
+
self.xpath("//xmlns:source").each { |node|
|
17
|
+
node.parent.remove if node.content.start_with?(prefix)
|
18
|
+
}
|
19
|
+
end
|
20
|
+
|
21
|
+
def filter_plurals(project)
|
22
|
+
plurals = {}
|
23
|
+
self.xpath("//xmlns:file").each { |node|
|
24
|
+
fname = node["original"]
|
25
|
+
next if !fname.end_with?(".strings")
|
26
|
+
fname_stringsdict = fname << 'dict'
|
27
|
+
file_full_path = Pathname.new(project).split.first.to_s << '/' << fname_stringsdict
|
28
|
+
next if !File.exist?(file_full_path)
|
29
|
+
|
30
|
+
translations = {}
|
31
|
+
Plist::parse_xml(file_full_path).each do |key, val|
|
32
|
+
transl = val["value"].select { |k, _| ['zero', 'one', 'two', 'few', 'many', 'other'].include?(k) }
|
33
|
+
translations[key] = transl
|
34
|
+
sel = 'body > trans-unit[id="' << key << '"]'
|
35
|
+
node.css(sel).remove
|
36
|
+
end
|
37
|
+
plurals[fname_stringsdict] = translations
|
38
|
+
}
|
39
|
+
return plurals
|
40
|
+
end
|
41
|
+
|
42
|
+
def filter_empty_files
|
43
|
+
self.xpath("//xmlns:body").each { |node|
|
44
|
+
node.parent.remove if node.elements.count == 0
|
45
|
+
}
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
data/lib/xlocalize.rb
CHANGED
@@ -7,11 +7,7 @@ module Xlocalize
|
|
7
7
|
class XlocalizeCLI
|
8
8
|
include Commander::Methods
|
9
9
|
|
10
|
-
def
|
11
|
-
program :name, 'Xlocalize'
|
12
|
-
program :version, Xlocalize::VERSION
|
13
|
-
program :description, Xlocalize::DESCRIPTION
|
14
|
-
|
10
|
+
def define_export_cmd
|
15
11
|
command :export do |c|
|
16
12
|
c.syntax = 'xlocalize export [options]'
|
17
13
|
c.description = 'Export localized strings from Xcode project'
|
@@ -20,7 +16,7 @@ module Xlocalize
|
|
20
16
|
c.option '--target STRING', String, 'Target in the project'
|
21
17
|
c.option '--excl_prefix STRING', String, 'Exclude strings having specified prefix'
|
22
18
|
c.option '--master_lang STRING', String, 'Master language of the project'
|
23
|
-
c.action do |
|
19
|
+
c.action do |_, options|
|
24
20
|
if options.project.nil? or
|
25
21
|
options.target.nil? or
|
26
22
|
options.excl_prefix.nil? or
|
@@ -32,13 +28,15 @@ module Xlocalize
|
|
32
28
|
Executor.new.export_master(wti, options.project, options.target, options.excl_prefix, options.master_lang)
|
33
29
|
end
|
34
30
|
end
|
31
|
+
end
|
35
32
|
|
33
|
+
def define_download_cmd
|
36
34
|
command :download do |c|
|
37
35
|
c.syntax = 'xlocalize download [options]'
|
38
36
|
c.description = 'Download localized strings from WebtranslateIt project'
|
39
37
|
c.option '--wti_key STRING', String, 'Webtranslateit API key'
|
40
38
|
c.option '--locales ARRAY', Array, 'Locales to download'
|
41
|
-
c.action do |
|
39
|
+
c.action do |_, options|
|
42
40
|
if options.wti_key.nil? or
|
43
41
|
options.locales.nil?
|
44
42
|
raise 'Missing parameter'
|
@@ -47,12 +45,14 @@ module Xlocalize
|
|
47
45
|
Executor.new.download(WebtranslateIt.new(options.wti_key), options.locales)
|
48
46
|
end
|
49
47
|
end
|
48
|
+
end
|
50
49
|
|
50
|
+
def define_import_cmd
|
51
51
|
command :import do |c|
|
52
52
|
c.syntax = 'xlocalize import [options]'
|
53
53
|
c.description = 'Import localized strings to Xcode project'
|
54
54
|
c.option '--locales ARRAY', Array, 'Locales to import'
|
55
|
-
c.action do |
|
55
|
+
c.action do |_, options|
|
56
56
|
if options.locales.nil?
|
57
57
|
raise 'Missing parameter'
|
58
58
|
end
|
@@ -60,7 +60,17 @@ module Xlocalize
|
|
60
60
|
Executor.new.import(options.locales)
|
61
61
|
end
|
62
62
|
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def run
|
66
|
+
program :name, 'Xlocalize'
|
67
|
+
program :version, Xlocalize::VERSION
|
68
|
+
program :description, Xlocalize::DESCRIPTION
|
63
69
|
|
70
|
+
define_export_cmd
|
71
|
+
define_download_cmd
|
72
|
+
define_import_cmd
|
73
|
+
|
64
74
|
run!
|
65
75
|
end
|
66
76
|
end
|
data/xlocalize.gemspec
CHANGED
@@ -19,13 +19,14 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
20
20
|
spec.require_paths = ["lib"]
|
21
21
|
|
22
|
-
spec.add_runtime_dependency 'nokogiri', '
|
22
|
+
spec.add_runtime_dependency 'nokogiri', '= 1.6'
|
23
23
|
spec.add_runtime_dependency 'commander', '~> 4.4'
|
24
24
|
spec.add_runtime_dependency 'colorize', '~> 0.8'
|
25
25
|
spec.add_runtime_dependency 'plist', '~> 3.2'
|
26
26
|
spec.add_runtime_dependency 'multipart-post', '~> 2.0'
|
27
27
|
|
28
28
|
spec.add_development_dependency 'bundler', '~> 1.10'
|
29
|
-
spec.add_development_dependency 'rake', '~> 10.0'
|
30
29
|
spec.add_development_dependency 'rspec', '~> 3.5'
|
30
|
+
spec.add_development_dependency 'simplecov', '~> 0.13'
|
31
|
+
spec.add_development_dependency 'codeclimate-test-reporter', '~> 1.0'
|
31
32
|
end
|
metadata
CHANGED
@@ -1,27 +1,27 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xlocalize
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Viktoras Laukevičius
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-02-
|
11
|
+
date: 2017-02-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.6'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.6'
|
27
27
|
- !ruby/object:Gem::Dependency
|
@@ -95,33 +95,47 @@ dependencies:
|
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '1.10'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
98
|
+
name: rspec
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: '
|
103
|
+
version: '3.5'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: '
|
110
|
+
version: '3.5'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
112
|
+
name: simplecov
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
115
|
- - "~>"
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: '
|
117
|
+
version: '0.13'
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
122
|
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: '
|
124
|
+
version: '0.13'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: codeclimate-test-reporter
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '1.0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '1.0'
|
125
139
|
description:
|
126
140
|
email:
|
127
141
|
- viktoras.laukevicius@yahoo.com
|
@@ -133,6 +147,7 @@ extensions: []
|
|
133
147
|
extra_rdoc_files: []
|
134
148
|
files:
|
135
149
|
- ".gitignore"
|
150
|
+
- ".travis.yml"
|
136
151
|
- CODE_OF_CONDUCT.md
|
137
152
|
- Gemfile
|
138
153
|
- LICENSE.txt
|
@@ -145,6 +160,7 @@ files:
|
|
145
160
|
- lib/xlocalize/executor.rb
|
146
161
|
- lib/xlocalize/version.rb
|
147
162
|
- lib/xlocalize/webtranslateit.rb
|
163
|
+
- lib/xlocalize/xliff.rb
|
148
164
|
- xlocalize.gemspec
|
149
165
|
homepage: https://github.com/viktorasl/xlocalize
|
150
166
|
licenses:
|
@@ -166,7 +182,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
166
182
|
version: '0'
|
167
183
|
requirements: []
|
168
184
|
rubyforge_project:
|
169
|
-
rubygems_version: 2.
|
185
|
+
rubygems_version: 2.6.8
|
170
186
|
signing_key:
|
171
187
|
specification_version: 4
|
172
188
|
summary: Xcode localizations import/export helper tool
|