tolk 3.1.0 → 3.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/tolk/config.rb +5 -0
- data/lib/tolk/import.rb +12 -12
- data/lib/tolk/sync.rb +22 -7
- data/lib/tolk/version.rb +1 -1
- metadata +7 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b8f6680d4fdb375f50c14ea1725d32cf73c395b3825578f9e2f25b1ce6e593d7
|
4
|
+
data.tar.gz: b07c28ea6939450e7f46947d894db437b65142684994d47e6dfa8527356b4cae
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '0980d8b70e512963c7be3ca8af3c5519b482370a8e5510f00606e6f93e066218583f19627f02df641dffba02476f1ed185ba63f2986e66a7c278c7bd744f607d'
|
7
|
+
data.tar.gz: c329d8a59897919e8a652c314115514d3f532cd6b23067e911f76651fcc5121ffe9eba4034923ab4504c8ee8ad0900f043f20ec1a5240938e2da7d2f5663b412
|
data/lib/tolk/config.rb
CHANGED
@@ -30,6 +30,9 @@ module Tolk
|
|
30
30
|
# in the same context than the rest of your app
|
31
31
|
attr_accessor :base_controller
|
32
32
|
|
33
|
+
# Ignore specific keys
|
34
|
+
attr_accessor :ignore_keys
|
35
|
+
|
33
36
|
def reset
|
34
37
|
@exclude_gems_token = false
|
35
38
|
|
@@ -89,6 +92,8 @@ module Tolk
|
|
89
92
|
@yaml_line_width = Psych::Handler::OPTIONS.line_width # Psych::Handler::DumperOptions uses 0 as "default" for unset
|
90
93
|
|
91
94
|
@base_controller = 'ActionController::Base'
|
95
|
+
|
96
|
+
@ignore_keys = []
|
92
97
|
end
|
93
98
|
end
|
94
99
|
|
data/lib/tolk/import.rb
CHANGED
@@ -24,27 +24,27 @@ module Tolk
|
|
24
24
|
data = locale.read_locale_file
|
25
25
|
return unless data
|
26
26
|
|
27
|
-
|
27
|
+
phrases_by_key = Tolk::Phrase.all.index_by(&:key)
|
28
|
+
translated_phrase_ids = Set.new(locale.translations.pluck(:phrase_id))
|
28
29
|
count = 0
|
29
30
|
|
30
31
|
data.each do |key, value|
|
31
|
-
phrase =
|
32
|
-
|
33
|
-
if phrase
|
34
|
-
translation = locale.translations.new(:text => value, :phrase => phrase)
|
35
|
-
if translation.save
|
36
|
-
count = count + 1
|
37
|
-
elsif translation.errors[:variables].present?
|
38
|
-
puts "[WARN] Key '#{key}' from '#{locale_name}.yml' could not be saved: #{translation.errors[:variables].first}"
|
39
|
-
end
|
40
|
-
else
|
32
|
+
phrase = phrases_by_key[key]
|
33
|
+
unless phrase
|
41
34
|
puts "[ERROR] Key '#{key}' was found in '#{locale_name}.yml' but #{Tolk::Locale.primary_language_name} translation is missing"
|
35
|
+
next
|
36
|
+
end
|
37
|
+
next if translated_phrase_ids.include?(phrase.id)
|
38
|
+
translation = locale.translations.new(:text => value, :phrase => phrase)
|
39
|
+
if translation.save
|
40
|
+
count = count + 1
|
41
|
+
elsif translation.errors[:variables].present?
|
42
|
+
puts "[WARN] Key '#{key}' from '#{locale_name}.yml' could not be saved: #{translation.errors[:variables].first}"
|
42
43
|
end
|
43
44
|
end
|
44
45
|
|
45
46
|
puts "[INFO] Imported #{count} keys from #{locale_name}.yml"
|
46
47
|
end
|
47
|
-
|
48
48
|
end
|
49
49
|
|
50
50
|
def read_locale_file
|
data/lib/tolk/sync.rb
CHANGED
@@ -30,7 +30,8 @@ module Tolk
|
|
30
30
|
I18n.backend.send :init_translations unless I18n.backend.initialized? # force load
|
31
31
|
end
|
32
32
|
translations = flat_hash(I18n.backend.send(:translations)[primary_locale.name.to_sym])
|
33
|
-
filter_out_i18n_keys(translations.merge(read_primary_locale_file))
|
33
|
+
filtered = filter_out_i18n_keys(translations.merge(read_primary_locale_file))
|
34
|
+
filter_out_ignored_keys(filtered)
|
34
35
|
end
|
35
36
|
|
36
37
|
def read_primary_locale_file
|
@@ -62,30 +63,44 @@ module Tolk
|
|
62
63
|
primary_locale = self.primary_locale
|
63
64
|
|
64
65
|
# Handle deleted phrases
|
65
|
-
|
66
|
+
Tolk::Phrase.where.not(:key => translations.keys).destroy_all
|
66
67
|
|
67
|
-
|
68
|
+
phrases_by_key = Tolk::Phrase.all.index_by(&:key)
|
69
|
+
primary_translation_by_phrase_id = primary_locale.translations.index_by(&:phrase_id)
|
68
70
|
|
69
71
|
translations.each do |key, value|
|
70
72
|
next if value.is_a?(Proc)
|
71
73
|
# Create phrase and primary translation if missing
|
72
|
-
|
73
|
-
translation =
|
74
|
+
phrase = phrases_by_key[key] || Tolk::Phrase.create!(:key => key)
|
75
|
+
translation = primary_translation_by_phrase_id[phrase.id]
|
76
|
+
translation ||= primary_locale.translations.build(:phrase => phrase)
|
74
77
|
translation.text = value
|
75
78
|
|
76
79
|
if translation.changed? && !translation.new_record?
|
77
80
|
# Set the primary updated flag if the primary translation has changed and it is not a new record.
|
78
|
-
|
81
|
+
phrase.translations.where.not(:locale_id => primary_locale.id).update_all({ :primary_updated => true })
|
79
82
|
end
|
80
83
|
|
81
84
|
translation.primary = true
|
82
|
-
translation.save!
|
85
|
+
translation.save! if translation.changed?
|
83
86
|
end
|
84
87
|
end
|
85
88
|
|
86
89
|
def filter_out_i18n_keys(flat_hash)
|
87
90
|
flat_hash.reject { |key, value| key.starts_with? "i18n" }
|
88
91
|
end
|
92
|
+
|
93
|
+
def filter_out_ignored_keys(flat_hash)
|
94
|
+
ignored = Tolk.config.ignore_keys
|
95
|
+
|
96
|
+
return flat_hash unless ignored.any?
|
97
|
+
|
98
|
+
ignored_escaped = ignored.map { |key| Regexp.escape(key) }
|
99
|
+
|
100
|
+
regexp = Regexp.new(/\A#{ignored_escaped.join('|')}/)
|
101
|
+
|
102
|
+
flat_hash.reject { |key, _| regexp === key }
|
103
|
+
end
|
89
104
|
end
|
90
105
|
end
|
91
106
|
end
|
data/lib/tolk/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tolk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Heinemeier Hansson
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date:
|
15
|
+
date: 2019-03-25 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: rails
|
@@ -74,16 +74,16 @@ dependencies:
|
|
74
74
|
name: sqlite3
|
75
75
|
requirement: !ruby/object:Gem::Requirement
|
76
76
|
requirements:
|
77
|
-
- -
|
77
|
+
- - '='
|
78
78
|
- !ruby/object:Gem::Version
|
79
|
-
version:
|
79
|
+
version: 1.3.13
|
80
80
|
type: :development
|
81
81
|
prerelease: false
|
82
82
|
version_requirements: !ruby/object:Gem::Requirement
|
83
83
|
requirements:
|
84
|
-
- -
|
84
|
+
- - '='
|
85
85
|
- !ruby/object:Gem::Version
|
86
|
-
version:
|
86
|
+
version: 1.3.13
|
87
87
|
- !ruby/object:Gem::Dependency
|
88
88
|
name: mocha
|
89
89
|
requirement: !ruby/object:Gem::Requirement
|
@@ -197,8 +197,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
197
197
|
- !ruby/object:Gem::Version
|
198
198
|
version: '0'
|
199
199
|
requirements: []
|
200
|
-
|
201
|
-
rubygems_version: 2.7.7
|
200
|
+
rubygems_version: 3.0.3
|
202
201
|
signing_key:
|
203
202
|
specification_version: 4
|
204
203
|
summary: Rails engine providing web interface for managing i18n yaml files
|