tr4n5l4te 0.1.6 → 0.1.12

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
  SHA256:
3
- metadata.gz: 4b2e251b178f16e954b56a61d499486d4e369f66bee5f68ed016ac16270ef7a5
4
- data.tar.gz: 41894125f771195f11788b26781e1122aa27e39abf8674544aedbd9424d1a19b
3
+ metadata.gz: 954010f8de8d82aea0e42aff158589f845ce7c90ad62070823f2237e83445620
4
+ data.tar.gz: 4590211be6847e3727577e40f4f1528c6b42e1013d6e55152797b958044436ee
5
5
  SHA512:
6
- metadata.gz: 16490612ad1a9683ef67626f15120748e7e6c52f78684cc8a50053ae272e2ee45583ce7880ccc00e4a125b28a16dd0cc9b50bcb3c2f89b1c62843a1ef34a4ff3
7
- data.tar.gz: ef4b21e7beb0888aee641f23f812690794317fe5da708b6d62b47cdc5fdfa9cbca2c2cd5c1b1f29961bcbab6d5b27b92d2f4922ba22f0916a382863d4ff5cfde
6
+ metadata.gz: f11f27204c1e2e85ff05c88e243653a883fcfefb207c13f75aca511298a204999e2172c0e1eed8d50fffe4c16a7c5608003571d4ca0c5d3289ca2e435f5ad7d9
7
+ data.tar.gz: e8532e8eb379618167df35341ac713fd48e40686e6b3a0a8a084909563fe46b44af981c9d40d5dd0dbfc2d0e51b9177a0525e4cf1ba5351b5f894365b6c57c6f
data/.gitignore CHANGED
@@ -9,3 +9,5 @@
9
9
  test.html
10
10
  /vendor
11
11
  /stubs
12
+ /node_modules/
13
+ yarn.lock
data/CHANGELOG CHANGED
@@ -1,3 +1,30 @@
1
+ *0.1.12* (March 11, 2021)
2
+
3
+ * Dump console message into oblivion, do we don't see stupid warning messages like "Using this console may allow attackers to impersonate you and steal your information using an attack called Self-XSS"
4
+
5
+ *0.1.11* (March 09, 2021)
6
+
7
+ * Disregard case when using variable interpolation.
8
+
9
+ *0.1.10* (March 09, 2021)
10
+
11
+ * Accomodate latest changes to the web interface.
12
+
13
+ *0.1.9* (March 05, 2020)
14
+
15
+ * The top-level primary language key was being propagated from the source .yml file to the translated target .yml file. That is now fixed.
16
+ * Now keeps the interpolation tags intact.
17
+
18
+ *0.1.8* (February 21, 2020)
19
+
20
+ * Address ambiguous translations without stopping the run when the exception occurs.
21
+ * Fixes issue #9
22
+
23
+ *0.1.7* (January 14, 2020)
24
+
25
+ * Remove midwire common String usage
26
+ * Fixes issue #7
27
+
1
28
  *0.1.6* (January 14, 2020)
2
29
 
3
30
  * Fix rubocop violations
data/Gemfile.lock CHANGED
@@ -1,11 +1,11 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- tr4n5l4te (0.1.6)
4
+ tr4n5l4te (0.1.12)
5
5
  capybara (~> 2.6)
6
6
  colored (~> 1)
7
7
  midwire_common (~> 0.1)
8
- optimist
8
+ optimist (~> 3.0)
9
9
  poltergeist (~> 1.9)
10
10
 
11
11
  GEM
@@ -13,7 +13,7 @@ GEM
13
13
  specs:
14
14
  addressable (2.7.0)
15
15
  public_suffix (>= 2.0.2, < 5.0)
16
- ast (2.4.0)
16
+ ast (2.4.2)
17
17
  capybara (2.18.0)
18
18
  addressable
19
19
  mini_mime (>= 0.1.3)
@@ -22,23 +22,22 @@ GEM
22
22
  rack-test (>= 0.5.4)
23
23
  xpath (>= 2.0, < 4.0)
24
24
  cliver (0.3.2)
25
- coderay (1.1.2)
25
+ coderay (1.1.3)
26
26
  colored (1.2)
27
- diff-lcs (1.3)
28
- docile (1.3.2)
29
- jaro_winkler (1.5.4)
30
- json (2.3.0)
27
+ diff-lcs (1.4.4)
28
+ docile (1.3.5)
31
29
  method_source (0.9.2)
32
30
  midwire_common (0.3.0)
33
31
  thor (~> 0.19)
34
32
  mini_mime (1.0.2)
