transync 1.0.2 → 1.0.3
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/README.md +1 -0
- data/lib/transync/sync/init.rb +1 -1
- data/lib/transync/sync/sync_util.rb +0 -18
- data/lib/transync/sync/translation_sync.rb +2 -2
- data/lib/transync/version.rb +1 -1
- data/lib/transync/xliff_trans/xliff_trans_reader.rb +55 -17
- data/lib/transync.rb +4 -9
- data/test/fixtures/test.fr.xliff +23 -0
- data/test/fixtures/validators.fr.xliff +23 -0
- data/test/g2x_spec.rb +0 -5
- data/test/update_spec.rb +22 -0
- data/test/x2g_spec.rb +5 -16
- metadata +9 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f809b3fa2f4b40dd2b1ffcf0c505a0cc7e11df20
|
4
|
+
data.tar.gz: d30f41ff8d1ff9fe6b948158b1629f46111603ed
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0602b6c893ba7a6ecdc70bb222215b6b8edafd9807e5008b358ee482fff0a9f8b3c250ce978cf3d1a4bbe5c22f1d2d4f48ad91e415d915e8e36ad50d3b78ced2
|
7
|
+
data.tar.gz: 2ed3433d06f351c658dbeb34d968abce571b6bdb3ddc0b2321f2049d7384d127e453cf62509d5d23c202022961887847daa152f25986234f4fb608965aa78bd2
|
data/README.md
CHANGED
data/lib/transync/sync/init.rb
CHANGED
@@ -3,24 +3,6 @@ require_relative '../xliff_trans/xliff_trans_reader'
|
|
3
3
|
|
4
4
|
module SyncUtil
|
5
5
|
|
6
|
-
def self.check_and_get_xliff_files(languages, path, file)
|
7
|
-
valid = true
|
8
|
-
xliff_translations = []
|
9
|
-
all_translations_for_language = {}
|
10
|
-
|
11
|
-
languages.each do |language|
|
12
|
-
xliff_reader = XliffTransReader.new(path, file, languages)
|
13
|
-
if xliff_reader.valid?
|
14
|
-
xliff_translations << xliff_reader.translations(language)
|
15
|
-
else
|
16
|
-
valid = false
|
17
|
-
all_translations_for_language = xliff_reader.all_translations_for_language
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
return valid, xliff_translations, all_translations_for_language
|
22
|
-
end
|
23
|
-
|
24
6
|
def self.info_clean(file, language, message)
|
25
7
|
msg = "#{file} (#{language}) - #{message}"
|
26
8
|
SyncUtil.log_and_puts(msg)
|
@@ -14,8 +14,8 @@ class TranslationSync
|
|
14
14
|
|
15
15
|
def run(direction, test)
|
16
16
|
@config['FILES'].each do |file|
|
17
|
-
|
18
|
-
abort('Fix your Xliff translations
|
17
|
+
xliff_files = XliffTransReader.new(@path, file, @config['LANGUAGES'])
|
18
|
+
abort('Fix your Xliff translations by hand or run transync update!') unless xliff_files.valid?
|
19
19
|
|
20
20
|
@config['LANGUAGES'].each do |language|
|
21
21
|
trans_sync = TranslationSync.new(@path, direction, file)
|
data/lib/transync/version.rb
CHANGED
@@ -3,14 +3,12 @@ require 'nokogiri'
|
|
3
3
|
class XliffTransReader
|
4
4
|
attr_accessor :path,
|
5
5
|
:file,
|
6
|
-
:languages
|
7
|
-
:all_translations_for_language
|
6
|
+
:languages
|
8
7
|
|
9
8
|
def initialize(path, file, languages)
|
10
9
|
self.path = path
|
11
10
|
self.file = file
|
12
11
|
self.languages = languages
|
13
|
-
self.all_translations_for_language = {file: file, language: nil, translations: {}}
|
14
12
|
end
|
15
13
|
|
16
14
|
def translations(language)
|
@@ -28,30 +26,70 @@ class XliffTransReader
|
|
28
26
|
data
|
29
27
|
end
|
30
28
|
|
31
|
-
# will go through each and find if any xliff is missing keys for translations
|
32
29
|
def valid?
|
33
30
|
missing = 0
|
31
|
+
|
32
|
+
check_all do |lang_a, lang_b, xliff_lang_value, x_trans_key|
|
33
|
+
if xliff_lang_value.nil?
|
34
|
+
p "Comparing #{file}.#{lang_a} against #{file}.#{lang_b} => #{file}.#{lang_b} "\
|
35
|
+
"is missing translation for key '#{x_trans_key}'"
|
36
|
+
missing += 1
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
missing == 0
|
41
|
+
end
|
42
|
+
|
43
|
+
def fill_with_missing_keys
|
34
44
|
missing_translation_text = TransyncConfig::CONFIG['MISSING_TRANSLATION_TEXT'] || '#MISSING-TRANS#'
|
45
|
+
all_translations_for_language = {file: file, language: nil, translations: {}}
|
46
|
+
added = false
|
35
47
|
|
36
|
-
|
37
|
-
|
38
|
-
xliff_reader = XliffTransReader.new(self.path, self.file, self.languages)
|
39
|
-
xliff_lang = xliff_reader.translations(key_lang)[:translations]
|
40
|
-
xliff_lang_value = xliff_lang[x_trans_key]
|
48
|
+
check_all do |lang_a, lang_b, xliff_lang_value, x_trans_key, translations_lang_b, last| # x_trans_key comes from lang_a translations
|
49
|
+
all_translations_for_language[:language] = lang_b
|
41
50
|
|
42
|
-
|
51
|
+
if xliff_lang_value.nil?
|
52
|
+
p "Comparing #{file}.#{lang_a} against #{file}.#{lang_b} => #{file}.#{lang_b} "\
|
53
|
+
"was missing translation for key '#{x_trans_key}' => setting value: '#{missing_translation_text} - #{x_trans_key}'"
|
54
|
+
all_translations_for_language[:translations][x_trans_key] = "#{missing_translation_text} - #{x_trans_key}"
|
55
|
+
added = true
|
56
|
+
else
|
57
|
+
all_translations_for_language[:translations][x_trans_key] = xliff_lang_value
|
58
|
+
end
|
43
59
|
|
44
|
-
|
45
|
-
|
46
|
-
all_translations_for_language[:translations]
|
47
|
-
|
48
|
-
|
49
|
-
all_translations_for_language[:translations][x_trans_key] = xliff_lang_value
|
60
|
+
if last
|
61
|
+
if added
|
62
|
+
all_translations_for_language[:translations] = translations_lang_b.merge(all_translations_for_language[:translations])
|
63
|
+
xliff_trans_writer = XliffTransWriter.new(path, file)
|
64
|
+
xliff_trans_writer.write(all_translations_for_language)
|
50
65
|
end
|
66
|
+
|
67
|
+
# clear
|
68
|
+
all_translations_for_language[:translations] = {}
|
69
|
+
added = false
|
51
70
|
end
|
52
71
|
end
|
72
|
+
end
|
53
73
|
|
54
|
-
|
74
|
+
def check_all
|
75
|
+
self.languages.each do |lang_a|
|
76
|
+
self.languages.each do |lang_b|
|
77
|
+
next if lang_a == lang_b
|
78
|
+
|
79
|
+
xliff_reader = XliffTransReader.new(self.path, self.file, self.languages)
|
80
|
+
translations_lang_a = self.translations(lang_a)[:translations]
|
81
|
+
keys = translations_lang_a.keys
|
82
|
+
i = 1
|
83
|
+
|
84
|
+
keys.each do |x_trans_key|
|
85
|
+
translations_lang_b = xliff_reader.translations(lang_b)[:translations]
|
86
|
+
xliff_lang_value = translations_lang_b[x_trans_key]
|
87
|
+
|
88
|
+
yield(lang_a, lang_b, xliff_lang_value, x_trans_key, translations_lang_b, keys.length == i) # last key?
|
89
|
+
i += 1
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
55
93
|
end
|
56
94
|
|
57
95
|
# Reading from source tags in xliff
|
data/lib/transync.rb
CHANGED
@@ -20,21 +20,16 @@ module Transync
|
|
20
20
|
|
21
21
|
if mode == 'test'
|
22
22
|
TransyncConfig::CONFIG['FILES'].each do |file|
|
23
|
-
|
23
|
+
xliff_files = XliffTransReader.new(path, file, TransyncConfig::CONFIG['LANGUAGES'])
|
24
|
+
p 'All translation have all keys, great!' if xliff_files.valid?
|
24
25
|
end
|
25
26
|
end
|
26
27
|
|
27
28
|
if mode == 'update'
|
28
29
|
TransyncConfig::CONFIG['FILES'].each do |file|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
unless valid
|
33
|
-
xliff_trans_writer = XliffTransWriter.new(path, file)
|
34
|
-
xliff_trans_writer.write(all_translations_for_language)
|
35
|
-
end
|
30
|
+
xliff_files = XliffTransReader.new(path, file, TransyncConfig::CONFIG['LANGUAGES'])
|
31
|
+
xliff_files.fill_with_missing_keys
|
36
32
|
end
|
37
|
-
p 'All xliff files should now have all the keys!'
|
38
33
|
end
|
39
34
|
end
|
40
35
|
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
|
3
|
+
<file source-language="fr" datatype="plaintext" original="file.ext">
|
4
|
+
<body>
|
5
|
+
<trans-unit id="title">
|
6
|
+
<source>title</source>
|
7
|
+
<target>Title - FR</target>
|
8
|
+
</trans-unit>
|
9
|
+
<trans-unit id="round">
|
10
|
+
<source>round</source>
|
11
|
+
<target>Round - FR</target>
|
12
|
+
</trans-unit>
|
13
|
+
<trans-unit id="end_test">
|
14
|
+
<source>end_test</source>
|
15
|
+
<target>End test - FR</target>
|
16
|
+
</trans-unit>
|
17
|
+
<trans-unit id="end_test_2">
|
18
|
+
<source>end_test_2</source>
|
19
|
+
<target>End test 2 - FR</target>
|
20
|
+
</trans-unit>
|
21
|
+
</body>
|
22
|
+
</file>
|
23
|
+
</xliff>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
|
3
|
+
<file source-language="fr" datatype="plaintext" original="file.ext">
|
4
|
+
<body>
|
5
|
+
<trans-unit id="title">
|
6
|
+
<source>title</source>
|
7
|
+
<target>Title - FR</target>
|
8
|
+
</trans-unit>
|
9
|
+
<trans-unit id="end_test_2">
|
10
|
+
<source>end_test_2</source>
|
11
|
+
<target>#MISSING-TRANS# - end_test_2</target>
|
12
|
+
</trans-unit>
|
13
|
+
<trans-unit id="round">
|
14
|
+
<source>round</source>
|
15
|
+
<target>Round - FR</target>
|
16
|
+
</trans-unit>
|
17
|
+
<trans-unit id="end_test">
|
18
|
+
<source>end_test</source>
|
19
|
+
<target>#MISSING-TRANS# - end_test</target>
|
20
|
+
</trans-unit>
|
21
|
+
</body>
|
22
|
+
</file>
|
23
|
+
</xliff>
|
data/test/g2x_spec.rb
CHANGED
@@ -32,11 +32,6 @@ describe 'g2x' do
|
|
32
32
|
end
|
33
33
|
|
34
34
|
it 'g2x sync should build new hash before writing it to xliff' do
|
35
|
-
_, xliff_translations = SyncUtil::check_and_get_xliff_files(%w(en), @path, @file)
|
36
|
-
xliff_translations[0][:file].must_equal @file
|
37
|
-
xliff_translations[0][:language].must_equal @language
|
38
|
-
xliff_translations[0][:translations].keys.size.must_equal 4
|
39
|
-
|
40
35
|
trans_sync = TranslationSync.new(@path, 'g2x', @file)
|
41
36
|
new_xliff_hash = trans_sync.sync(@language, 'g2x')
|
42
37
|
|
data/test/update_spec.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'minitest/spec'
|
2
|
+
require 'minitest/autorun'
|
3
|
+
|
4
|
+
require_relative '../lib/transync/gdoc_trans/gdoc_trans_reader'
|
5
|
+
require_relative '../lib/transync/xliff_trans/xliff_trans_writer'
|
6
|
+
require_relative '../lib/transync/sync/sync_util'
|
7
|
+
|
8
|
+
describe 'update' do
|
9
|
+
before do
|
10
|
+
@path = 'test/fixtures'
|
11
|
+
@languages = %w(en de fr)
|
12
|
+
SyncUtil.create_logger('update_test')
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'test if xliff files are valid' do
|
16
|
+
xliff_files = XliffTransReader.new(@path, 'validators', @languages)
|
17
|
+
xliff_files.valid?.must_equal false, 'validators translations should not be valid, because we do not have all keys in german file.'
|
18
|
+
|
19
|
+
xliff_files.fill_with_missing_keys
|
20
|
+
xliff_files.valid?.must_equal true, 'validators translations should be valid after running fill_with_missing_keys'
|
21
|
+
end
|
22
|
+
end
|
data/test/x2g_spec.rb
CHANGED
@@ -18,22 +18,11 @@ describe 'x2g' do
|
|
18
18
|
end
|
19
19
|
|
20
20
|
it 'test if xliff files are valid' do
|
21
|
-
|
22
|
-
valid
|
23
|
-
valid.must_equal true
|
21
|
+
xliff_files = XliffTransReader.new(@path, 'test', @languages)
|
22
|
+
xliff_files.valid?.must_equal true
|
24
23
|
|
25
|
-
|
26
|
-
valid
|
27
|
-
valid.must_equal false, 'validators translations should not be valid, because we do not have all keys in german file.'
|
28
|
-
end
|
29
|
-
|
30
|
-
it 'test if all keys in all language files are presented' do
|
31
|
-
valid, _, _ = SyncUtil::check_and_get_xliff_files(TransyncConfig::CONFIG['LANGUAGES'], @path, 'test')
|
32
|
-
valid.must_equal true, 'test file should have all keys in both languages'
|
33
|
-
|
34
|
-
valid, _, all_trans = SyncUtil::check_and_get_xliff_files(TransyncConfig::CONFIG['LANGUAGES'], @path, 'validators')
|
35
|
-
valid.must_equal false, 'validators.de file is should have one key less then validators.en xliff file'
|
36
|
-
all_trans[:translations].size.must_equal 4
|
24
|
+
xliff_files = XliffTransReader.new(@path, 'validators', @languages)
|
25
|
+
xliff_files.valid?.must_equal false, 'validators translations should not be valid, because we do not have all keys in german file.'
|
37
26
|
end
|
38
27
|
|
39
28
|
it 'x2g sync should build correct new hash before writing it back to google doc' do
|
@@ -52,6 +41,6 @@ describe 'x2g' do
|
|
52
41
|
gdoc_trans_reader = GdocTransReader.new(@file)
|
53
42
|
gdoc_trans_writer = GdocTransWriter.new(gdoc_trans_reader.worksheet)
|
54
43
|
gdoc_trans_writer.get_language_column_index('en').must_equal 2
|
55
|
-
gdoc_trans_writer.get_language_column_index('
|
44
|
+
gdoc_trans_writer.get_language_column_index('de').must_equal 3
|
56
45
|
end
|
57
46
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: transync
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- zigomir
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-10-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: google_drive
|
@@ -94,9 +94,12 @@ files:
|
|
94
94
|
- lib/transync/xliff_trans/xliff_trans_writer.rb
|
95
95
|
- test/fixtures/test.de.xliff
|
96
96
|
- test/fixtures/test.en.xliff
|
97
|
+
- test/fixtures/test.fr.xliff
|
97
98
|
- test/fixtures/validators.de.xliff
|
98
99
|
- test/fixtures/validators.en.xliff
|
100
|
+
- test/fixtures/validators.fr.xliff
|
99
101
|
- test/g2x_spec.rb
|
102
|
+
- test/update_spec.rb
|
100
103
|
- test/x2g_spec.rb
|
101
104
|
- transync.SAMPLE.yml
|
102
105
|
- transync.gemspec
|
@@ -120,15 +123,18 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
120
123
|
version: '0'
|
121
124
|
requirements: []
|
122
125
|
rubyforge_project:
|
123
|
-
rubygems_version: 2.
|
126
|
+
rubygems_version: 2.1.1
|
124
127
|
signing_key:
|
125
128
|
specification_version: 4
|
126
129
|
summary: Synchronize XLIFF translations with Google Drive document
|
127
130
|
test_files:
|
128
131
|
- test/fixtures/test.de.xliff
|
129
132
|
- test/fixtures/test.en.xliff
|
133
|
+
- test/fixtures/test.fr.xliff
|
130
134
|
- test/fixtures/validators.de.xliff
|
131
135
|
- test/fixtures/validators.en.xliff
|
136
|
+
- test/fixtures/validators.fr.xliff
|
132
137
|
- test/g2x_spec.rb
|
138
|
+
- test/update_spec.rb
|
133
139
|
- test/x2g_spec.rb
|
134
140
|
has_rdoc:
|