tolk 3.1.0 → 3.2.0
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/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
|