web_translate_it 2.4.7 → 2.4.12
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/bin/wti +32 -26
- data/history.md +25 -0
- data/lib/web_translate_it/command_line.rb +64 -11
- data/lib/web_translate_it/configuration.rb +14 -2
- data/lib/web_translate_it/connection.rb +0 -6
- data/lib/web_translate_it/project.rb +4 -8
- data/lib/web_translate_it/string.rb +7 -21
- data/lib/web_translate_it/term.rb +7 -22
- data/lib/web_translate_it/term_translation.rb +2 -9
- data/lib/web_translate_it/translation.rb +1 -4
- data/lib/web_translate_it/translation_file.rb +25 -28
- data/lib/web_translate_it/util.rb +6 -0
- data/license +1 -1
- data/readme.md +2 -2
- metadata +9 -11
- data/lib/web_translate_it/cacert.pem +0 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: '088a8a2578209bdefd6abbdc9989c29c27da69df2a4ebf57ff7e89aeddc454fe'
|
4
|
+
data.tar.gz: 45428f99e5b9aef34759d7c3c0089cbb843cb6fe298102855823156d8501b4b1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 15e13a2794cee9a705ad276b8c4d04452fdff2db386b1ec1766c69e3044df1c5258e7e682b981c6c0ce568d83e91af9125ca35b10eb7aedee191744f60b176e2
|
7
|
+
data.tar.gz: 626bda04b619653a15122cd0d41214f2d4cdf7612680c8f378906447c0ce9c6017ec6472189ac12dbcc314b1a370efb8c7f50081a906131a2ec146211b62a783
|
data/bin/wti
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
$PROGRAM_NAME = 'wti'
|
4
4
|
|
5
|
-
require '
|
5
|
+
require 'optimist'
|
6
6
|
require 'web_translate_it'
|
7
7
|
|
8
8
|
show_commands = <<-EOS
|
@@ -14,6 +14,7 @@ The most commonly used wti commands are:
|
|
14
14
|
match Display matching of local files with File Manager
|
15
15
|
add Create and push a new master language file
|
16
16
|
rm Delete a master language file from a project
|
17
|
+
mv Moves a file both locally and from a project
|
17
18
|
addlocale Add a new locale to the project
|
18
19
|
rmlocale Delete a locale from a project
|
19
20
|
status Fetch and display project statistics
|
@@ -24,8 +25,8 @@ See `wti <command> --help` for more information on a specific command.
|
|
24
25
|
[options] are:
|
25
26
|
EOS
|
26
27
|
|
27
|
-
SUB_COMMANDS = %w(pull push match add addlocale status st init)
|
28
|
-
global_options =
|
28
|
+
SUB_COMMANDS = %w(pull push match add rm mv addlocale rmlocale status st init)
|
29
|
+
global_options = Optimist::options do
|
29
30
|
stop_on SUB_COMMANDS
|
30
31
|
banner show_commands
|
31
32
|
version "wti version #{WebTranslateIt::Util.version}"
|
@@ -34,76 +35,82 @@ end
|
|
34
35
|
command = ARGV.shift # get the subcommand
|
35
36
|
command_options = case command
|
36
37
|
when "pull"
|
37
|
-
|
38
|
+
Optimist::options do
|
38
39
|
banner <<-EOS
|
39
40
|
wti pull [filename] - Pull target language file(s)
|
40
41
|
[options] are:
|
41
42
|
EOS
|
42
|
-
opt :locale, "ISO code of locale(s) to pull", :
|
43
|
+
opt :locale, "ISO code of locale(s) to pull", type: :string
|
43
44
|
opt :all, "Pull all files"
|
44
45
|
opt :force, "Force pull (bypass conditional requests to WTI)"
|
45
|
-
opt :config, "Path to a configuration file", :
|
46
|
+
opt :config, "Path to a configuration file", short: "-c", default: ".wti"
|
46
47
|
opt :debug, "Display debug information"
|
47
48
|
end
|
48
49
|
when "push"
|
49
|
-
|
50
|
+
Optimist::options do
|
50
51
|
banner <<-EOS
|
51
52
|
wti push [filename] - Push master language file(s)
|
52
53
|
[options] are:
|
53
54
|
EOS
|
54
|
-
opt :locale, "ISO code of locale(s) to push", :
|
55
|
+
opt :locale, "ISO code of locale(s) to push", type: :string
|
55
56
|
opt :target, "Upload all target files"
|
56
57
|
opt :force, "Force push (bypass conditional requests to WTI)"
|
57
58
|
opt :low_priority, "WTI will process this file with a low priority"
|
58
59
|
opt :merge, "Force WTI to merge this file"
|
59
60
|
opt :ignore_missing, "Force WTI to not obsolete missing strings"
|
60
61
|
opt :minor, "Minor Changes. When pushing a master file, prevents target translations to be flagged as `to_verify`."
|
61
|
-
opt :label, "Apply a label to the changes", :
|
62
|
-
opt :config, "Path to a configuration file", :
|
62
|
+
opt :label, "Apply a label to the changes", type: :string
|
63
|
+
opt :config, "Path to a configuration file", short: "-c", default: ".wti"
|
63
64
|
opt :all, "DEPRECATED -- See `wti push --target` instead"
|
64
65
|
opt :debug, "Display debug information"
|
65
66
|
end
|
66
67
|
when "add"
|
67
|
-
|
68
|
+
Optimist::options do
|
68
69
|
banner "wti add filename - Create and push a new master language file"
|
69
70
|
opt :low_priority, "WTI will process this file with a low priority"
|
70
|
-
opt :config, "Path to a configuration file", :
|
71
|
+
opt :config, "Path to a configuration file", short: "-c", default: ".wti"
|
71
72
|
opt :debug, "Display debug information"
|
72
73
|
end
|
73
74
|
when "rm"
|
74
|
-
|
75
|
+
Optimist::options do
|
75
76
|
banner "wti rm filename - Delete a master language file"
|
76
|
-
opt :config, "Path to a configuration file", :
|
77
|
+
opt :config, "Path to a configuration file", short: "-c", default: ".wti"
|
77
78
|
opt :debug, "Display debug information"
|
78
79
|
end
|
80
|
+
when "mv"
|
81
|
+
Optimist::options do
|
82
|
+
banner "wti mv filename - Moves a master language file and its target files"
|
83
|
+
opt :config, "Path to a configuration file", short: "-c", default: ".wti"
|
84
|
+
opt :debug, "Display debug information"
|
85
|
+
end
|
79
86
|
when "addlocale"
|
80
|
-
|
87
|
+
Optimist::options do
|
81
88
|
banner "wti addlocale localename - Add a new locale to the project"
|
82
|
-
opt :config, "Path to a configuration file", :
|
89
|
+
opt :config, "Path to a configuration file", short: "-c", default: ".wti"
|
83
90
|
opt :debug, "Display debug information"
|
84
91
|
end
|
85
92
|
when "rmlocale"
|
86
|
-
|
93
|
+
Optimist::options do
|
87
94
|
banner "wti rmlocale localename Delete a locale from the project"
|
88
|
-
opt :config, "Path to a configuration file", :
|
95
|
+
opt :config, "Path to a configuration file", short: "-c", default: ".wti"
|
89
96
|
opt :debug, "Display debug information"
|
90
97
|
end
|
91
98
|
when "status"
|
92
|
-
|
99
|
+
Optimist::options do
|
93
100
|
banner "wti status - Fetch and display project statistics"
|
94
|
-
opt :config, "Path to a configuration file", :
|
101
|
+
opt :config, "Path to a configuration file", short: "-c", default: ".wti"
|
95
102
|
opt :debug, "Display debug information"
|
96
103
|
end
|
97
104
|
when "init"
|
98
|
-
|
105
|
+
Optimist::options do
|
99
106
|
banner "wti init [api_token] - Configure your project to sync"
|
100
|
-
opt :config, "Path to a configuration file", :
|
107
|
+
opt :config, "Path to a configuration file", short: "-c", default: ".wti"
|
101
108
|
opt :debug, "Display debug information"
|
102
109
|
end
|
103
110
|
when "match"
|
104
|
-
|
111
|
+
Optimist::options do
|
105
112
|
banner "wti match - Display matching of local files with File Manager"
|
106
|
-
opt :config, "Path to a configuration file", :
|
113
|
+
opt :config, "Path to a configuration file", short: "-c", default: ".wti"
|
107
114
|
opt :debug, "Display debug information"
|
108
115
|
end
|
109
116
|
else
|
@@ -111,7 +118,7 @@ EOS
|
|
111
118
|
puts show_commands
|
112
119
|
exit
|
113
120
|
else
|
114
|
-
|
121
|
+
Optimist::die "Unknown subcommand #{command.inspect}"
|
115
122
|
end
|
116
123
|
end
|
117
124
|
|
@@ -122,4 +129,3 @@ rescue Interrupt => e
|
|
122
129
|
puts StringUtil.failure("\nQuitting...")
|
123
130
|
exit 1
|
124
131
|
end
|
125
|
-
|
data/history.md
CHANGED
@@ -1,3 +1,28 @@
|
|
1
|
+
## Version 2.4.12 / 2021-06-30
|
2
|
+
|
3
|
+
* Add ability to pass project API token as an ENV variable. You can run:
|
4
|
+
`export WTI_PROJECT_API_KEY=[my_api_token]`
|
5
|
+
`wti pull`
|
6
|
+
|
7
|
+
## Version 2.4.11 / 2019-10-22
|
8
|
+
|
9
|
+
* Fix for `wti pull` without parameters.
|
10
|
+
|
11
|
+
## Version 2.4.10 / 2019-10-21
|
12
|
+
|
13
|
+
* New command: `wti mv path/to/file.po newpath/to/file.po` to move a language file
|
14
|
+
both on your local working directory and on your WebTranslateIt project.
|
15
|
+
* Fix: `wti pull something` now doesn’t pull anything if no files match what needs to be pulled. Close #151.
|
16
|
+
|
17
|
+
## Version 2.4.9 / 2019-08-07
|
18
|
+
|
19
|
+
* Fix issue referencing old `Trollop` library. #149
|
20
|
+
* Fix issue with SSL certificates. If you encounter any issues you will need to update your CA certificates: https://github.com/AtelierConvivialite/webtranslateit/wiki/Update-CA-certificates
|
21
|
+
|
22
|
+
## Version 2.4.8 / 2018-09-06
|
23
|
+
|
24
|
+
* Update deprecated gem `Trollop` to `Optimist`.
|
25
|
+
|
1
26
|
## Version 2.4.7 / 2018-03-28
|
2
27
|
|
3
28
|
* Add an option to .wti file to silence SSL errors.
|
@@ -18,6 +18,8 @@ module WebTranslateIt
|
|
18
18
|
message = "Creating master files"
|
19
19
|
when 'rm'
|
20
20
|
message = "Deleting files"
|
21
|
+
when 'mv'
|
22
|
+
message = "Moving files"
|
21
23
|
when 'addlocale'
|
22
24
|
message = "Adding locale"
|
23
25
|
when 'rmlocale'
|
@@ -44,7 +46,7 @@ module WebTranslateIt
|
|
44
46
|
parameters.each do |parameter|
|
45
47
|
found_files += files.find_all{ |file| File.fnmatch(parameter, file.file_path) }
|
46
48
|
end
|
47
|
-
files = found_files if
|
49
|
+
files = found_files if parameters.any?
|
48
50
|
files = files.uniq.sort{ |a,b| a.file_path <=> b.file_path }
|
49
51
|
if files.size == 0
|
50
52
|
puts "No files to pull."
|
@@ -111,7 +113,7 @@ module WebTranslateIt
|
|
111
113
|
to_add = parameters.reject{ |param| added.include?(File.expand_path(param))}
|
112
114
|
if to_add.any?
|
113
115
|
to_add.each do |param|
|
114
|
-
file = TranslationFile.new(nil, param, nil, configuration.api_key)
|
116
|
+
file = TranslationFile.new(nil, param.gsub(/ /, "\\ "), nil, configuration.api_key)
|
115
117
|
success = file.create(http, command_options.low_priority)
|
116
118
|
complete_success = false if !success
|
117
119
|
end
|
@@ -127,26 +129,77 @@ module WebTranslateIt
|
|
127
129
|
STDOUT.sync = true
|
128
130
|
if parameters == []
|
129
131
|
puts StringUtil.failure("Error: You must provide the path to the master file to remove.")
|
130
|
-
puts "Usage: wti path/to/
|
132
|
+
puts "Usage: wti rm path/to/master_file_1 path/to/master_file_2 ..."
|
131
133
|
exit
|
132
134
|
end
|
133
135
|
WebTranslateIt::Connection.new(configuration.api_key) do |http|
|
134
136
|
parameters.each do |param|
|
135
137
|
if Util.ask_yes_no("Are you sure you want to delete the master file #{param}?\nThis will also delete its target files and translations.", false)
|
136
|
-
configuration.files.find_all{ |file| file.file_path == param }
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
138
|
+
files = configuration.files.find_all{ |file| file.file_path == param }
|
139
|
+
if files.any?
|
140
|
+
files.each do |master_file|
|
141
|
+
master_file.delete(http)
|
142
|
+
# delete files
|
143
|
+
if File.exists?(master_file.file_path)
|
144
|
+
success = File.delete(master_file.file_path)
|
145
|
+
puts StringUtil.success("Deleted master file #{master_file.file_path}.") if success
|
146
|
+
end
|
143
147
|
complete_success = false if !success
|
148
|
+
configuration.files.find_all{ |file| file.master_id == master_file.id }.each do |target_file|
|
149
|
+
if File.exists?(target_file.file_path)
|
150
|
+
success = File.delete(target_file.file_path)
|
151
|
+
puts StringUtil.success("Deleted target file #{target_file.file_path}.") if success
|
152
|
+
else
|
153
|
+
puts StringUtil.failure("Target file #{target_file.file_path} doesn’t exist locally")
|
154
|
+
end
|
155
|
+
complete_success = false if !success
|
156
|
+
end
|
144
157
|
end
|
158
|
+
puts StringUtil.success("All done.") if complete_success
|
159
|
+
else
|
160
|
+
puts StringUtil.failure("#{param}: File doesn’t exist on project.")
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
165
|
+
complete_success
|
166
|
+
end
|
167
|
+
|
168
|
+
def mv
|
169
|
+
complete_success = true
|
170
|
+
STDOUT.sync = true
|
171
|
+
if parameters.count != 2
|
172
|
+
puts StringUtil.failure("Error: You must provide the source path and destination path of the master file to move.")
|
173
|
+
puts "Usage: wti mv path/to/master_file_old_path path/to/master_file_new_path ..."
|
174
|
+
exit
|
175
|
+
end
|
176
|
+
source = parameters[0]
|
177
|
+
destination = parameters[1]
|
178
|
+
WebTranslateIt::Connection.new(configuration.api_key) do |http|
|
179
|
+
if Util.ask_yes_no("Are you sure you want to move the master file #{source} and its target files?", true)
|
180
|
+
configuration.files.find_all{ |file| file.file_path == source }.each do |master_file|
|
181
|
+
master_file.upload(http, false, false, nil, false, false, true, true, destination)
|
182
|
+
# move master file
|
183
|
+
if File.exists?(source)
|
184
|
+
success = File.rename(source, destination) if File.exists?(source)
|
185
|
+
puts StringUtil.success("Moved master file #{master_file.file_path}.") if success
|
186
|
+
end
|
187
|
+
complete_success = false if !success
|
188
|
+
configuration.files.find_all{ |file| file.master_id == master_file.id }.each do |target_file|
|
189
|
+
if File.exists?(target_file.file_path)
|
190
|
+
success = File.delete(target_file.file_path)
|
191
|
+
complete_success = false if !success
|
192
|
+
end
|
193
|
+
end
|
194
|
+
configuration.reload
|
195
|
+
configuration.files.find_all{ |file| file.master_id == master_file.id }.each do |target_file|
|
196
|
+
success = target_file.fetch(http)
|
197
|
+
complete_success = false if !success
|
145
198
|
end
|
199
|
+
puts StringUtil.success("All done.") if complete_success
|
146
200
|
end
|
147
201
|
end
|
148
202
|
end
|
149
|
-
puts StringUtil.success("Master file deleted.")
|
150
203
|
complete_success
|
151
204
|
end
|
152
205
|
|
@@ -20,7 +20,7 @@ module WebTranslateIt
|
|
20
20
|
self.path = root_path
|
21
21
|
self.logger = logger
|
22
22
|
if File.exists?(File.expand_path(path_to_config_file, self.path))
|
23
|
-
self.api_key = configuration['api_key']
|
23
|
+
self.api_key = ENV["WTI_PROJECT_API_KEY"] || configuration['api_key']
|
24
24
|
self.before_pull = configuration['before_pull']
|
25
25
|
self.after_pull = configuration['after_pull']
|
26
26
|
self.before_push = configuration['before_push']
|
@@ -33,11 +33,23 @@ module WebTranslateIt
|
|
33
33
|
WebTranslateIt::Connection.turn_silent_on if configuration['silence_errors']
|
34
34
|
self.project_name = project_info['project']['name']
|
35
35
|
else
|
36
|
-
puts StringUtil.failure("\
|
36
|
+
puts StringUtil.failure("\nNo configuration file found in #{File.expand_path(path_to_config_file, self.path)}")
|
37
37
|
exit(1)
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
|
+
# Reload project data
|
42
|
+
#
|
43
|
+
def reload
|
44
|
+
project_info = YAML.load WebTranslateIt::Project.fetch_info(self.api_key)
|
45
|
+
set_locales_to_ignore(configuration)
|
46
|
+
set_locales_needed(configuration)
|
47
|
+
set_files(project_info['project'])
|
48
|
+
set_locales(project_info['project'])
|
49
|
+
WebTranslateIt::Connection.turn_silent_on if configuration['silence_errors']
|
50
|
+
self.project_name = project_info['project']['name']
|
51
|
+
end
|
52
|
+
|
41
53
|
# Set the project locales from the Project API.
|
42
54
|
# Implementation example:
|
43
55
|
#
|
@@ -36,11 +36,6 @@ module WebTranslateIt
|
|
36
36
|
http.set_debug_output($stderr) if @@debug
|
37
37
|
begin
|
38
38
|
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
39
|
-
if File.exists?('/etc/ssl/certs') # Ubuntu
|
40
|
-
http.ca_path = '/etc/ssl/certs'
|
41
|
-
else
|
42
|
-
http.ca_file = File.expand_path('../cacert.pem', __FILE__)
|
43
|
-
end
|
44
39
|
@@http_connection = http.start
|
45
40
|
yield @@http_connection if block_given?
|
46
41
|
rescue OpenSSL::SSL::SSLError
|
@@ -74,4 +69,3 @@ module WebTranslateIt
|
|
74
69
|
end
|
75
70
|
end
|
76
71
|
end
|
77
|
-
|
@@ -8,8 +8,7 @@ module WebTranslateIt
|
|
8
8
|
begin
|
9
9
|
WebTranslateIt::Connection.new(api_key) do |http|
|
10
10
|
request = Net::HTTP::Get.new("/api/projects/#{api_key}.yaml")
|
11
|
-
|
12
|
-
request.add_field("X-Client-Version", WebTranslateIt::Util.version)
|
11
|
+
WebTranslateIt::Util.add_fields(request)
|
13
12
|
response = http.request(request)
|
14
13
|
if response.is_a?(Net::HTTPSuccess)
|
15
14
|
return response.body
|
@@ -39,8 +38,7 @@ module WebTranslateIt
|
|
39
38
|
begin
|
40
39
|
WebTranslateIt::Connection.new(api_key) do |http|
|
41
40
|
request = Net::HTTP::Get.new("/api/projects/#{api_key}/stats.yaml")
|
42
|
-
|
43
|
-
request.add_field("X-Client-Version", WebTranslateIt::Util.version)
|
41
|
+
WebTranslateIt::Util.add_fields(request)
|
44
42
|
return Util.handle_response(http.request(request), true)
|
45
43
|
end
|
46
44
|
rescue Timeout::Error
|
@@ -60,8 +58,7 @@ module WebTranslateIt
|
|
60
58
|
tries ||= 3
|
61
59
|
begin
|
62
60
|
request = Net::HTTP::Post.new("/api/projects/#{Connection.api_key}/locales")
|
63
|
-
|
64
|
-
request.add_field("X-Client-Version", WebTranslateIt::Util.version)
|
61
|
+
WebTranslateIt::Util.add_fields(request)
|
65
62
|
request.set_form_data({ 'id' => locale_code }, ';')
|
66
63
|
Util.handle_response(Connection.http_connection.request(request), true)
|
67
64
|
rescue Timeout::Error
|
@@ -81,8 +78,7 @@ module WebTranslateIt
|
|
81
78
|
tries ||= 3
|
82
79
|
begin
|
83
80
|
request = Net::HTTP::Delete.new("/api/projects/#{Connection.api_key}/locales/#{locale_code}")
|
84
|
-
|
85
|
-
request.add_field("X-Client-Version", WebTranslateIt::Util.version)
|
81
|
+
WebTranslateIt::Util.add_fields(request)
|
86
82
|
Util.handle_response(Connection.http_connection.request(request), true)
|
87
83
|
rescue Timeout::Error
|
88
84
|
puts "Request timeout. Will retry in 5 seconds."
|
@@ -58,9 +58,7 @@ module WebTranslateIt
|
|
58
58
|
url += '?' + HashUtil.to_params("filters" => params) unless params.empty?
|
59
59
|
|
60
60
|
request = Net::HTTP::Get.new(url)
|
61
|
-
|
62
|
-
request.add_field("X-Client-Version", WebTranslateIt::Util.version)
|
63
|
-
|
61
|
+
WebTranslateIt::Util.add_fields(request)
|
64
62
|
begin
|
65
63
|
strings = []
|
66
64
|
while(request) do
|
@@ -73,8 +71,7 @@ module WebTranslateIt
|
|
73
71
|
if response["Link"] && response["Link"].include?("rel=\"next\"")
|
74
72
|
url = response["Link"].match(/<(.*)>; rel="next"/)[1]
|
75
73
|
request = Net::HTTP::Get.new(url)
|
76
|
-
|
77
|
-
request.add_field("X-Client-Version", WebTranslateIt::Util.version)
|
74
|
+
WebTranslateIt::Util.add_fields(request)
|
78
75
|
else
|
79
76
|
request = nil
|
80
77
|
end
|
@@ -110,9 +107,7 @@ module WebTranslateIt
|
|
110
107
|
success = true
|
111
108
|
tries ||= 3
|
112
109
|
request = Net::HTTP::Get.new("/api/projects/#{Connection.api_key}/strings/#{id}.yaml")
|
113
|
-
|
114
|
-
request.add_field("X-Client-Version", WebTranslateIt::Util.version)
|
115
|
-
|
110
|
+
WebTranslateIt::Util.add_fields(request)
|
116
111
|
begin
|
117
112
|
response = Connection.http_connection.request(request)
|
118
113
|
return nil if response.code.to_i == 404
|
@@ -160,9 +155,7 @@ module WebTranslateIt
|
|
160
155
|
success = true
|
161
156
|
tries ||= 3
|
162
157
|
request = Net::HTTP::Delete.new("/api/projects/#{Connection.api_key}/strings/#{self.id}")
|
163
|
-
|
164
|
-
request.add_field("X-Client-Version", WebTranslateIt::Util.version)
|
165
|
-
|
158
|
+
WebTranslateIt::Util.add_fields(request)
|
166
159
|
begin
|
167
160
|
Util.handle_response(Connection.http_connection.request(request), true, true)
|
168
161
|
rescue Timeout::Error
|
@@ -194,9 +187,7 @@ module WebTranslateIt
|
|
194
187
|
return translation if translation
|
195
188
|
return nil if self.new_record
|
196
189
|
request = Net::HTTP::Get.new("/api/projects/#{Connection.api_key}/strings/#{self.id}/locales/#{locale}/translations.yaml")
|
197
|
-
|
198
|
-
request.add_field("X-Client-Version", WebTranslateIt::Util.version)
|
199
|
-
|
190
|
+
WebTranslateIt::Util.add_fields(request)
|
200
191
|
begin
|
201
192
|
response = Util.handle_response(Connection.http_connection.request(request), true, true)
|
202
193
|
hash = YAML.load(response)
|
@@ -225,9 +216,7 @@ module WebTranslateIt
|
|
225
216
|
success = true
|
226
217
|
tries ||= 3
|
227
218
|
request = Net::HTTP::Put.new("/api/projects/#{Connection.api_key}/strings/#{self.id}.yaml")
|
228
|
-
|
229
|
-
request.add_field("X-Client-Version", WebTranslateIt::Util.version)
|
230
|
-
request.add_field("Content-Type", "application/json")
|
219
|
+
WebTranslateIt::Util.add_fields(request)
|
231
220
|
request.body = self.to_json
|
232
221
|
|
233
222
|
self.translations.each do |translation|
|
@@ -256,11 +245,8 @@ module WebTranslateIt
|
|
256
245
|
success = true
|
257
246
|
tries ||= 3
|
258
247
|
request = Net::HTTP::Post.new("/api/projects/#{Connection.api_key}/strings")
|
259
|
-
|
260
|
-
request.add_field("X-Client-Version", WebTranslateIt::Util.version)
|
261
|
-
request.add_field("Content-Type", "application/json")
|
248
|
+
WebTranslateIt::Util.add_fields(request)
|
262
249
|
request.body = self.to_json(true)
|
263
|
-
|
264
250
|
begin
|
265
251
|
response = YAML.load(Util.handle_response(Connection.http_connection.request(request), true, true))
|
266
252
|
self.id = response["id"]
|
@@ -49,9 +49,7 @@ module WebTranslateIt
|
|
49
49
|
url += '?' + HashUtil.to_params(params) unless params.empty?
|
50
50
|
|
51
51
|
request = Net::HTTP::Get.new(url)
|
52
|
-
|
53
|
-
request.add_field("X-Client-Version", WebTranslateIt::Util.version)
|
54
|
-
|
52
|
+
WebTranslateIt::Util.add_fields(request)
|
55
53
|
begin
|
56
54
|
terms = []
|
57
55
|
while(request) do
|
@@ -64,8 +62,7 @@ module WebTranslateIt
|
|
64
62
|
if response["Link"] && response["Link"].include?("rel=\"next\"")
|
65
63
|
url = response["Link"].match(/<(.*)>; rel="next"/)[1]
|
66
64
|
request = Net::HTTP::Get.new(url)
|
67
|
-
|
68
|
-
request.add_field("X-Client-Version", WebTranslateIt::Util.version)
|
65
|
+
WebTranslateIt::Util.add_fields(request)
|
69
66
|
else
|
70
67
|
request = nil
|
71
68
|
end
|
@@ -101,9 +98,7 @@ module WebTranslateIt
|
|
101
98
|
success = true
|
102
99
|
tries ||= 3
|
103
100
|
request = Net::HTTP::Get.new("/api/projects/#{Connection.api_key}/terms/#{term_id}.yaml")
|
104
|
-
|
105
|
-
request.add_field("X-Client-Version", WebTranslateIt::Util.version)
|
106
|
-
|
101
|
+
WebTranslateIt::Util.add_fields(request)
|
107
102
|
begin
|
108
103
|
response = Connection.http_connection.request(request)
|
109
104
|
return nil if response.code.to_i == 404
|
@@ -151,9 +146,7 @@ module WebTranslateIt
|
|
151
146
|
success = true
|
152
147
|
tries ||= 3
|
153
148
|
request = Net::HTTP::Delete.new("/api/projects/#{Connection.api_key}/terms/#{self.id}")
|
154
|
-
|
155
|
-
request.add_field("X-Client-Version", WebTranslateIt::Util.version)
|
156
|
-
|
149
|
+
WebTranslateIt::Util.add_fields(request)
|
157
150
|
begin
|
158
151
|
Util.handle_response(Connection.http_connection.request(request), true, true)
|
159
152
|
rescue Timeout::Error
|
@@ -185,9 +178,7 @@ module WebTranslateIt
|
|
185
178
|
return translation if translation
|
186
179
|
return nil if self.new_record
|
187
180
|
request = Net::HTTP::Get.new("/api/projects/#{Connection.api_key}/terms/#{self.id}/locales/#{locale}/translations.yaml")
|
188
|
-
|
189
|
-
request.add_field("X-Client-Version", WebTranslateIt::Util.version)
|
190
|
-
|
181
|
+
WebTranslateIt::Util.add_fields(request)
|
191
182
|
begin
|
192
183
|
response = Util.handle_response(Connection.http_connection.request(request), true, true)
|
193
184
|
array = YAML.load(response)
|
@@ -217,10 +208,7 @@ module WebTranslateIt
|
|
217
208
|
success = true
|
218
209
|
tries ||= 3
|
219
210
|
request = Net::HTTP::Put.new("/api/projects/#{Connection.api_key}/terms/#{self.id}.yaml")
|
220
|
-
|
221
|
-
request.add_field("X-Client-Version", WebTranslateIt::Util.version)
|
222
|
-
request.add_field("Content-Type", "application/json")
|
223
|
-
|
211
|
+
WebTranslateIt::Util.add_fields(request)
|
224
212
|
request.body = self.to_json
|
225
213
|
|
226
214
|
self.translations.each do |translation|
|
@@ -246,10 +234,7 @@ module WebTranslateIt
|
|
246
234
|
success = true
|
247
235
|
tries ||= 3
|
248
236
|
request = Net::HTTP::Post.new("/api/projects/#{Connection.api_key}/terms")
|
249
|
-
|
250
|
-
request.add_field("X-Client-Version", WebTranslateIt::Util.version)
|
251
|
-
request.add_field("Content-Type", "application/json")
|
252
|
-
|
237
|
+
WebTranslateIt::Util.add_fields(request)
|
253
238
|
request.body = self.to_json(true)
|
254
239
|
|
255
240
|
begin
|
@@ -60,10 +60,7 @@ module WebTranslateIt
|
|
60
60
|
success = true
|
61
61
|
tries ||= 3
|
62
62
|
request = Net::HTTP::Post.new("/api/projects/#{Connection.api_key}/terms/#{self.term_id}/locales/#{self.locale}/translations")
|
63
|
-
|
64
|
-
request.add_field("X-Client-Version", WebTranslateIt::Util.version)
|
65
|
-
request.add_field("Content-Type", "application/json")
|
66
|
-
|
63
|
+
WebTranslateIt::Util.add_fields(request)
|
67
64
|
request.body = self.to_json
|
68
65
|
|
69
66
|
begin
|
@@ -88,12 +85,8 @@ module WebTranslateIt
|
|
88
85
|
success = true
|
89
86
|
tries ||= 3
|
90
87
|
request = Net::HTTP::Put.new("/api/projects/#{Connection.api_key}/terms/#{self.id}/locales/#{self.locale}/translations/#{self.id}")
|
91
|
-
|
92
|
-
request.add_field("X-Client-Version", WebTranslateIt::Util.version)
|
93
|
-
request.add_field("Content-Type", "application/json")
|
94
|
-
|
88
|
+
WebTranslateIt::Util.add_fields(request)
|
95
89
|
request.body = self.to_json
|
96
|
-
|
97
90
|
begin
|
98
91
|
Util.handle_response(Connection.http_connection.request(request), true, true)
|
99
92
|
rescue Timeout::Error
|
@@ -44,11 +44,8 @@ module WebTranslateIt
|
|
44
44
|
def save
|
45
45
|
tries ||= 3
|
46
46
|
request = Net::HTTP::Post.new("/api/projects/#{Connection.api_key}/strings/#{self.string_id}/locales/#{self.locale}/translations")
|
47
|
-
|
48
|
-
request.add_field("X-Client-Version", WebTranslateIt::Util.version)
|
49
|
-
request.add_field("Content-Type", "application/json")
|
47
|
+
WebTranslateIt::Util.add_fields(request)
|
50
48
|
request.body = self.to_json
|
51
|
-
|
52
49
|
begin
|
53
50
|
Util.handle_response(Connection.http_connection.request(request), true, true)
|
54
51
|
rescue Timeout::Error
|
@@ -45,8 +45,7 @@ module WebTranslateIt
|
|
45
45
|
if !File.exist?(self.file_path) or force or self.remote_checksum != self.local_checksum
|
46
46
|
begin
|
47
47
|
request = Net::HTTP::Get.new(api_url)
|
48
|
-
|
49
|
-
request.add_field("X-Client-Version", WebTranslateIt::Util.version)
|
48
|
+
WebTranslateIt::Util.add_fields(request)
|
50
49
|
FileUtils.mkpath(self.file_path.split('/')[0..-2].join('/')) unless File.exist?(self.file_path) or self.file_path.split('/')[0..-2].join('/') == ""
|
51
50
|
begin
|
52
51
|
response = http_connection.request(request)
|
@@ -83,7 +82,7 @@ module WebTranslateIt
|
|
83
82
|
#
|
84
83
|
# Note that the request might or might not eventually be acted upon, as it might be disallowed when processing
|
85
84
|
# actually takes place. This is due to the fact that language file imports are handled by background processing.
|
86
|
-
def upload(http_connection, merge=false, ignore_missing=false, label=nil, low_priority=false, minor_changes=false, force=false)
|
85
|
+
def upload(http_connection, merge=false, ignore_missing=false, label=nil, low_priority=false, minor_changes=false, force=false, rename_others=false, destination_path=nil)
|
87
86
|
success = true
|
88
87
|
tries ||= 3
|
89
88
|
display = []
|
@@ -93,9 +92,11 @@ module WebTranslateIt
|
|
93
92
|
if force or self.remote_checksum != self.local_checksum
|
94
93
|
File.open(self.file_path) do |file|
|
95
94
|
begin
|
96
|
-
|
97
|
-
|
98
|
-
|
95
|
+
params = {"file" => UploadIO.new(file, "text/plain", file.path), "merge" => merge, "ignore_missing" => ignore_missing, "label" => label, "low_priority" => low_priority, "minor_changes" => minor_changes }
|
96
|
+
params["name"] = destination_path unless destination_path.nil?
|
97
|
+
params["rename_others"] = rename_others
|
98
|
+
request = Net::HTTP::Put::Multipart.new(api_url, params)
|
99
|
+
WebTranslateIt::Util.add_fields(request)
|
99
100
|
display.push Util.handle_response(http_connection.request(request))
|
100
101
|
rescue Timeout::Error
|
101
102
|
puts StringUtil.failure("Request timeout. Will retry in 5 seconds.")
|
@@ -115,7 +116,7 @@ module WebTranslateIt
|
|
115
116
|
end
|
116
117
|
puts ArrayUtil.to_columns(display)
|
117
118
|
else
|
118
|
-
puts StringUtil.failure("Can't push #{self.file_path}. File doesn't exist.")
|
119
|
+
puts StringUtil.failure("Can't push #{self.file_path}. File doesn't exist locally.")
|
119
120
|
end
|
120
121
|
return success
|
121
122
|
end
|
@@ -141,8 +142,7 @@ module WebTranslateIt
|
|
141
142
|
File.open(self.file_path) do |file|
|
142
143
|
begin
|
143
144
|
request = Net::HTTP::Post::Multipart.new(api_url_for_create, { "name" => self.file_path, "file" => UploadIO.new(file, "text/plain", file.path), "low_priority" => low_priority })
|
144
|
-
|
145
|
-
request.add_field("X-Client-Version", WebTranslateIt::Util.version)
|
145
|
+
WebTranslateIt::Util.add_fields(request)
|
146
146
|
display.push Util.handle_response(http_connection.request(request))
|
147
147
|
puts ArrayUtil.to_columns(display)
|
148
148
|
rescue Timeout::Error
|
@@ -159,7 +159,7 @@ module WebTranslateIt
|
|
159
159
|
end
|
160
160
|
end
|
161
161
|
else
|
162
|
-
puts StringUtil.failure("\nFile #{self.file_path} doesn't exist!")
|
162
|
+
puts StringUtil.failure("\nFile #{self.file_path} doesn't exist locally!")
|
163
163
|
end
|
164
164
|
return success
|
165
165
|
end
|
@@ -172,28 +172,25 @@ module WebTranslateIt
|
|
172
172
|
display = []
|
173
173
|
display.push file_path
|
174
174
|
if File.exists?(self.file_path)
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
retry
|
187
|
-
else
|
188
|
-
success = false
|
189
|
-
end
|
190
|
-
rescue
|
191
|
-
display.push StringUtil.failure("An error occured: #{$!}")
|
175
|
+
begin
|
176
|
+
request = Net::HTTP::Delete.new(api_url_for_delete)
|
177
|
+
WebTranslateIt::Util.add_fields(request)
|
178
|
+
display.push Util.handle_response(http_connection.request(request))
|
179
|
+
puts ArrayUtil.to_columns(display)
|
180
|
+
rescue Timeout::Error
|
181
|
+
puts StringUtil.failure("Request timeout. Will retry in 5 seconds.")
|
182
|
+
if (tries -= 1) > 0
|
183
|
+
sleep(5)
|
184
|
+
retry
|
185
|
+
else
|
192
186
|
success = false
|
193
187
|
end
|
188
|
+
rescue
|
189
|
+
display.push StringUtil.failure("An error occured: #{$!}")
|
190
|
+
success = false
|
194
191
|
end
|
195
192
|
else
|
196
|
-
puts StringUtil.failure("\
|
193
|
+
puts StringUtil.failure("\nMaster file #{self.file_path} doesn't exist locally!")
|
197
194
|
end
|
198
195
|
return success
|
199
196
|
end
|
@@ -40,6 +40,12 @@ module WebTranslateIt
|
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
|
+
def self.add_fields(request)
|
44
|
+
request.add_field("X-Client-Name", "web_translate_it")
|
45
|
+
request.add_field("X-Client-Version", version)
|
46
|
+
request.add_field("Content-Type", "application/json")
|
47
|
+
end
|
48
|
+
|
43
49
|
##
|
44
50
|
# Ask a question. Returns a true for yes, false for no, default for nil.
|
45
51
|
|
data/license
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
The MIT License (MIT)
|
2
2
|
|
3
|
-
Copyright (c) 2009-
|
3
|
+
Copyright (c) 2009-2019 WebTranslateIt Software S.L
|
4
4
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
6
6
|
this software and associated documentation files (the "Software"), to deal in
|
data/readme.md
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
|
8
8
|
wti lets you easily sync your language files with [WebTranslateIt.com](https://webtranslateit.com), a web-based tool to translation software.
|
9
9
|
|
10
|
-
<img src="
|
10
|
+
<img src="http://edouard.baconfile.com.s3.us-east-1.amazonaws.com/web_translate_it/wti4.png" alt="WebTranslateIt Synchronization Tool" width="500px">
|
11
11
|
|
12
12
|
### wti...
|
13
13
|
|
@@ -276,4 +276,4 @@ fr: 100% translated, 100% completed.
|
|
276
276
|
|
277
277
|
# License
|
278
278
|
|
279
|
-
Copyright (c) 2009-
|
279
|
+
Copyright (c) 2009-2021 WebTranslateIt Software S.L, released under the MIT License.
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: web_translate_it
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.4.
|
4
|
+
version: 2.4.12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Edouard Briere
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-06-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: multipart-post
|
@@ -25,19 +25,19 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '2.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: optimist
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '3.0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '3.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: multi_json
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -96,7 +96,6 @@ files:
|
|
96
96
|
- history.md
|
97
97
|
- lib/web_translate_it.rb
|
98
98
|
- lib/web_translate_it/auto_fetch.rb
|
99
|
-
- lib/web_translate_it/cacert.pem
|
100
99
|
- lib/web_translate_it/command_line.rb
|
101
100
|
- lib/web_translate_it/configuration.rb
|
102
101
|
- lib/web_translate_it/connection.rb
|
@@ -125,7 +124,7 @@ homepage: https://webtranslateit.com
|
|
125
124
|
licenses:
|
126
125
|
- MIT
|
127
126
|
metadata: {}
|
128
|
-
post_install_message:
|
127
|
+
post_install_message:
|
129
128
|
rdoc_options:
|
130
129
|
- "--main"
|
131
130
|
- readme.md
|
@@ -142,9 +141,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
142
141
|
- !ruby/object:Gem::Version
|
143
142
|
version: '0'
|
144
143
|
requirements: []
|
145
|
-
|
146
|
-
|
147
|
-
signing_key:
|
144
|
+
rubygems_version: 3.0.6
|
145
|
+
signing_key:
|
148
146
|
specification_version: 4
|
149
147
|
summary: A CLI to sync locale files with WebTranslateIt.com.
|
150
148
|
test_files:
|
@@ -1,22 +0,0 @@
|
|
1
|
-
-----BEGIN CERTIFICATE-----
|
2
|
-
MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh
|
3
|
-
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
|
4
|
-
d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
|
5
|
-
QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT
|
6
|
-
MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
|
7
|
-
b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG
|
8
|
-
9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB
|
9
|
-
CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97
|
10
|
-
nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt
|
11
|
-
43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P
|
12
|
-
T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4
|
13
|
-
gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO
|
14
|
-
BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR
|
15
|
-
TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw
|
16
|
-
DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr
|
17
|
-
hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg
|
18
|
-
06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF
|
19
|
-
PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls
|
20
|
-
YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
|
21
|
-
CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
|
22
|
-
-----END CERTIFICATE-----
|