35
- mini_portile2 (2.4.0)
36
- nokogiri (1.10.7)
37
- mini_portile2 (~> 2.4.0)
38
- optimist (3.0.0)
39
- parallel (1.19.1)
40
- parser (2.7.0.2)
41
- ast (~> 2.4.0)
33
+ mini_portile2 (2.5.0)
34
+ nokogiri (1.11.2)
35
+ mini_portile2 (~> 2.5.0)
36
+ racc (~> 1.4)
37
+ optimist (3.0.1)
38
+ parallel (1.20.1)
39
+ parser (3.0.0.0)
40
+ ast (~> 2.4.1)
42
41
  poltergeist (1.18.1)
43
42
  capybara (>= 2.1, < 4)
44
43
  cliver (~> 0.3.1)
@@ -48,43 +47,51 @@ GEM
48
47
  method_source (~> 0.9.0)
49
48
  pry-nav (0.3.0)
50
49
  pry (>= 0.9.10, < 0.13.0)
51
- public_suffix (4.0.3)
52
- rack (2.1.1)
50
+ public_suffix (4.0.6)
51
+ racc (1.5.2)
52
+ rack (2.2.3)
53
53
  rack-test (1.1.0)
54
54
  rack (>= 1.0, < 3)
55
55
  rainbow (3.0.0)
56
- rake (10.5.0)
57
- rspec (3.9.0)
58
- rspec-core (~> 3.9.0)
59
- rspec-expectations (~> 3.9.0)
60
- rspec-mocks (~> 3.9.0)
61
- rspec-core (3.9.1)
62
- rspec-support (~> 3.9.1)
63
- rspec-expectations (3.9.0)
56
+ rake (13.0.3)
57
+ regexp_parser (2.1.1)
58
+ rexml (3.2.4)
59
+ rspec (3.10.0)
60
+ rspec-core (~> 3.10.0)
61
+ rspec-expectations (~> 3.10.0)
62
+ rspec-mocks (~> 3.10.0)
63
+ rspec-core (3.10.1)
64
+ rspec-support (~> 3.10.0)
65
+ rspec-expectations (3.10.1)
64
66
  diff-lcs (>= 1.2.0, < 2.0)
65
- rspec-support (~> 3.9.0)
66
- rspec-mocks (3.9.1)
67
+ rspec-support (~> 3.10.0)
68
+ rspec-mocks (3.10.2)
67
69
  diff-lcs (>= 1.2.0, < 2.0)
68
- rspec-support (~> 3.9.0)
69
- rspec-support (3.9.2)
70
- rubocop (0.79.0)
71
- jaro_winkler (~> 1.5.1)
70
+ rspec-support (~> 3.10.0)
71
+ rspec-support (3.10.2)
72
+ rubocop (1.11.0)
72
73
  parallel (~> 1.10)
73
- parser (>= 2.7.0.1)
74
+ parser (>= 3.0.0.0)
74
75
  rainbow (>= 2.2.2, < 4.0)
76
+ regexp_parser (>= 1.8, < 3.0)
77
+ rexml
78
+ rubocop-ast (>= 1.2.0, < 2.0)
75
79
  ruby-progressbar (~> 1.7)
76
- unicode-display_width (>= 1.4.0, < 1.7)
77
- ruby-progressbar (1.10.1)
78
- simplecov (0.17.1)
80
+ unicode-display_width (>= 1.4.0, < 3.0)
81
+ rubocop-ast (1.4.1)
82
+ parser (>= 2.7.1.5)
83
+ ruby-progressbar (1.11.0)
84
+ simplecov (0.21.2)
79
85
  docile (~> 1.1)
80
- json (>= 1.8, < 3)
81
- simplecov-html (~> 0.10.0)
82
- simplecov-html (0.10.2)
86
+ simplecov-html (~> 0.11)
87
+ simplecov_json_formatter (~> 0.1)
88
+ simplecov-html (0.12.3)
89
+ simplecov_json_formatter (0.1.2)
83
90
  thor (0.20.3)
84
- unicode-display_width (1.6.0)
85
- websocket-driver (0.7.1)
91
+ unicode-display_width (2.0.0)
92
+ websocket-driver (0.7.3)
86
93
  websocket-extensions (>= 0.1.0)
87
- websocket-extensions (0.1.4)
94
+ websocket-extensions (0.1.5)
88
95
  xpath (3.2.0)
89
96
  nokogiri (~> 1.8)
90
97
 
@@ -92,13 +99,13 @@ PLATFORMS
92
99
  ruby
93
100
 
94
101
  DEPENDENCIES
95
- bundler (~> 2.0.1)
102
+ bundler (~> 2.1)
96
103
  pry-nav
97
- rake (~> 10.0)
104
+ rake (~> 13.0)
98
105
  rspec (~> 3.0)
99
106
  rubocop
