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: 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