t_t 1.2.2 → 1.3.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/docs/synchronisation.md +13 -0
- data/lib/t_t/i18n_sync.rb +14 -15
- data/lib/t_t/rails.rb +5 -1
- data/readme.md +4 -0
- data/t_t.gemspec +1 -1
- data/tests/lib/i18n_sync_test.rb +5 -5
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: db067791facedb6247eff1b9fed82785f6bd325a
|
4
|
+
data.tar.gz: ced2994ee972a2956c9799e4b1ba8c0e79ff3dc2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cfe464540b1e363083f4bd74e5a647379e7f86f627b3d665f2eeab8f8a1cb90258a1a4ba42fb764707b7edb35b5ad44b4ed2717781e053a716863ac06f4e550b
|
7
|
+
data.tar.gz: 407fc17c5b26f170fbc58235d070e9e4483a63fa65502b4b44d5d39b2cf03658e2e64551cee614ea5dadab34d57cec95387e3b372749d11414340870098162a0
|
data/docs/synchronisation.md
CHANGED
@@ -29,6 +29,19 @@ Rails.application.configure do
|
|
29
29
|
end
|
30
30
|
```
|
31
31
|
|
32
|
+
By default missing translations marked as ":t_t: translations". You can override it:
|
33
|
+
|
34
|
+
```ruby
|
35
|
+
# config/environments/development.rb
|
36
|
+
|
37
|
+
Rails.application.configure do
|
38
|
+
config.tt.sync = { locale: :en, mark: "you custom string" }
|
39
|
+
|
40
|
+
# sets mark to zero width space symbol
|
41
|
+
config.tt.sync = { locale: :en, mark: :space }
|
42
|
+
end
|
43
|
+
```
|
44
|
+
|
32
45
|
Also you can synchronise files without a page reload. Add the next line at the bottom `%rails_root%/Rakefile`:
|
33
46
|
|
34
47
|
```ruby
|
data/lib/t_t/i18n_sync.rb
CHANGED
@@ -3,8 +3,6 @@ require 'yaml'
|
|
3
3
|
|
4
4
|
module TT
|
5
5
|
class I18nSync
|
6
|
-
MARK = ":t_t: "
|
7
|
-
|
8
6
|
module Utils
|
9
7
|
extend self
|
10
8
|
|
@@ -29,11 +27,11 @@ module TT
|
|
29
27
|
end
|
30
28
|
end
|
31
29
|
|
32
|
-
def sync_file(path, locale, standard)
|
30
|
+
def sync_file(path, locale, standard, mark)
|
33
31
|
old_review = {}
|
34
32
|
source = load_file(path, locale) { |content| old_review.merge!(content.fetch('review', {})) }
|
35
33
|
new_review = {}
|
36
|
-
content = { locale => sync_level(standard, source, new_review) }
|
34
|
+
content = { locale => sync_level(standard, source, new_review, mark) }
|
37
35
|
review = old_review.merge(flat_hash(new_review))
|
38
36
|
content['review'] = review unless review.empty?
|
39
37
|
write_file(path, content)
|
@@ -45,19 +43,19 @@ module TT
|
|
45
43
|
|
46
44
|
private
|
47
45
|
|
48
|
-
def sync_level(st_level, source, review)
|
46
|
+
def sync_level(st_level, source, review, mark)
|
49
47
|
level = st_level.inject({}) do |r, (key, st_node)|
|
50
48
|
node = source[key]
|
51
49
|
|
52
50
|
r[key] = case st_node
|
53
51
|
when Hash
|
54
52
|
sub_review = {}
|
55
|
-
sub_level = sync_level(st_node, (node.is_a?(Hash) ? node : {}), sub_review)
|
53
|
+
sub_level = sync_level(st_node, (node.is_a?(Hash) ? node : {}), sub_review, mark)
|
56
54
|
review[key] = sub_review unless sub_review.empty?
|
57
55
|
sub_level
|
58
|
-
when Array then node.is_a?(Array) ? node : st_node.map { |v| "#{
|
56
|
+
when Array then node.is_a?(Array) ? node : st_node.map { |v| "#{ mark }#{ v }" }
|
59
57
|
else
|
60
|
-
node.nil? ? "#{
|
58
|
+
node.nil? ? "#{ mark }#{ st_node }" : node
|
61
59
|
end
|
62
60
|
r
|
63
61
|
end
|
@@ -69,12 +67,13 @@ module TT
|
|
69
67
|
end
|
70
68
|
|
71
69
|
class FileGroup
|
72
|
-
attr_reader :st_locale, :standard, :list
|
70
|
+
attr_reader :st_locale, :standard, :list, :mark
|
73
71
|
|
74
|
-
def initialize(st_locale, standard, list)
|
72
|
+
def initialize(st_locale, standard, list, mark)
|
75
73
|
@st_locale = st_locale
|
76
74
|
@standard = standard
|
77
75
|
@list = list
|
76
|
+
@mark = mark
|
78
77
|
end
|
79
78
|
|
80
79
|
def execute
|
@@ -82,7 +81,7 @@ module TT
|
|
82
81
|
return if defined?(@prev_updated_at) && file_updated_at == @prev_updated_at
|
83
82
|
|
84
83
|
st_source = Utils.load_file(standard, st_locale)
|
85
|
-
list.each { |l, path| Utils.sync_file(path, l, st_source) }
|
84
|
+
list.each { |l, path| Utils.sync_file(path, l, st_source, mark) }
|
86
85
|
|
87
86
|
@prev_updated_at = file_updated_at
|
88
87
|
end
|
@@ -93,8 +92,8 @@ module TT
|
|
93
92
|
Utils.flat_file(standard, st_locale).inject([]) do |list, (k, st_v)|
|
94
93
|
item = flat_list.inject({ st_locale => st_v }) { |r, (l, h)| r.merge!(l => h[k]) }
|
95
94
|
|
96
|
-
if item.any? { |_, v| v.nil? || v.to_s.include?(
|
97
|
-
item.each { |l, v| item[l] = nil if v.to_s.include?(
|
95
|
+
if item.any? { |_, v| v.nil? || v.to_s.include?(mark) }
|
96
|
+
item.each { |l, v| item[l] = nil if v.to_s.include?(mark) }
|
98
97
|
list << item
|
99
98
|
end
|
100
99
|
|
@@ -105,7 +104,7 @@ module TT
|
|
105
104
|
|
106
105
|
attr_reader :checker, :groups
|
107
106
|
|
108
|
-
def initialize(st_locale, files)
|
107
|
+
def initialize(st_locale, files, mark)
|
109
108
|
@groups = []
|
110
109
|
|
111
110
|
files.inject({}) do |r, file|
|
@@ -119,7 +118,7 @@ module TT
|
|
119
118
|
locales = group.keys
|
120
119
|
next unless locales.include?(st_locale) && locales.size > 1
|
121
120
|
list = group.reject { |l, v| l == st_locale }
|
122
|
-
groups << FileGroup.new(st_locale, group[st_locale], list)
|
121
|
+
groups << FileGroup.new(st_locale, group[st_locale], list, mark)
|
123
122
|
end
|
124
123
|
|
125
124
|
@checker = ActiveSupport::FileUpdateChecker.new(groups.map(&:standard)) { execute }
|
data/lib/t_t/rails.rb
CHANGED
@@ -39,14 +39,18 @@ module TT
|
|
39
39
|
|
40
40
|
locale = :en
|
41
41
|
glob = 'config/locales/**/*.yml'
|
42
|
+
mark = ':t_t: '
|
42
43
|
if options.is_a?(Symbol) || options.is_a?(String)
|
43
44
|
locale = options
|
44
45
|
elsif options.is_a?(Hash)
|
45
46
|
locale = options[:locale] if options.has_key?(:locale)
|
46
47
|
glob = options[:glob] if options.has_key?(:glob)
|
48
|
+
if options[:mark]
|
49
|
+
mark = (options[:mark] == :space) ? "\u200B" : options[:mark]
|
50
|
+
end
|
47
51
|
end
|
48
52
|
|
49
|
-
file_sync = ::TT::I18nSync.new(locale.to_s, Dir.glob(glob))
|
53
|
+
file_sync = ::TT::I18nSync.new(locale.to_s, Dir.glob(glob), mark)
|
50
54
|
TT::Rails.sync(file_sync)
|
51
55
|
::Rails.application.reloaders << file_sync.checker
|
52
56
|
ActionDispatch::Reloader.to_prepare { file_sync.checker.execute_if_updated }
|
data/readme.md
CHANGED
@@ -102,6 +102,10 @@ Just add `gem "t_t"` into your Gemfile and run `bundle`.
|
|
102
102
|
Dos-T is tested against Ruby 1.9.3+ & JRuby(1.9+ compatible). If your application uses Ruby on Rails the framework version should be 3.2+
|
103
103
|
|
104
104
|
## Changelog
|
105
|
+
- 1.3.0
|
106
|
+
- Allow specify a custom mark for locale file synchonization
|
107
|
+
- 1.2.2
|
108
|
+
- Fix rails 5 integration
|
105
109
|
- 1.2.0
|
106
110
|
- Deprecate TT::Translator in favour of TT::Base & TT::Rails
|
107
111
|
- Introduce a real-time watcher for [translation file synchronisation](./docs/synchronisation.md)
|
data/t_t.gemspec
CHANGED
data/tests/lib/i18n_sync_test.rb
CHANGED
@@ -8,7 +8,7 @@ describe 'I18n synchronisation' do
|
|
8
8
|
}
|
9
9
|
|
10
10
|
YAML.stub :load_file, store do
|
11
|
-
group = TT::I18nSync::FileGroup.new('en', __FILE__, { 'de' => 'de.yml' })
|
11
|
+
group = TT::I18nSync::FileGroup.new('en', __FILE__, { 'de' => 'de.yml' }, ':t_t: ')
|
12
12
|
expectation = lambda do |path, content|
|
13
13
|
assert_equal path, 'de.yml'
|
14
14
|
assert_equal content, {
|
@@ -35,7 +35,7 @@ describe 'I18n synchronisation' do
|
|
35
35
|
'de' => { 'b' => 'de-b' }
|
36
36
|
}
|
37
37
|
YAML.stub :load_file, store do
|
38
|
-
group = TT::I18nSync::FileGroup.new('de', __FILE__, { 'en' => 'en.yml' })
|
38
|
+
group = TT::I18nSync::FileGroup.new('de', __FILE__, { 'en' => 'en.yml' }, ':t_t: ')
|
39
39
|
expectation = lambda do |path, content|
|
40
40
|
assert_equal path, 'en.yml'
|
41
41
|
assert_equal content['en'], { 'b' => 'b' }
|
@@ -48,7 +48,7 @@ describe 'I18n synchronisation' do
|
|
48
48
|
end
|
49
49
|
|
50
50
|
it 'combines files into a full groups' do
|
51
|
-
groupMock = Struct.new(:locale, :standard, :list) do
|
51
|
+
groupMock = Struct.new(:locale, :standard, :list, :mark) do
|
52
52
|
def execute
|
53
53
|
end
|
54
54
|
end
|
@@ -60,7 +60,7 @@ describe 'I18n synchronisation' do
|
|
60
60
|
'config/locales/es.yml', 'config/locales/views.en-US.yml', 'config/locales/models/orm.de.yml',
|
61
61
|
'config/locales/en-US.yml', 'config/locales/views.es.yml', 'config/locales/models/orm.es.yml',
|
62
62
|
'config/locales/fix.en-US.yml', 'config/locales/skip.de.yml'
|
63
|
-
])
|
63
|
+
], ':t_t: ')
|
64
64
|
|
65
65
|
assert_equal 3, sync.groups.length
|
66
66
|
|
@@ -81,7 +81,7 @@ describe 'I18n synchronisation' do
|
|
81
81
|
'de' => { 'a' => ':t_t: a', 'b' => 'de-b' }
|
82
82
|
}
|
83
83
|
YAML.stub :load_file, store do
|
84
|
-
sync = TT::I18nSync.new('en', ['en.yml', 'de.yml'])
|
84
|
+
sync = TT::I18nSync.new('en', ['en.yml', 'de.yml'], ':t_t: ')
|
85
85
|
result = sync.missed
|
86
86
|
|
87
87
|
assert_equal 1, result.size
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: t_t
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sergey Pchelintsev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-09-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: i18n
|