i18n-migrations 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 531a223b03e63c6f9d34aaf078bb147680e52750
4
- data.tar.gz: ca7e31d8322a7a7adf7d3ccefec0e3819707f22f
3
+ metadata.gz: 984613105aadaa3012093105cf6b8b7eee28fabb
4
+ data.tar.gz: 9afd01228bdf3753fcd03e69ab14ba0eb983be02
5
5
  SHA512:
6
- metadata.gz: ae393c640c0e3310c84c8a048cbef260b5dc9f21b494730fc97c6040992f800ad9b80d2ea4b9aeabf876b0f4956fedac9fce2a6be1457650f0eca0d7e6f6f35f
7
- data.tar.gz: c530be9f465eea4c245932e339e9bc19d3b2edf63a04658758d3dfb06f7e45ef165643da9ad5dffd2befebd7b6281b458ca643ab5deef55af911d010b69138fb
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, source: @from_locale, target: @to_locale, q: term }
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
- VARIABLE_STRING = /%\{[^\}]+\}/
31
+ VARIABLE_STRING_REGEX = /%\{[^\}]+\}/
32
+ HTML_ESCAPE_REGEX = /&[A-Za-z#0-9]+;/
33
+ HTML_ESCAPES = {
34
+ ''' => "'",
35
+ '&' => '&',
36
+ '&lt;' => '<',
37
+ '&gt;' => '>',
38
+ '&quot;' => '"',
39
+ '&nbsp;' => ' ',
40
+ '&#8594;' => '→',
41
+ '&#8592;' => '←',
42
+ '&hellip;' => '…',
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(VARIABLE_STRING)
47
- after_variables = after.scan(VARIABLE_STRING)
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
@@ -93,7 +93,7 @@ module I18n
93
93
  if overrides[@locale.to_sym]
94
94
  @data[key] = overrides[@locale.to_sym]
95
95
  else
96
- @data[key], @notes[key] = @dictionary.lookup(term)
96
+ @data[key], @notes[key] = @dictionary.lookup(term, key: key)
97
97
  end
98
98
  end
99
99
  end
@@ -1,5 +1,5 @@
1
1
  module I18n
2
2
  module Migrations
3
- VERSION = "0.2.1"
3
+ VERSION = "0.2.2"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: i18n-migrations
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Lightsmith