xlocalize 0.2.1 → 0.2.2

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: 3f92b8896b3c93789775661d8d918efa00504b0f
4
- data.tar.gz: 29f41bf80a64c1da95806679d0b19fcc9ff1fdc0
3
+ metadata.gz: fc1db3d226514b4c5d809d86fd2dedcdde3723cc
4
+ data.tar.gz: 3b7203835f011707bf6e2a5f9211d52fba40b018
5
5
  SHA512:
6
- metadata.gz: 5e503707d2265b37717c365a1c67b1ab85d1da11776a5aa5077b32ac8b792fb551f4c32f3fd16cc2a6f8bbdc20dedffcb04299f5a4c39cadc743318696dd41d6
7
- data.tar.gz: 1b16f3dfc86abe85824cb3769b2362a79d1cc62edacb3da884e5178f0cd58ebfdf7475ce8a44dd23b906662a9c57422df69ec3c34a1ad673146274347d8afcee
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
+ [![Build Status](https://travis-ci.org/viktorasl/xlocalize.svg?branch=master)](https://travis-ci.org/viktorasl/xlocalize)
2
+ [![Gem Version](https://badge.fury.io/rb/xlocalize.svg)](https://badge.fury.io/rb/xlocalize)
3
+ [![Code Climate](https://codeclimate.com/github/viktorasl/xlocalize/badges/gpa.svg)](https://codeclimate.com/github/viktorasl/xlocalize)
4
+ [![Test Coverage](https://codeclimate.com/github/viktorasl/xlocalize/badges/coverage.svg)](https://codeclimate.com/github/viktorasl/xlocalize/coverage)
5
+ [![Inline docs](http://inch-ci.org/github/viktorasl/xlocalize.svg?branch=master)](http://inch-ci.org/github/viktorasl/xlocalize)
6
+
1
7
  # Xlocalize
2
8
 
3
9
  To see all commands execute:
@@ -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.xpath("//xmlns:file").each { |node|
57
- fname = node["original"]
58
- node.remove if !fname.start_with?(target_prefix) || !fname.include?(".lproj/")
59
- }
60
-
61
- puts "Removing trans-unit's having reserverd prefix in their sources"
62
- doc.xpath("//xmlns:source").each { |node|
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
- puts "Downloading translations for #{locale}"
102
- translations = wti.pull(locale)
103
-
104
- File.open("#{locale}.xliff", "w") {|file|
105
- file.write(translations['xliff'])
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 import_xliff(locale)
122
- doc = Nokogiri::XML(open("#{locale}.xliff"))
123
-
124
- doc.xpath("//xmlns:file").each do |node|
125
- file_name = node["original"]
126
- parts = file_name.split('/')
127
- name = ""
128
- parts.each_with_index do |part, idx|
129
- name += "/" if idx > 0
130
- if part.end_with?(".lproj")
131
- name += "#{locale}.lproj"
132
- elsif idx+1 == parts.count
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
- File.open(name, "w") do |file|
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
@@ -1,4 +1,4 @@
1
1
  module Xlocalize
2
- VERSION = "0.2.1"
2
+ VERSION = "0.2.2"
3
3
  DESCRIPTION = "Xcode localizations import/export helper tool"
4
4
  end
@@ -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 = Net::HTTP.new("webtranslateit.com", 443)
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.yaml'
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
- puts 'Creating plurals file'
56
+ if $VERBOSE
57
+ $stderr.puts 'Creating plurals file'
58
+ end
35
59
  # /api/projects/:project_token/files [POST]
36
- request = Net::HTTP::Post::Multipart.new("/api/projects/#{@key}/files", {
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.yaml",
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
- puts 'Updating plurals file'
48
- # /api/projects/:project_token/files/:master_project_file_id/locales/:locale_code [PUT]
49
- request = Net::HTTP::Put::Multipart.new("/api/projects/#{@key}/files/#{@plurals_file_id}/locales/#{@source_locale}", {
50
- "file" => UploadIO.new(plurals_file, "text/plain", plurals_file.path),
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
- puts 'Updating xliff file'
66
- # uploding master xliff file
67
- request = Net::HTTP::Put::Multipart.new("/api/projects/#{@key}/files/#{@xliff_file_id}/locales/#{@source_locale}", {
68
- "file" => UploadIO.new(file, "text/plain", file.path),
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 = http.request(Net::HTTP::Get.new("/api/projects/#{@key}/files/#{@xliff_file_id}/locales/#{locale}"))
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 = http.request(Net::HTTP::Get.new("/api/projects/#{@key}/files/#{@plurals_file_id}/locales/#{locale}"))
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 run
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 |args, options|
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 |args, options|
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 |args, options|
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', '~> 1.6'
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.1
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-17 00:00:00.000000000 Z
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: rake
98
+ name: rspec
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '10.0'
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: '10.0'
110
+ version: '3.5'
111
111
  - !ruby/object:Gem::Dependency
112
- name: rspec
112
+ name: simplecov
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: '3.5'
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: '3.5'
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.5.1
185
+ rubygems_version: 2.6.8
170
186
  signing_key:
171
187
  specification_version: 4
172
188
  summary: Xcode localizations import/export helper tool