i18n-tasks 0.9.30 → 0.9.31
Sign up to get free protection for your applications and to get access to all the features.
- 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
|