i18n-tasks 0.4.0 → 0.4.1
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/CHANGES.md +7 -1
- data/lib/i18n/tasks/base_task.rb +1 -0
- data/lib/i18n/tasks/command_error.rb +7 -0
- data/lib/i18n/tasks/commands_base.rb +8 -1
- data/lib/i18n/tasks/data/file_formats.rb +1 -1
- data/lib/i18n/tasks/data/router/pattern_router.rb +1 -1
- data/lib/i18n/tasks/google_translation.rb +22 -5
- data/lib/i18n/tasks/logging.rb +4 -0
- data/lib/i18n/tasks/relative_keys.rb +1 -1
- data/lib/i18n/tasks/scanners/base_scanner.rb +1 -1
- data/lib/i18n/tasks/version.rb +1 -1
- data/spec/google_translate_spec.rb +17 -7
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 71be19b5936a14fe104e5637369097c2a835b57a
|
4
|
+
data.tar.gz: bf6e3c088c8f202032c81f71782acff219465c0c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 22661c315b535b89fd04b9d8efc52781da3b5409f3474ae9ada566d98e96795ca802988c917fd300e90d889b6c6057ef4fab144d98e212d5f592e87303c57967
|
7
|
+
data.tar.gz: 1d9778f7d2ae1a3a56e76fe33ed00d7fcfb453337e224deac743b21213aee2b8f2beaadd005133abe991ea49004fe10a6c95743302f5152fa7aef378bc4ca017
|
data/CHANGES.md
CHANGED
@@ -1,10 +1,16 @@
|
|
1
|
-
## 0.4.
|
1
|
+
## 0.4.1
|
2
|
+
|
3
|
+
* Improved error messages across the board
|
4
|
+
* Fixed google translate issue with _html keys [#67](https://github.com/glebm/i18n-tasks/issues/67).
|
5
|
+
|
6
|
+
## 0.4.0
|
2
7
|
|
3
8
|
* In addition to pattern router, a new conservative router that keeps the keys in place. (See [#57](https://github.com/glebm/i18n-tasks/issues/57))
|
4
9
|
* `i18n-tasks irb` for debugging
|
5
10
|
* This release is a major refactoring to use real trees internally (as opposed to nested hashes).
|
6
11
|
Real trees allow for much easier [traversal](/lib/i18n/tasks/data/tree/traversal.rb).
|
7
12
|
With these trees, information can be associated with each node, which allows for things like the conservative router.
|
13
|
+
* Accept keys with dashes (`-`) [#64](https://github.com/glebm/i18n-tasks/issues/64).
|
8
14
|
|
9
15
|
## 0.3.11
|
10
16
|
|
data/lib/i18n/tasks/base_task.rb
CHANGED
@@ -32,7 +32,14 @@ module I18n::Tasks
|
|
32
32
|
def cmd(name, &block)
|
33
33
|
cmds[name] = OpenStruct.new(@next_def)
|
34
34
|
@next_def = {}
|
35
|
-
define_method
|
35
|
+
define_method name do |*args|
|
36
|
+
begin
|
37
|
+
instance_exec *args, &block
|
38
|
+
rescue CommandError => e
|
39
|
+
log_error e.message
|
40
|
+
exit 78
|
41
|
+
end
|
42
|
+
end
|
36
43
|
end
|
37
44
|
|
38
45
|
def desc(text)
|
@@ -39,7 +39,7 @@ module I18n
|
|
39
39
|
def adapter_for(path)
|
40
40
|
@fn_patterns.detect { |(name, pattern, adapter)|
|
41
41
|
::File.fnmatch(pattern, path)
|
42
|
-
} or raise "Adapter not found for #{path}. Registered adapters: #{@fn_patterns.inspect}"
|
42
|
+
} or raise CommandError.new("Adapter not found for #{path}. Registered adapters: #{@fn_patterns.inspect}")
|
43
43
|
end
|
44
44
|
end
|
45
45
|
end
|
@@ -35,7 +35,7 @@ module I18n::Tasks
|
|
35
35
|
path.gsub!(/\\\d+/) { |m| key_match[m[1..-1].to_i] }
|
36
36
|
(out[path] ||= Set.new) << "#{locale}.#{key}"
|
37
37
|
else
|
38
|
-
raise "
|
38
|
+
raise CommandError.new("Cannot route key #{key}. Routes are #{@routes_config.inspect}")
|
39
39
|
end
|
40
40
|
end
|
41
41
|
out.each do |dest, keys|
|
@@ -9,12 +9,19 @@ module I18n::Tasks::GoogleTranslation
|
|
9
9
|
opts[:key] = key
|
10
10
|
end
|
11
11
|
if opts[:key].blank?
|
12
|
-
|
13
|
-
|
12
|
+
warn_missing_api_key
|
13
|
+
return []
|
14
14
|
end
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
key_idx = {}
|
16
|
+
list.each_with_index { |k_v, i| key_idx[k_v[0]] = i}
|
17
|
+
list.group_by { |k_v|
|
18
|
+
k_v[0].end_with?('_html'.freeze)
|
19
|
+
}.map do |html, slice|
|
20
|
+
t_opts = opts.merge(html ? {html: true} : {format: 'text'})
|
21
|
+
fetch_google_translations slice, t_opts
|
22
|
+
end.reduce(:+).tap { |l|
|
23
|
+
l.sort! { |a, b| key_idx[a[0]] <=> key_idx[b[0]] }
|
24
|
+
}
|
18
25
|
end
|
19
26
|
|
20
27
|
INTERPOLATION_KEY_RE = /%\{[^}]+\}/
|
@@ -22,6 +29,9 @@ You can obtain the key at https://code.google.com/apis/console.')
|
|
22
29
|
|
23
30
|
def fetch_google_translations(list, opts)
|
24
31
|
translated = EasyTranslate.translate(list.map { |l| l[1].gsub(INTERPOLATION_KEY_RE, UNTRANSLATABLE_STRING) }, opts)
|
32
|
+
if translated.blank?
|
33
|
+
raise CommandError.new('Google Translate returned no results. Make sure billing information is set at https://code.google.com/apis/console.')
|
34
|
+
end
|
25
35
|
translated.each_with_index { |translation, i|
|
26
36
|
if (original = list[i][1]) =~ INTERPOLATION_KEY_RE
|
27
37
|
interpolation_keys = original.scan(INTERPOLATION_KEY_RE)
|
@@ -30,4 +40,11 @@ You can obtain the key at https://code.google.com/apis/console.')
|
|
30
40
|
}
|
31
41
|
list.map(&:first).zip(translated)
|
32
42
|
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def warn_missing_api_key
|
47
|
+
$stderr.puts Term::ANSIColor.red Term::ANSIColor.yellow 'Set Google API key via GOOGLE_TRANSLATE_API_KEY environmnet variable or translation.api_key in config/i18n-tasks.yml.
|
48
|
+
Get the key at https://code.google.com/apis/console.'
|
49
|
+
end
|
33
50
|
end
|
data/lib/i18n/tasks/logging.rb
CHANGED
@@ -13,6 +13,10 @@ module I18n::Tasks::Logging
|
|
13
13
|
log_stderr Term::ANSIColor.yellow "i18n-tasks: [WARN] #{message}"
|
14
14
|
end
|
15
15
|
|
16
|
+
def log_error(message)
|
17
|
+
log_stderr Term::ANSIColor.red Term::ANSIColor.bold "i18n-tasks: #{message}"
|
18
|
+
end
|
19
|
+
|
16
20
|
def log_stderr(*args)
|
17
21
|
STDERR.puts *args
|
18
22
|
end
|
@@ -8,7 +8,7 @@ module I18n
|
|
8
8
|
# normalized path
|
9
9
|
path = File.expand_path path
|
10
10
|
(path_root = roots.map { |path| File.expand_path path }.sort.reverse.detect { |root| path.start_with?(root + '/') }) or
|
11
|
-
raise "
|
11
|
+
raise CommandError.new("Error scanning #{path}: cannot resolve relative key \"#{key}\".\nSet relative_roots in config/i18n-tasks.yml (currently #{relative_roots.inspect})")
|
12
12
|
# key prefix based on path
|
13
13
|
prefix = path.gsub(%r(#{path_root}/|(\.[^/]+)*$), '').tr('/', '.').gsub(%r(\._), '.')
|
14
14
|
"#{prefix}#{key}"
|
@@ -16,7 +16,7 @@ module I18n::Tasks::Scanners
|
|
16
16
|
conf[:exclude] = Array(conf[:exclude])
|
17
17
|
else
|
18
18
|
# exclude common binary extensions by default (images and fonts)
|
19
|
-
conf[:exclude] = %w(*.jpg *.png *.gif *.svg *.ico *.eot *.ttf *.woff)
|
19
|
+
conf[:exclude] = %w(*.jpg *.png *.gif *.svg *.ico *.eot *.ttf *.woff *.pdf)
|
20
20
|
end
|
21
21
|
end
|
22
22
|
@record_src_loc = false
|
data/lib/i18n/tasks/version.rb
CHANGED
@@ -4,8 +4,11 @@ require 'i18n/tasks/commands'
|
|
4
4
|
describe 'Google Translation' do
|
5
5
|
include I18n::Tasks::GoogleTranslation
|
6
6
|
|
7
|
-
|
8
|
-
|
7
|
+
tests = [
|
8
|
+
text_test = ['a', "Hello - %{user} O'neill!", "Hola - %{user} O'neill!"],
|
9
|
+
html_test = ['a_html', "Hello - <b>%{user} O'neill</b>", "Hola - <b>%{user} O'neill</b>"]
|
10
|
+
]
|
11
|
+
|
9
12
|
|
10
13
|
if ENV['GOOGLE_TRANSLATE_API_KEY']
|
11
14
|
describe 'real world test' do
|
@@ -13,9 +16,10 @@ describe 'Google Translation' do
|
|
13
16
|
|
14
17
|
context 'API' do
|
15
18
|
it 'works' do
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
+
# Just one test with all the cases to lower the Google bill
|
20
|
+
translations = google_translate(
|
21
|
+
tests.map { |t| t[0..1] }, from: :en, to: :es, key: ENV['GOOGLE_TRANSLATE_API_KEY'])
|
22
|
+
expect(translations).to eq(tests.map { |t| [t[0], t[2]] })
|
19
23
|
end
|
20
24
|
end
|
21
25
|
|
@@ -33,9 +37,15 @@ describe 'Google Translation' do
|
|
33
37
|
|
34
38
|
it 'works' do
|
35
39
|
in_test_app_dir do
|
36
|
-
task.data[:en] = build_tree('en' => {
|
40
|
+
task.data[:en] = build_tree('en' => {
|
41
|
+
'common' => {
|
42
|
+
'hello' => text_test[1],
|
43
|
+
'hello_html' => html_test[1]
|
44
|
+
}
|
45
|
+
})
|
37
46
|
cmd.translate_missing
|
38
|
-
expect(task.t('common.hello', 'es')).to eq(
|
47
|
+
expect(task.t('common.hello', 'es')).to eq(text_test[2])
|
48
|
+
expect(task.t('common.hello_html', 'es')).to eq(html_test[2])
|
39
49
|
end
|
40
50
|
end
|
41
51
|
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.4.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- glebm
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-06-
|
11
|
+
date: 2014-06-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: erubis
|
@@ -206,6 +206,7 @@ files:
|
|
206
206
|
- i18n-tasks.gemspec
|
207
207
|
- lib/i18n/tasks.rb
|
208
208
|
- lib/i18n/tasks/base_task.rb
|
209
|
+
- lib/i18n/tasks/command_error.rb
|
209
210
|
- lib/i18n/tasks/commands.rb
|
210
211
|
- lib/i18n/tasks/commands_base.rb
|
211
212
|
- lib/i18n/tasks/configuration.rb
|