i18n-migrations 0.2.1 → 0.2.2
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
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 984613105aadaa3012093105cf6b8b7eee28fabb
|
4
|
+
data.tar.gz: 9afd01228bdf3753fcd03e69ab14ba0eb983be02
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6445cac5c4818520ed0c95955012a53ddd3f51fa7af55374b8c06613b38b459d9c01fdd44819f62e68fee551eb88f9a172dbed626bfb7b407c1b20f3ed24a4aa
|
7
|
+
data.tar.gz: 4aeb4db1c7a99c94e97c9aeb1fd3d3f14e7f2ccd45df3a09be51999bb2cfc5e8a6bd0c53dba21abf95608087efe189176bf0fc95a9e37478925d20e0e830dfb1
|
@@ -7,25 +7,43 @@ module I18n
|
|
7
7
|
@from_locale, @to_locale, @key, @do_not_translate = from_locale, to_locale, key, do_not_translate
|
8
8
|
end
|
9
9
|
|
10
|
+
# key is provided so we can figure out if this is text or html
|
10
11
|
# returns [translated term, notes]
|
11
|
-
def lookup(term)
|
12
|
+
def lookup(term, key: nil)
|
12
13
|
return [term, ''] if @from_locale == @to_locale
|
13
14
|
|
14
15
|
response = RestClient.get 'https://www.googleapis.com/language/translate/v2', {
|
15
16
|
accept: :json,
|
16
|
-
params: { key: @key,
|
17
|
+
params: { key: @key,
|
18
|
+
source: @from_locale,
|
19
|
+
target: @to_locale,
|
20
|
+
format: format(key),
|
21
|
+
q: term }
|
17
22
|
}
|
18
23
|
translated_term = JSON.parse(response.body)['data']['translations'].first['translatedText']
|
19
|
-
translated_term, errors = fix(term, translated_term)
|
24
|
+
translated_term, errors = fix(term, translated_term, key: key)
|
20
25
|
unless errors.empty?
|
21
26
|
STDERR.puts "'#{term}' => '#{translated_term}'\n#{errors.join(', ').red}"
|
22
27
|
end
|
23
28
|
[translated_term, (errors.map { |e| "[error: #{e}]" } + ['[autotranslated]']).join("\n")]
|
24
29
|
end
|
25
30
|
|
26
|
-
|
31
|
+
VARIABLE_STRING_REGEX = /%\{[^\}]+\}/
|
32
|
+
HTML_ESCAPE_REGEX = /&[A-Za-z#0-9]+;/
|
33
|
+
HTML_ESCAPES = {
|
34
|
+
''' => "'",
|
35
|
+
'&' => '&',
|
36
|
+
'<' => '<',
|
37
|
+
'>' => '>',
|
38
|
+
'"' => '"',
|
39
|
+
' ' => ' ',
|
40
|
+
'→' => '→',
|
41
|
+
'←' => '←',
|
42
|
+
'…' => '…',
|
43
|
+
}
|
27
44
|
# returns updated after term, errors
|
28
|
-
def fix(before, after)
|
45
|
+
def fix(before, after, key: nil)
|
46
|
+
is_html = format(key) == :html
|
29
47
|
errors = []
|
30
48
|
|
31
49
|
# do not translate
|
@@ -43,8 +61,8 @@ module I18n
|
|
43
61
|
after = after.gsub('% {', '%{')
|
44
62
|
|
45
63
|
# match up variables, should have same variable in before and after
|
46
|
-
before_variables = before.scan(
|
47
|
-
after_variables = after.scan(
|
64
|
+
before_variables = before.scan(VARIABLE_STRING_REGEX)
|
65
|
+
after_variables = after.scan(VARIABLE_STRING_REGEX)
|
48
66
|
|
49
67
|
if before_variables.sort == after_variables.sort
|
50
68
|
# we have all of our variables, let's make sure spacing before them is correct
|
@@ -76,11 +94,33 @@ module I18n
|
|
76
94
|
end
|
77
95
|
end
|
78
96
|
|
97
|
+
# fix html escapes
|
98
|
+
escapes = after.scan(HTML_ESCAPE_REGEX)
|
99
|
+
if escapes.present?
|
100
|
+
before_escapes = before.scan(HTML_ESCAPE_REGEX)
|
101
|
+
escapes.each do |escape|
|
102
|
+
if is_html && before_escapes.include?(escape)
|
103
|
+
# leave it
|
104
|
+
else
|
105
|
+
if (replace_with = HTML_ESCAPES[escape])
|
106
|
+
after = after.sub(escape, replace_with)
|
107
|
+
else
|
108
|
+
errors << "Don't know how to clean up #{escape}"
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
|
79
115
|
[after, errors]
|
80
116
|
end
|
81
117
|
|
82
118
|
private
|
83
119
|
|
120
|
+
def format(key)
|
121
|
+
key&.index('_html') ? :html : :text
|
122
|
+
end
|
123
|
+
|
84
124
|
def find_included_translation(after, bad_translations)
|
85
125
|
bad_translations.each do |translation|
|
86
126
|
return translation if after.include?(translation)
|
@@ -20,7 +20,7 @@ module I18n
|
|
20
20
|
main_data = main_locale.read_data
|
21
21
|
main_data.each do |key, main_term|
|
22
22
|
old_term = data[key]
|
23
|
-
new_term, errors = @dictionary.fix(main_term, old_term)
|
23
|
+
new_term, errors = @dictionary.fix(main_term, old_term, key: key)
|
24
24
|
if new_term != old_term
|
25
25
|
data[key] = new_term
|
26
26
|
puts "#{"Fix".green} #{key.green}:"
|
@@ -120,7 +120,7 @@ module I18n
|
|
120
120
|
count = 0
|
121
121
|
main_data = main_locale.read_data
|
122
122
|
main_data.each do |key, term|
|
123
|
-
new_data[key], new_notes[key] = @dictionary.lookup(term)
|
123
|
+
new_data[key], new_notes[key] = @dictionary.lookup(term, key: key)
|
124
124
|
print '.'.green
|
125
125
|
break if limit && limit < (count += 1)
|
126
126
|
end
|