i18n-migrations 1.1.4 → 1.1.5
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/.i18n-migrations.default.yml +9 -0
- data/.travis.yml +1 -2
- data/Rakefile +9 -0
- data/lib/i18n/migrations/config.rb +17 -1
- data/lib/i18n/migrations/crowd_translate_client.rb +1 -0
- data/lib/i18n/migrations/google_translate_dictionary.rb +6 -2
- data/lib/i18n/migrations/locale.rb +1 -0
- data/lib/i18n/migrations/migration_factory.rb +1 -0
- data/lib/i18n/migrations/migrator.rb +16 -13
- data/lib/i18n/migrations/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b28ece541b9bbbaeb46aa30e606571ee8a8d4126ee76b8950692c23677fe8eb2
|
4
|
+
data.tar.gz: 5692f437d5e61bfc8dd758335c5f3b3d27c910b2a1336eb95b1e100ab65fe7bf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4daa370126c01254c4d436120247f018eb32218e6ba9ee655d09eeaf0e00dc252949d66e160806c8304b878dbb0dd9bba3d1a8d1daa585b00c895066ca89d086
|
7
|
+
data.tar.gz: 7086d6183999b34bed8507a7b5596dfcb6b247cb813352927f0721fd03ba1bb440cb4c97633ae63d8f1bfec85b579af5271ab4e005ba1edbb0bb4390c20782ae
|
@@ -4,6 +4,15 @@ migration_dir: i18n/migrate
|
|
4
4
|
# this is where your locale files will live (en.yml, es.yml, etc). it will be relative to your config file
|
5
5
|
locales_dir: config/locales
|
6
6
|
|
7
|
+
# number of threads to concurrently perform migration operations for locales (optional)
|
8
|
+
# concurrency: 4
|
9
|
+
|
10
|
+
# number of threads to concurrently perform push operation for locales (optional)
|
11
|
+
# push_concurrency: 4
|
12
|
+
|
13
|
+
# seconds to wait time between push operations per thread, can be used to avoid API throttling (optional)
|
14
|
+
# wait_seconds: 0
|
15
|
+
|
7
16
|
# this is the locale you will be translating from
|
8
17
|
main_locale: en
|
9
18
|
|
data/.travis.yml
CHANGED
data/Rakefile
CHANGED
@@ -4,6 +4,8 @@ module I18n
|
|
4
4
|
module Migrations
|
5
5
|
class Config
|
6
6
|
CONFIG_FILE_NAME = '.i18n-migrations.yml'
|
7
|
+
DEFAULT_CONCURRENCY = 4
|
8
|
+
DEFAULT_WAIT_SECONDS = 0
|
7
9
|
|
8
10
|
def initialize(config_file_name = CONFIG_FILE_NAME)
|
9
11
|
@config_file_name = config_file_name
|
@@ -43,6 +45,18 @@ module I18n
|
|
43
45
|
get_value(:google_translate_api_key)
|
44
46
|
end
|
45
47
|
|
48
|
+
def concurrency
|
49
|
+
get_value(:concurrency, DEFAULT_CONCURRENCY)
|
50
|
+
end
|
51
|
+
|
52
|
+
def push_concurrency
|
53
|
+
get_value(:push_concurrency, concurrency)
|
54
|
+
end
|
55
|
+
|
56
|
+
def wait_seconds
|
57
|
+
get_value(:wait_seconds, DEFAULT_WAIT_SECONDS)
|
58
|
+
end
|
59
|
+
|
46
60
|
def read!
|
47
61
|
yaml_file = find_config_file(@config_file_name)
|
48
62
|
unless yaml_file
|
@@ -72,7 +86,7 @@ module I18n
|
|
72
86
|
|
73
87
|
private
|
74
88
|
|
75
|
-
def get_value(key)
|
89
|
+
def get_value(key, default = nil)
|
76
90
|
if key.is_a?(Array)
|
77
91
|
value = @config
|
78
92
|
key.each do |key_part|
|
@@ -85,6 +99,8 @@ module I18n
|
|
85
99
|
value
|
86
100
|
elsif @config.has_key?(key.to_s)
|
87
101
|
@config[key.to_s]
|
102
|
+
elsif default.present?
|
103
|
+
default
|
88
104
|
else
|
89
105
|
raise ArgumentError, "You must have defined #{key} in #{@root_dir}/#{@config_file_name}"
|
90
106
|
end
|
@@ -1,4 +1,5 @@
|
|
1
|
-
require '
|
1
|
+
require 'faraday'
|
2
|
+
require 'active_support/core_ext/object'
|
2
3
|
|
3
4
|
module I18n
|
4
5
|
module Migrations
|
@@ -141,7 +142,10 @@ module I18n
|
|
141
142
|
q: q }
|
142
143
|
url = 'https://www.googleapis.com/language/translate/v2'
|
143
144
|
begin
|
144
|
-
|
145
|
+
Faraday.get(url) do |req|
|
146
|
+
req.headers['Content-Type'] = 'application/json'
|
147
|
+
req.params = params
|
148
|
+
end
|
145
149
|
rescue Exception
|
146
150
|
puts "Google Translate Error: #{$!.message}"
|
147
151
|
puts " #{url}?#{params.map { |k, v| [k, URI.escape(v.to_s)].join('=') }.join('&')}"
|
@@ -11,8 +11,6 @@ require 'i18n/migrations/locale'
|
|
11
11
|
require 'i18n/migrations/migration_factory'
|
12
12
|
require 'i18n/migrations/crowd_translate_client'
|
13
13
|
|
14
|
-
CONCURRENT_THREADS = 3
|
15
|
-
|
16
14
|
# this class knows how to do all the things the cli needs done.
|
17
15
|
# it mostly delegates to locale to do it, often asking multiple locales to do the same thing
|
18
16
|
module I18n
|
@@ -84,7 +82,7 @@ end
|
|
84
82
|
end
|
85
83
|
|
86
84
|
def push(locale_or_all, force = false)
|
87
|
-
each_locale(locale_or_all) do |locale|
|
85
|
+
each_locale(locale_or_all, concurrency: config.push_concurrency) do |locale|
|
88
86
|
next if locale.main_locale?
|
89
87
|
sheet = get_google_spreadsheet(locale.name)
|
90
88
|
unless force
|
@@ -92,7 +90,7 @@ end
|
|
92
90
|
migrate(locale.name)
|
93
91
|
end
|
94
92
|
locale.push(sheet)
|
95
|
-
|
93
|
+
wait
|
96
94
|
end
|
97
95
|
end
|
98
96
|
|
@@ -130,13 +128,12 @@ end
|
|
130
128
|
end
|
131
129
|
end
|
132
130
|
|
133
|
-
private
|
134
|
-
|
135
|
-
def each_locale(name = 'all', async: true)
|
131
|
+
private def each_locale(name = 'all', async: true, concurrency: config.concurrency)
|
136
132
|
locale_names = name == 'all' ? all_locale_names : [name]
|
137
133
|
|
134
|
+
puts "Using #{concurrency} concurrency"
|
138
135
|
if async
|
139
|
-
locale_names.each_slice(
|
136
|
+
locale_names.each_slice(concurrency) do |some_locale_names|
|
140
137
|
threads = some_locale_names.map do |l|
|
141
138
|
locale = locale_for(l)
|
142
139
|
Thread.new { yield locale }
|
@@ -150,31 +147,37 @@ end
|
|
150
147
|
end
|
151
148
|
end
|
152
149
|
|
153
|
-
def all_locale_names
|
150
|
+
private def all_locale_names
|
154
151
|
[config.main_locale] + config.other_locales
|
155
152
|
end
|
156
153
|
|
157
|
-
def get_google_spreadsheet(locale)
|
154
|
+
private def get_google_spreadsheet(locale)
|
158
155
|
GoogleSpreadsheet.new(locale,
|
159
156
|
config.google_spreadsheet(locale),
|
160
157
|
config.google_service_account_key_path).sheet
|
161
158
|
end
|
162
159
|
|
163
|
-
def new_dictionary(locale)
|
160
|
+
private def new_dictionary(locale)
|
164
161
|
GoogleTranslateDictionary.new(from_locale: config.main_locale,
|
165
162
|
to_locale: locale,
|
166
163
|
key: config.google_translate_api_key,
|
167
164
|
do_not_translate: config.main_locale == locale ? {} : config.do_not_translate(locale))
|
168
165
|
end
|
169
166
|
|
170
|
-
def new_migrations
|
167
|
+
private def new_migrations
|
171
168
|
MigrationFactory.new(config.migration_dir)
|
172
169
|
end
|
173
170
|
|
174
|
-
def new_crowd_translate_client
|
171
|
+
private def new_crowd_translate_client
|
175
172
|
CrowdTranslateClient.new
|
176
173
|
end
|
177
174
|
|
175
|
+
private def wait
|
176
|
+
if config.wait_seconds > 0
|
177
|
+
puts "Pausing #{config.wait_seconds}s to not run into Google Translate API throttling..."
|
178
|
+
sleep config.wait_seconds
|
179
|
+
end
|
180
|
+
end
|
178
181
|
end
|
179
182
|
end
|
180
183
|
end
|