yaml-translator 0.4.0 → 0.5.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/.travis.yml +0 -1
- data/Gemfile.lock +1 -1
- data/README.md +3 -3
- data/example/locale.rb +13 -0
- data/example/new.en.yml +3 -0
- data/lib/yaml-translator.rb +9 -0
- data/lib/yaml-translator/locale.rb +12 -20
- data/lib/yaml-translator/structure.rb +5 -0
- data/lib/yaml-translator/structure/single_key.rb +27 -0
- data/lib/yaml-translator/structure/tree.rb +35 -0
- data/lib/yaml-translator/translator.rb +3 -28
- data/lib/yaml-translator/version.rb +1 -1
- data/spec/yaml-translator/locale_spec.rb +5 -5
- data/spec/yaml-translator/structure/single_key.rb +8 -0
- data/spec/yaml-translator/structure/tree_spec.rb +8 -0
- metadata +11 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5387a0e1e5e1482632320ccf25455514f2c1fc96
|
4
|
+
data.tar.gz: ca5121bb2cae23d58858993569ec76685b9df661
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e10f2395ce53bdb9460a04e40c5e7ba21208cb15f2118f7c4575530fccd3df87cc37be0f85d558fba212edd07faf2a3d22219efc194efb9b5e01c93f77219516
|
7
|
+
data.tar.gz: 16cf23202f4c212aaad45812cc53d55ca948ae501ff1596b82788c90f1515ef061e0f7832084cfc354a57ae7e073f167f3668dcca67bac1f8ef62b4a0da0aa5e
|
data/.travis.yml
CHANGED
@@ -2,7 +2,6 @@ language: ruby
|
|
2
2
|
env:
|
3
3
|
secure: "OPbJVv+xHdc56rzLDDpBiPsVtQ6Gmc7k4373BaZArjJbB1Dx34FHBNG0UoyF2XUKXVRs5TWgwbs9M4MDM9U13hv2VozT8/RaOkH48d2eHQ93vJX4P8vfR68AA73TV+LtJ7ktlkPp0JLJ54yfHVmANyOxRv2MIDSGGxg+m/FdaTssded4v0YF2dQSKCwfokwyVSCtAx8dsP0Q5UbOYKRDyjn5MR8xZWWiB9wmxuyTnhtKSyGASb+hO4aHll7pTYhebz1NViQhz0vB8BBP5AWdoi5LsToHi2obhu3+5f18pEfqtraJQJ2wa8ix3VaTuL5z1FHfxw2Etq9Eooa3sbrxvQEisSX+JpCPrxBNy4S4GcpXcc8Zg4b2IhLIww6EpDnOxod85N6Q1EzYvo5URxdM5bYVBNuFLjeVg8BSFGGYfebR/Xx4Zh5vDVWJlfkc7fbpGV4IGKUMHhTVSyT19TwTnJnKcahVZO9lChZFPj+SkTFp+SsdReJg3xnIOr+AuPuxqn2n9PPMMyvQng3VxWog7a2SP8Db6VTY5A1JPpOJXVEsNkHwqiUuE3nNLp6WFIXbYIzmJyYFmm5ij7aoaK/gcvDNHoGz/cPZrW+juIXKJC24Qk8hXrZPzEO54+e+M6qsR3p8TlpN5TSxPoeO0hET2cMX0xHFOHU+UnFDx1oTC0c="
|
4
4
|
rvm:
|
5
|
-
- 2.0.0
|
6
5
|
- 2.1
|
7
6
|
- 2.2
|
8
7
|
- 2.3.0
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -17,7 +17,7 @@ dir = File.dirname(__FILE__)
|
|
17
17
|
adapter = ::YamlTranslator::Adapters::GoogleTranslateAdapter.new(ENV['GOOGLE_TRANSLATE_API_KEY'])
|
18
18
|
translator = ::YamlTranslator::Translator.new(adapter)
|
19
19
|
|
20
|
-
english_locale = ::YamlTranslator
|
20
|
+
english_locale = ::YamlTranslator.load_file("#{dir}/en.yml")
|
21
21
|
japanese_locale = english_locale.translate(translator, to: :ja)
|
22
22
|
|
23
23
|
p japanese_locale.to_s # convert to japanese locale yaml format
|
@@ -37,8 +37,8 @@ The method of translating the difference is as follows.
|
|
37
37
|
adapter = ::YamlTranslator::Adapters::GoogleTranslateAdapter.new(ENV['GOOGLE_TRANSLATE_API_KEY'])
|
38
38
|
translator = ::YamlTranslator::Translator.new(adapter)
|
39
39
|
|
40
|
-
before_english_locale = ::YamlTranslator
|
41
|
-
after_english_locale = ::YamlTranslator
|
40
|
+
before_english_locale = ::YamlTranslator.load_file("/path/to/before/en.yml")
|
41
|
+
after_english_locale = ::YamlTranslator.load_file("/path/to/after/en.yml")
|
42
42
|
|
43
43
|
diff_locale = before_english_locale.diff(after_english_locale)
|
44
44
|
diff_japanese_locale = diff_locale.translate(translator, to: :ja)
|
data/example/locale.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
|
2
|
+
|
3
|
+
require 'yaml'
|
4
|
+
require 'yaml-translator'
|
5
|
+
|
6
|
+
dir = File.dirname(__FILE__)
|
7
|
+
english_locale1 = ::YamlTranslator.load_file("#{dir}/en.yml")
|
8
|
+
english_locale2 = ::YamlTranslator.load_file("#{dir}/new.en.yml")
|
9
|
+
|
10
|
+
diff_locale = english_locale1.diff(english_locale2)
|
11
|
+
|
12
|
+
merged_locale = english_locale1.merge(diff_locale)
|
13
|
+
merged_locale.save_to("/tmp")
|
data/example/new.en.yml
ADDED
data/lib/yaml-translator.rb
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
require 'yaml-translator/version'
|
2
|
+
require 'yaml-translator/structure'
|
2
3
|
require 'yaml-translator/locale'
|
3
4
|
require 'yaml-translator/key_path'
|
4
5
|
require 'yaml-translator/translator'
|
5
6
|
require 'yaml-translator/adapters'
|
7
|
+
|
8
|
+
module YamlTranslator
|
9
|
+
class << self
|
10
|
+
def load_file(file)
|
11
|
+
Locale.load_file(file)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -3,6 +3,7 @@ require 'diff/lcs'
|
|
3
3
|
|
4
4
|
module YamlTranslator
|
5
5
|
class Locale
|
6
|
+
|
6
7
|
attr_reader :lang, :values
|
7
8
|
|
8
9
|
def initialize(values, lang)
|
@@ -15,15 +16,21 @@ module YamlTranslator
|
|
15
16
|
end
|
16
17
|
|
17
18
|
def diff(other)
|
18
|
-
before_seq =
|
19
|
-
after_seq = other.
|
19
|
+
before_seq = to_single_key_hash.map { |k, v| "#{k}: #{v}" }
|
20
|
+
after_seq = other.to_single_key_hash.map { |k, v| "#{k}: #{v}" }
|
20
21
|
diffs = Diff::LCS.diff(before_seq, after_seq).flatten.map do |operation|
|
21
22
|
type, position, element = *operation
|
22
23
|
next if type == '-'
|
23
24
|
key, text = *element.split(':')
|
24
25
|
[key, text.strip]
|
25
26
|
end
|
26
|
-
|
27
|
+
single_key_hash = Hash[diffs.compact]
|
28
|
+
Locale.new(single_key_hash.to_tree, lang)
|
29
|
+
end
|
30
|
+
|
31
|
+
def merge(locale)
|
32
|
+
merged = flatten_hash.merge(locale.flatten_hash)
|
33
|
+
Locale.new(merged.to_tree, lang)
|
27
34
|
end
|
28
35
|
|
29
36
|
def save(dir=Dir.pwd)
|
@@ -34,8 +41,8 @@ module YamlTranslator
|
|
34
41
|
save(dir)
|
35
42
|
end
|
36
43
|
|
37
|
-
def
|
38
|
-
|
44
|
+
def to_single_key_hash
|
45
|
+
values.to_single_key
|
39
46
|
end
|
40
47
|
|
41
48
|
def to_s
|
@@ -52,21 +59,6 @@ module YamlTranslator
|
|
52
59
|
|
53
60
|
private
|
54
61
|
|
55
|
-
# Covert to a flatten hash
|
56
|
-
def flatten(values={}, path=KeyPath.new)
|
57
|
-
result = {}
|
58
|
-
values.each_with_index do |(i, v)|
|
59
|
-
path.move_to(i)
|
60
|
-
if v.is_a?(Hash)
|
61
|
-
result.merge!(flatten(v, path))
|
62
|
-
else
|
63
|
-
result[path.to_s] = v
|
64
|
-
end
|
65
|
-
path.leave
|
66
|
-
end
|
67
|
-
result
|
68
|
-
end
|
69
|
-
|
70
62
|
def write_file(file_path)
|
71
63
|
File.write(file_path, to_s)
|
72
64
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module YamlTranslator
|
2
|
+
module Structure
|
3
|
+
module SingleKey
|
4
|
+
# Covert to a flatten hash
|
5
|
+
def to_single_key
|
6
|
+
compact_of(self, KeyPath.new)
|
7
|
+
end
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
# Covert to a flatten hash
|
12
|
+
def compact_of(values={}, path=KeyPath.new)
|
13
|
+
result = {}
|
14
|
+
values.each_with_index do |(i, v)|
|
15
|
+
path.move_to(i)
|
16
|
+
if v.is_a?(Hash)
|
17
|
+
result.merge!(compact_of(v, path))
|
18
|
+
else
|
19
|
+
result[path.to_s] = v
|
20
|
+
end
|
21
|
+
path.leave
|
22
|
+
end
|
23
|
+
result
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module YamlTranslator
|
2
|
+
module Structure
|
3
|
+
module Tree
|
4
|
+
def to_tree
|
5
|
+
tree_of(self)
|
6
|
+
end
|
7
|
+
|
8
|
+
private
|
9
|
+
|
10
|
+
# Returning the flattened structure to the tree structure
|
11
|
+
#
|
12
|
+
# @param [Hash] values flatten Hash
|
13
|
+
# @return [Hash] translated hash
|
14
|
+
def tree_of(values)
|
15
|
+
result = {}
|
16
|
+
current = result
|
17
|
+
values.each do |k, v|
|
18
|
+
keys = k.split('.')
|
19
|
+
last_key = keys.pop
|
20
|
+
keys.each do |ks|
|
21
|
+
current = if current.key?(ks)
|
22
|
+
current[ks]
|
23
|
+
else
|
24
|
+
current[ks] = {}
|
25
|
+
current[ks]
|
26
|
+
end
|
27
|
+
end
|
28
|
+
current[last_key] = v
|
29
|
+
current = result
|
30
|
+
end
|
31
|
+
result
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -2,6 +2,7 @@ require "yaml-translator/adapters"
|
|
2
2
|
|
3
3
|
module YamlTranslator
|
4
4
|
class Translator
|
5
|
+
|
5
6
|
def initialize(adapter = Adapters::NoopAdaptor.new)
|
6
7
|
@adapter = adapter
|
7
8
|
end
|
@@ -11,34 +12,8 @@ module YamlTranslator
|
|
11
12
|
# @param [Locale] locale of translate target
|
12
13
|
# @return [Locale] locale
|
13
14
|
def translate(locale, options={})
|
14
|
-
translated = @adapter.translate(locale.
|
15
|
-
Locale.new(
|
16
|
-
end
|
17
|
-
|
18
|
-
private
|
19
|
-
|
20
|
-
# Returning the flattened structure to the tree structure
|
21
|
-
#
|
22
|
-
# @param [Hash] values flatten Hash
|
23
|
-
# @return [Hash] translated hash
|
24
|
-
def rebuild(values)
|
25
|
-
result = {}
|
26
|
-
current = result
|
27
|
-
values.each do |k, v|
|
28
|
-
keys = k.split('.')
|
29
|
-
last_key = keys.pop
|
30
|
-
keys.each do |ks|
|
31
|
-
current = if current.key?(ks)
|
32
|
-
current[ks]
|
33
|
-
else
|
34
|
-
current[ks] = {}
|
35
|
-
current[ks]
|
36
|
-
end
|
37
|
-
end
|
38
|
-
current[last_key] = v
|
39
|
-
current = result
|
40
|
-
end
|
41
|
-
result
|
15
|
+
translated = @adapter.translate(locale.to_single_key_hash, options)
|
16
|
+
Locale.new(translated.to_tree, options[:to])
|
42
17
|
end
|
43
18
|
end
|
44
19
|
end
|
@@ -13,7 +13,7 @@ describe YamlTranslator::Locale do
|
|
13
13
|
describe '#diff' do
|
14
14
|
let(:before_locale) { load_locale('diff/before/en') }
|
15
15
|
let(:after_locale) { load_locale('diff/after/en') }
|
16
|
-
let(:
|
16
|
+
let(:single_key_hash) do
|
17
17
|
{
|
18
18
|
'en.foo1.foo3' => 'foo1-3'
|
19
19
|
}
|
@@ -21,12 +21,12 @@ describe YamlTranslator::Locale do
|
|
21
21
|
it 'should be return flatten hash' do
|
22
22
|
diff_locale = before_locale.diff(after_locale)
|
23
23
|
expect(diff_locale.lang).to eq('en')
|
24
|
-
expect(diff_locale.
|
24
|
+
expect(diff_locale.to_single_key_hash).to eq(single_key_hash)
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
-
describe '#
|
29
|
-
let(:
|
28
|
+
describe '#to_single_key_hash' do
|
29
|
+
let(:single_key_hash) do
|
30
30
|
{
|
31
31
|
'en.bar' => 'bar',
|
32
32
|
'en.foo'=> 'foo',
|
@@ -35,7 +35,7 @@ describe YamlTranslator::Locale do
|
|
35
35
|
}
|
36
36
|
end
|
37
37
|
it 'should be return flatten hash' do
|
38
|
-
expect(locale.
|
38
|
+
expect(locale.to_single_key_hash).to eq(single_key_hash)
|
39
39
|
end
|
40
40
|
end
|
41
41
|
describe '#to_s' do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yaml-translator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Noritaka Horio
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-02-
|
11
|
+
date: 2017-02-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: easy_translate
|
@@ -155,6 +155,8 @@ files:
|
|
155
155
|
- Rakefile
|
156
156
|
- example/en.yml
|
157
157
|
- example/google_translate.rb
|
158
|
+
- example/locale.rb
|
159
|
+
- example/new.en.yml
|
158
160
|
- lib/yaml-translator.rb
|
159
161
|
- lib/yaml-translator/adapters.rb
|
160
162
|
- lib/yaml-translator/adapters/base_adapter.rb
|
@@ -162,6 +164,9 @@ files:
|
|
162
164
|
- lib/yaml-translator/adapters/noop_adapter.rb
|
163
165
|
- lib/yaml-translator/key_path.rb
|
164
166
|
- lib/yaml-translator/locale.rb
|
167
|
+
- lib/yaml-translator/structure.rb
|
168
|
+
- lib/yaml-translator/structure/single_key.rb
|
169
|
+
- lib/yaml-translator/structure/tree.rb
|
165
170
|
- lib/yaml-translator/translator.rb
|
166
171
|
- lib/yaml-translator/version.rb
|
167
172
|
- spec/fixtures/diff/after/en.yml
|
@@ -172,6 +177,8 @@ files:
|
|
172
177
|
- spec/helpers/locale_helper.rb
|
173
178
|
- spec/spec_helper.rb
|
174
179
|
- spec/yaml-translator/locale_spec.rb
|
180
|
+
- spec/yaml-translator/structure/single_key.rb
|
181
|
+
- spec/yaml-translator/structure/tree_spec.rb
|
175
182
|
- spec/yaml-translator/translator_spec.rb
|
176
183
|
- yaml-translator.gemspec
|
177
184
|
homepage: https://github.com/holyshared/yaml-translator
|
@@ -207,4 +214,6 @@ test_files:
|
|
207
214
|
- spec/helpers/locale_helper.rb
|
208
215
|
- spec/spec_helper.rb
|
209
216
|
- spec/yaml-translator/locale_spec.rb
|
217
|
+
- spec/yaml-translator/structure/single_key.rb
|
218
|
+
- spec/yaml-translator/structure/tree_spec.rb
|
210
219
|
- spec/yaml-translator/translator_spec.rb
|