100
107
  simplecov (~> 0.11)
101
108
  tr4n5l4te!
102
109
 
103
110
  BUNDLED WITH
104
- 2.0.1
111
+ 2.1.4
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Tr4n5l4te
2
2
 
3
- **Version: 0.1.6**
3
+ **Version: 0.1.12**
4
4
 
5
5
  Use Google Translate without an API key.
6
6
 
@@ -30,10 +30,10 @@ In your code:
30
30
 
31
31
  ```ruby
32
32
  translator = Tr4n5l4te::Translator.new
33
- english_strings = %w(
34
- hello
35
- how are you
36
- )
33
+ english_strings = [
34
+ 'hello',
35
+ 'how are you'
36
+ ]
37
37
  english_strings.each do |text|
38
38
  puts translator.translate(text, :en, :es)
39
39
  end
@@ -65,7 +65,7 @@ Warning: If you pass in '0' and translate a large file, it is very likely that G
65
65
 
66
66
  To list all known languages
67
67
 
68
- $ ./exe/translate -t
68
+ $ ./exe/translate --list
69
69
 
70
70
  ## Development
71
71
 
data/bin/console CHANGED
@@ -7,8 +7,8 @@ require 'tr4n5l4te'
7
7
  # with your gem easier. You can also use a different console, if you like.
8
8
 
9
9
  # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
10
+ require 'pry'
11
+ Pry.start
12
12
 
13
- require 'irb'
14
- IRB.start
13
+ # require 'irb'
14
+ # IRB.start
data/lib/tr4n5l4te.rb CHANGED
@@ -2,7 +2,6 @@
2
2
 
3
3
  require 'tr4n5l4te/version'
4
4
 
5
- require 'midwire_common/string'
6
5
  require 'midwire_common/yaml_setting'
7
6
  require 'midwire_common/hash'
8
7
 
@@ -15,7 +14,7 @@ module Tr4n5l4te
15
14
  end
16
15
 
17
16
  def string_id
18
- to_s.snakerize
17
+ 'tr4n5l4te'
19
18
  end
20
19
 
21
20
  def default_config_directory
@@ -10,7 +10,9 @@ module Tr4n5l4te
10
10
  app,
11
11
  js_errors: false,
12
12
  timeout: Tr4n5l4te.configuration.timeout,
13
- phantomjs_options: ['--load-images=no']
13
+ phantomjs_options: ['--load-images=no', '--ignore-ssl-errors=yes', '--web-security=false'],
14
+ phantomjs_logger: StringIO.new,
15
+ logger: StringIO.new
14
16
  )
15
17
  end
16
18
  Capybara.default_driver = :poltergeist
@@ -4,6 +4,7 @@ require 'optimist'
4
4
  require 'colored'
5
5
  require 'fileutils'
6
6
  require 'midwire_common/string'
7
+ require 'pry' unless ENV.fetch('GEM_ENV', nil).nil?
7
8
 
8
9
  module Tr4n5l4te
9
10
  class Runner
@@ -30,7 +31,7 @@ module Tr4n5l4te
30
31
 
31
32
  hash = YAML.load_file(options[:yaml_file])
32
33
  translated = process(hash)
33
- store_translation(translated)
34
+ store_translation(replace_lang_key(translated))
34
35
 
35
36
  puts("Processed #{@count} strings in [#{Time.now - start_time}] seconds.".yellow)
36
37
  end
@@ -47,7 +48,7 @@ module Tr4n5l4te
47
48
 
48
49
  def translate(string)
49
50
  @count += 1
50
- puts("[#{string}]") if options[:verbose]
51
+ puts("Translating [#{string}]") if options[:verbose]
51
52
  translator.translate(string, from_lang, options[:lang])
52
53
  end
53
54
 
@@ -56,10 +57,19 @@ module Tr4n5l4te
56
57
  end
57
58
 
58
59
  def from_lang
59
- md = File.basename(options[:yaml_file]).match(/^(\w\w)\.yml$/)
60
- fail "Could not determine language from yaml file: '#{options[:yaml_file]}'" unless md
60
+ @from_lang ||= begin
61
+ md = File.basename(options[:yaml_file]).match(/^(\w\w)\.yml$/)
62
+ fail "Could not determine language from yaml file: '#{options[:yaml_file]}'" unless md
61
63
 
62
- md[1]
64
+ md[1]
65
+ end
66
+ end
67
+
68
+ def replace_lang_key(translated)
69
+ assumed_source_lang = translated.keys.first
70
+ return translated unless assumed_source_lang == from_lang
71
+
72
+ { options[:lang] => translated.values.first }
63
73
  end
64
74
 
65
75
  def store_translation(translated)
@@ -14,22 +14,43 @@ module Tr4n5l4te
14
14
  end
15
15
 
16
16
  def translate(text, from_lang, to_lang)
17
- puts "Translating: #{text}"
18
17
  encoded_text = validate_and_encode(text)
19
18
  return '' if encoded_text == ''
20
19
 
21
20
  smart_visit(translator_url(encoded_text, from_lang, to_lang))
22
- result_box = browser.find('.tlid-translation')
23
- result_box.text
21
+ result_box = browser.find('.JLqJ4b.ChMk0b > span:first-child')
22
+ postprocess(result_box.text)
23
+ rescue Capybara::Ambiguous
24
+ all_translations = browser.find_all('.JLqJ4b.ChMk0b > span:first-child')
25
+ multiples = all_translations.collect(&:text)
26
+ puts("WARNING: '#{text}' has multiple translations: [#{multiples.join(', ')}]")
27
+ text
24
28
  end
25
29
 
26
30
  private
27
31
 
32
+ def preprocess(text)
33
+ @interpolations = text.scan(/(%{.*})/).flatten
34
+ @interpolations.each_with_index do |var, ndx|
35
+ stub = "VAR#{ndx}"
36
+ text.gsub!(%r{#{var}}, stub)
37
+ end
38
+ text
39
+ end
40
+
41
+ def postprocess(text)
42
+ @interpolations.each_with_index do |interp, ndx|
43
+ stub = /VAR#{ndx}/i
44
+ text.gsub!(stub, interp)
45
+ end
46
+ text
47
+ end
48
+
28
49
  def validate_and_encode(text)
29
50
  return '' if text.nil?
30
51
  fail "Cannot translate a [#{text.class}]: '#{text}'" unless text.respond_to?(:gsub)
31
52
 
32
- CGI.escape(text.strip)
53
+ CGI.escape(preprocess(text.strip))
33
54
  end
34
55
 
35
56
  def smart_visit(url)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Tr4n5l4te
4
- VERSION = '0.1.6'.freeze
4
+ VERSION = '0.1.12'.freeze
5
5
  end
data/tr4n5l4te.gemspec CHANGED
@@ -20,9 +20,9 @@ Gem::Specification.new do |spec|
20
20
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
21
  spec.require_paths = ['lib']
22
22
 
23
- spec.add_development_dependency 'bundler', '~> 2.0.1'
23
+ spec.add_development_dependency 'bundler', '~> 2.1'
24
24
  spec.add_development_dependency 'pry-nav'
25
- spec.add_development_dependency 'rake', '~> 10.0'
25
+ spec.add_development_dependency 'rake', '~> 13.0'
26
26
  spec.add_development_dependency 'rspec', '~> 3.0'
27
27
  spec.add_development_dependency 'rubocop'
28
28
  spec.add_development_dependency 'simplecov', '~> 0.11'
@@ -30,6 +30,6 @@ Gem::Specification.new do |spec|
30
30
  spec.add_dependency 'capybara', '~> 2.6'
31
31
  spec.add_dependency 'colored', '~> 1'
32
32
  spec.add_dependency 'midwire_common', '~> 0.1'
33
- spec.add_dependency 'optimist'
33
+ spec.add_dependency 'optimist', '~> 3.0'
34
34
  spec.add_dependency 'poltergeist', '~> 1.9'
35
35
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tr4n5l4te
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Blackburn
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-01-14 00:00:00.000000000 Z
11
+ date: 2021-03-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 2.0.1
19
+ version: '2.1'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 2.0.1
26
+ version: '2.1'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: pry-nav
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '10.0'
47
+ version: '13.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '10.0'
54
+ version: '13.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -140,16 +140,16 @@ dependencies:
140
140
  name: optimist
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - ">="
143
+ - - "~>"
144
144
  - !ruby/object:Gem::Version
145
- version: '0'
145
+ version: '3.0'
146
146
  type: :runtime
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
- - - ">="
150
+ - - "~>"
151
151
  - !ruby/object:Gem::Version
152
- version: '0'
152
+ version: '3.0'
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: poltergeist
155
155
  requirement: !ruby/object:Gem::Requirement
@@ -203,7 +203,7 @@ homepage: https://github.com/midwire/tr4n5l4te
203
203
  licenses:
204
204
  - MIT
205
205
  metadata: {}
206
- post_install_message:
206
+ post_install_message:
207
207
  rdoc_options: []
208
208
  require_paths:
209
209
  - lib
@@ -219,7 +219,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
219
219
  version: '0'
220
220
  requirements: []
221
221
  rubygems_version: 3.0.3
222
- signing_key:
222
+ signing_key:
223
223
  specification_version: 4
224
224
  summary: Use Google Translate without an API key.
225
225
  test_files: []