i18n-tasks 0.9.30 → 0.9.31

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c748cb31dcf9a41f13b85f43f0dcad3be53f39ddcff325d41c587c1b32b7812b
4
- data.tar.gz: bb8f185177f4c0bdd936c45e71827088d12f45a43718d4a3cf1b533ac937343f
3
+ metadata.gz: b6f870248df7b94a77747317666b12fa096bd04c6c9a5fc7ab8ef8eb850a207c
4
+ data.tar.gz: '092e4392eb447157a40aea73dc0214039dcd31efb09c80d0959750929765620c'
5
5
  SHA512:
6
- metadata.gz: 94d977df364cc0494ea55b19d45a3754503211433a983b4963f17b0617182752d15651b3c636808399d00fadfbbc4bff3aa2098ef398a50e814fdfd9d30488ff
7
- data.tar.gz: e000d084559176d27f3c1ea6938715e076f6b233d767f3c2ed328ecfe07d2c0deb11feefff4ec10cbc2aad51e807fa4ff883aedd694b41dfd3dbd8aabfc2fe2a
6
+ metadata.gz: 9756b702d3c268a0fd42f1f203e2c1786903433f0a7492540feeab117de3f6da018fb8d6b41c924414793b050718c71200f3fe801965178212bf13cfdd836960
7
+ data.tar.gz: 85328d93b330ea66c77acf856e5d6c549a42e8dc3064487d58b4506a3ff99bb41cc6099cb5e2b44014e863353280f5e012f1d45e1d2e07139c35c4172d200793
data/README.md CHANGED
@@ -22,7 +22,7 @@ i18n-tasks can be used with any project using the ruby [i18n gem][i18n-gem] (def
22
22
  Add i18n-tasks to the Gemfile:
23
23
 
24
24
  ```ruby
25
- gem 'i18n-tasks', '~> 0.9.30'
25
+ gem 'i18n-tasks', '~> 0.9.31'
26
26
  ```
27
27
 
28
28
  Copy the default [configuration file](#configuration):
@@ -104,6 +104,17 @@ $ i18n-tasks translate-missing --backend=deepl
104
104
  $ i18n-tasks translate-missing --backend=deepl --from=en fr nl
105
105
  ```
106
106
 
107
+ ### Yandex Translate missing keys
108
+
109
+ Translate missing values with Yandex Translate ([more below on the API key](#yandex-translation-config)).
110
+
111
+ ```console
112
+ $ i18n-tasks translate-missing --backend=yandex
113
+
114
+ # accepts from and locales options:
115
+ $ i18n-tasks translate-missing --from=en es fr
116
+ ```
117
+
107
118
  ### Find usages
108
119
 
109
120
  See where the keys are used with `i18n-tasks find`:
@@ -397,6 +408,17 @@ translation:
397
408
  deepl_api_key: <Deep Pro API key>
398
409
  ```
399
410
 
411
+ <a name="yandex-translation-config"></a>
412
+ ### Yandex Translate
413
+
414
+ `i18n-tasks translate-missing` requires a Yandex API key, get it at [Yandex](https://tech.yandex.com/translate).
415
+
416
+ ```yaml
417
+ # config/i18n-tasks.yml
418
+ translation:
419
+ yandex_api_key: <Yandex API key>
420
+ ```
421
+
400
422
  ## Interactive console
401
423
 
402
424
  `i18n-tasks irb` starts an IRB session in i18n-tasks context. Type `guide` for more information.
@@ -120,3 +120,9 @@ en:
120
120
  none: Every translation is in use.
121
121
  usages:
122
122
  none: No key usages found.
123
+ yandex_translate:
124
+ errors:
125
+ no_api_key: >-
126
+ Set Yandex API key via YANDEX_API_KEY environment variable or translation.yandex_api_key
127
+ in config/i18n-tasks.yml. Get the key at https://tech.yandex.com/translate.
128
+ no_results: Yandex returned no results.
@@ -122,3 +122,9 @@ ru:
122
122
  none: Все переводы используются.
123
123
  usages:
124
124
  none: Не найдено использований.
125
+ yandex_translate:
126
+ errors:
127
+ no_api_key: |-
128
+ Установить ключ API Яндекса с помощью переменной среды YANDEX_API_KEY или translation.yandex_api_key
129
+ в config / i18n-tasks.yml. Получите ключ по адресу https://tech.yandex.com/translate/.
130
+ no_results: Яндекс не дал результатов.
@@ -44,11 +44,14 @@ TEXT
44
44
  s.add_dependency 'terminal-table', '>= 1.5.1'
45
45
  s.add_development_dependency 'axlsx', '~> 2.0'
46
46
  s.add_development_dependency 'bundler', '~> 2.0', '>= 2.0.1'
47
- s.add_development_dependency 'deepl-rb', '>= 2.1.0'
48
- s.add_development_dependency 'easy_translate', '>= 0.5.1'
49
47
  s.add_development_dependency 'rake'
50
48
  s.add_development_dependency 'rspec', '~> 3.3'
51
49
  s.add_development_dependency 'rubocop', '~> 0.53.0'
52
50
  s.add_development_dependency 'simplecov'
53
51
  s.add_development_dependency 'yard'
52
+
53
+ # Translation backends
54
+ s.add_development_dependency 'deepl-rb', '>= 2.1.0'
55
+ s.add_development_dependency 'easy_translate', '>= 0.5.1' # Google Translate
56
+ s.add_development_dependency 'yandex-translator', '>= 0.3.3'
54
57
  end
@@ -59,6 +59,7 @@ module I18n::Tasks::Configuration # rubocop:disable Metrics/ModuleLength
59
59
  conf = (config[:translation] || {}).with_indifferent_access
60
60
  conf[:google_translate_api_key] = ENV['GOOGLE_TRANSLATE_API_KEY'] if ENV.key?('GOOGLE_TRANSLATE_API_KEY')
61
61
  conf[:deepl_api_key] = ENV['DEEPL_AUTH_KEY'] if ENV.key?('DEEPL_AUTH_KEY')
62
+ conf[:yandex_api_key] = ENV['YANDEX_API_KEY'] if ENV.key?('YANDEX_API_KEY')
62
63
  conf
63
64
  end
64
65
  end
@@ -9,7 +9,7 @@ module I18n::Tasks
9
9
  # @return [Hash] locale tree
10
10
  def parse(str, options)
11
11
  if YAML.method(:load).arity.abs == 2
12
- YAML.load(str, options || {})
12
+ YAML.load(str, **(options || {}))
13
13
  else
14
14
  # older jruby and rbx 2.2.7 do not accept options
15
15
  YAML.load(str)
@@ -2,12 +2,13 @@
2
2
 
3
3
  require 'i18n/tasks/translators/deepl_translator.rb'
4
4
  require 'i18n/tasks/translators/google_translator.rb'
5
+ require 'i18n/tasks/translators/yandex_translator.rb'
5
6
 
6
7
  module I18n::Tasks
7
8
  module Translation
8
9
  # @param [I18n::Tasks::Tree::Siblings] forest to translate to the locales of its root nodes
9
10
  # @param [String] from locale
10
- # @param [:deepl, :google] backend
11
+ # @param [:deepl, :google, :yandex] backend
11
12
  # @return [I18n::Tasks::Tree::Siblings] translated forest
12
13
  def translate_forest(forest, from:, backend: :google)
13
14
  case backend
@@ -15,6 +16,8 @@ module I18n::Tasks
15
16
  Translators::DeeplTranslator.new(self).translate_forest(forest, from)
16
17
  when :google
17
18
  Translators::GoogleTranslator.new(self).translate_forest(forest, from)
19
+ when :yandex
20
+ Translators::YandexTranslator.new(self).translate_forest(forest, from)
18
21
  else
19
22
  fail CommandError, "invalid backend: #{backend}"
20
23
  end
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'i18n/tasks/translators/base_translator'
4
+
5
+ module I18n::Tasks::Translators
6
+ class YandexTranslator < BaseTranslator
7
+ def initialize(*)
8
+ begin
9
+ require 'yandex-translator'
10
+ rescue LoadError
11
+ raise ::I18n::Tasks::CommandError, "Add gem 'yandex-translator' to your Gemfile to use this command"
12
+ end
13
+ super
14
+ end
15
+
16
+ protected
17
+
18
+ def translate_values(list, **options)
19
+ list.map { |item| translator.translate(item, options) }
20
+ end
21
+
22
+ def options_for_translate_values(from:, to:, **options)
23
+ options.merge(
24
+ from: to_yandex_compatible_locale(from),
25
+ to: to_yandex_compatible_locale(to)
26
+ )
27
+ end
28
+
29
+ def options_for_html
30
+ { format: 'html' }
31
+ end
32
+
33
+ def options_for_plain
34
+ { format: 'plain' }
35
+ end
36
+
37
+ def no_results_error_message
38
+ I18n.t('i18n_tasks.yandex_translate.errors.no_results')
39
+ end
40
+
41
+ private
42
+
43
+ # Convert 'es-ES' to 'es'
44
+ def to_yandex_compatible_locale(locale)
45
+ return locale unless locale.include?('-')
46
+ locale.split('-', 2).first
47
+ end
48
+
49
+ def translator
50
+ @translator ||= Yandex::Translator.new(api_key)
51
+ end
52
+
53
+ def api_key
54
+ @api_key ||= begin
55
+ key = @i18n_tasks.translation_config[:yandex_api_key]
56
+ fail ::I18n::Tasks::CommandError, I18n.t('i18n_tasks.yandex_translate.errors.no_api_key') if key.blank?
57
+ key
58
+ end
59
+ end
60
+ end
61
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module I18n
4
4
  module Tasks
5
- VERSION = '0.9.30'
5
+ VERSION = '0.9.31'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: i18n-tasks
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.30
4
+ version: 0.9.31
5
5
  platform: ruby
6
6
  authors:
7
7
  - glebm
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-01-13 00:00:00.000000000 Z
11
+ date: 2020-03-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -177,35 +177,49 @@ dependencies:
177
177
  - !ruby/object:Gem::Version
178
178
  version: 2.0.1
179
179
  - !ruby/object:Gem::Dependency
180
- name: deepl-rb
180
+ name: rake
181
181
  requirement: !ruby/object:Gem::Requirement
182
182
  requirements:
183
183
  - - ">="
184
184
  - !ruby/object:Gem::Version
185
- version: 2.1.0
185
+ version: '0'
186
186
  type: :development
187
187
  prerelease: false
188
188
  version_requirements: !ruby/object:Gem::Requirement
189
189
  requirements:
190
190
  - - ">="
191
191
  - !ruby/object:Gem::Version
192
- version: 2.1.0
192
+ version: '0'
193
193
  - !ruby/object:Gem::Dependency
194
- name: easy_translate
194
+ name: rspec
195
195
  requirement: !ruby/object:Gem::Requirement
196
196
  requirements:
197
- - - ">="
197
+ - - "~>"
198
198
  - !ruby/object:Gem::Version
199
- version: 0.5.1
199
+ version: '3.3'
200
200
  type: :development
201
201
  prerelease: false
202
202
  version_requirements: !ruby/object:Gem::Requirement
203
203
  requirements:
204
- - - ">="
204
+ - - "~>"
205
205
  - !ruby/object:Gem::Version
206
- version: 0.5.1
206
+ version: '3.3'
207
207
  - !ruby/object:Gem::Dependency
208
- name: rake
208
+ name: rubocop
209
+ requirement: !ruby/object:Gem::Requirement
210
+ requirements:
211
+ - - "~>"
212
+ - !ruby/object:Gem::Version
213
+ version: 0.53.0
214
+ type: :development
215
+ prerelease: false
216
+ version_requirements: !ruby/object:Gem::Requirement
217
+ requirements:
218
+ - - "~>"
219
+ - !ruby/object:Gem::Version
220
+ version: 0.53.0
221
+ - !ruby/object:Gem::Dependency
222
+ name: simplecov
209
223
  requirement: !ruby/object:Gem::Requirement
210
224
  requirements:
211
225
  - - ">="
@@ -219,61 +233,61 @@ dependencies:
219
233
  - !ruby/object:Gem::Version
220
234
  version: '0'
221
235
  - !ruby/object:Gem::Dependency
222
- name: rspec
236
+ name: yard
223
237
  requirement: !ruby/object:Gem::Requirement
224
238
  requirements:
225
- - - "~>"
239
+ - - ">="
226
240
  - !ruby/object:Gem::Version
227
- version: '3.3'
241
+ version: '0'
228
242
  type: :development
229
243
  prerelease: false
230
244
  version_requirements: !ruby/object:Gem::Requirement
231
245
  requirements:
232
- - - "~>"
246
+ - - ">="
233
247
  - !ruby/object:Gem::Version
234
- version: '3.3'
248
+ version: '0'
235
249
  - !ruby/object:Gem::Dependency
236
- name: rubocop
250
+ name: deepl-rb
237
251
  requirement: !ruby/object:Gem::Requirement
238
252
  requirements:
239
- - - "~>"
253
+ - - ">="
240
254
  - !ruby/object:Gem::Version
241
- version: 0.53.0
255
+ version: 2.1.0
242
256
  type: :development
243
257
  prerelease: false
244
258
  version_requirements: !ruby/object:Gem::Requirement
245
259
  requirements:
246
- - - "~>"
260
+ - - ">="
247
261
  - !ruby/object:Gem::Version
248
- version: 0.53.0
262
+ version: 2.1.0
249
263
  - !ruby/object:Gem::Dependency
250
- name: simplecov
264
+ name: easy_translate
251
265
  requirement: !ruby/object:Gem::Requirement
252
266
  requirements:
253
267
  - - ">="
254
268
  - !ruby/object:Gem::Version
255
- version: '0'
269
+ version: 0.5.1
256
270
  type: :development
257
271
  prerelease: false
258
272
  version_requirements: !ruby/object:Gem::Requirement
259
273
  requirements:
260
274
  - - ">="
261
275
  - !ruby/object:Gem::Version
262
- version: '0'
276
+ version: 0.5.1
263
277
  - !ruby/object:Gem::Dependency
264
- name: yard
278
+ name: yandex-translator
265
279
  requirement: !ruby/object:Gem::Requirement
266
280
  requirements:
267
281
  - - ">="
268
282
  - !ruby/object:Gem::Version
269
- version: '0'
283
+ version: 0.3.3
270
284
  type: :development
271
285
  prerelease: false
272
286
  version_requirements: !ruby/object:Gem::Requirement
273
287
  requirements:
274
288
  - - ">="
275
289
  - !ruby/object:Gem::Version
276
- version: '0'
290
+ version: 0.3.3
277
291
  description: |
278
292
  i18n-tasks helps you find and manage missing and unused translations.
279
293
 
@@ -368,6 +382,7 @@ files:
368
382
  - lib/i18n/tasks/translators/base_translator.rb
369
383
  - lib/i18n/tasks/translators/deepl_translator.rb
370
384
  - lib/i18n/tasks/translators/google_translator.rb
385
+ - lib/i18n/tasks/translators/yandex_translator.rb
371
386
  - lib/i18n/tasks/unused_keys.rb
372
387
  - lib/i18n/tasks/used_keys.rb
373
388
  - lib/i18n/tasks/version.rb
@@ -398,7 +413,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
398
413
  - !ruby/object:Gem::Version
399
414
  version: '0'
400
415
  requirements: []
401
- rubygems_version: 3.1.2
416
+ rubygems_version: 3.0.3
402
417
  signing_key:
403
418
  specification_version: 4
404
419
  summary: Manage localization and translation with the awesome power of static analysis