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 +4 -4
- data/README.md +23 -1
- data/config/locales/en.yml +6 -0
- data/config/locales/ru.yml +6 -0
- data/i18n-tasks.gemspec +5 -2
- data/lib/i18n/tasks/configuration.rb +1 -0
- data/lib/i18n/tasks/data/adapter/yaml_adapter.rb +1 -1
- data/lib/i18n/tasks/translation.rb +4 -1
- data/lib/i18n/tasks/translators/yandex_translator.rb +61 -0
- data/lib/i18n/tasks/version.rb +1 -1
- metadata +43 -28
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: b6f870248df7b94a77747317666b12fa096bd04c6c9a5fc7ab8ef8eb850a207c
|
|
4
|
+
data.tar.gz: '092e4392eb447157a40aea73dc0214039dcd31efb09c80d0959750929765620c'
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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.
|
|
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.
|
data/config/locales/en.yml
CHANGED
|
@@ -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.
|
data/config/locales/ru.yml
CHANGED
|
@@ -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: Яндекс не дал результатов.
|
data/i18n-tasks.gemspec
CHANGED
|
@@ -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
|
data/lib/i18n/tasks/version.rb
CHANGED
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.
|
|
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-
|
|
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:
|
|
180
|
+
name: rake
|
|
181
181
|
requirement: !ruby/object:Gem::Requirement
|
|
182
182
|
requirements:
|
|
183
183
|
- - ">="
|
|
184
184
|
- !ruby/object:Gem::Version
|
|
185
|
-
version:
|
|
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:
|
|
192
|
+
version: '0'
|
|
193
193
|
- !ruby/object:Gem::Dependency
|
|
194
|
-
name:
|
|
194
|
+
name: rspec
|
|
195
195
|
requirement: !ruby/object:Gem::Requirement
|
|
196
196
|
requirements:
|
|
197
|
-
- - "
|
|
197
|
+
- - "~>"
|
|
198
198
|
- !ruby/object:Gem::Version
|
|
199
|
-
version:
|
|
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:
|
|
206
|
+
version: '3.3'
|
|
207
207
|
- !ruby/object:Gem::Dependency
|
|
208
|
-
name:
|
|
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:
|
|
236
|
+
name: yard
|
|
223
237
|
requirement: !ruby/object:Gem::Requirement
|
|
224
238
|
requirements:
|
|
225
|
-
- - "
|
|
239
|
+
- - ">="
|
|
226
240
|
- !ruby/object:Gem::Version
|
|
227
|
-
version: '
|
|
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: '
|
|
248
|
+
version: '0'
|
|
235
249
|
- !ruby/object:Gem::Dependency
|
|
236
|
-
name:
|
|
250
|
+
name: deepl-rb
|
|
237
251
|
requirement: !ruby/object:Gem::Requirement
|
|
238
252
|
requirements:
|
|
239
|
-
- - "
|
|
253
|
+
- - ">="
|
|
240
254
|
- !ruby/object:Gem::Version
|
|
241
|
-
version:
|
|
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:
|
|
262
|
+
version: 2.1.0
|
|
249
263
|
- !ruby/object:Gem::Dependency
|
|
250
|
-
name:
|
|
264
|
+
name: easy_translate
|
|
251
265
|
requirement: !ruby/object:Gem::Requirement
|
|
252
266
|
requirements:
|
|
253
267
|
- - ">="
|
|
254
268
|
- !ruby/object:Gem::Version
|
|
255
|
-
version:
|
|
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:
|
|
276
|
+
version: 0.5.1
|
|
263
277
|
- !ruby/object:Gem::Dependency
|
|
264
|
-
name:
|
|
278
|
+
name: yandex-translator
|
|
265
279
|
requirement: !ruby/object:Gem::Requirement
|
|
266
280
|
requirements:
|
|
267
281
|
- - ">="
|
|
268
282
|
- !ruby/object:Gem::Version
|
|
269
|
-
version:
|
|
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:
|
|
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.
|
|
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
|