transync 1.0.2 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 90302f66b201067dffbb9b3e55eded34a9d2bac1
4
- data.tar.gz: 7a921bf6c24b68d4b5f94dbf472b9986d5d01c18
3
+ metadata.gz: f809b3fa2f4b40dd2b1ffcf0c505a0cc7e11df20
4
+ data.tar.gz: d30f41ff8d1ff9fe6b948158b1629f46111603ed
5
5
  SHA512:
6
- metadata.gz: 9b3107c28d578555752291db1afe9023052c9e55e01407f51252b1eca986be2605a17d11e527508948dc31f01bb9394b5540687798407f82ca91e2de77697411
7
- data.tar.gz: 60f2a4823fc51abd6b8855e16801ecc49ec2ce7529e0795566afa40aec9f2c090124a7b0a125666a9c8f8864ba4424e8bab630bcc0a924c958d51ce2238b57cc
6
+ metadata.gz: 0602b6c893ba7a6ecdc70bb222215b6b8edafd9807e5008b358ee482fff0a9f8b3c250ce978cf3d1a4bbe5c22f1d2d4f48ad91e415d915e8e36ad50d3b78ced2
7
+ data.tar.gz: 2ed3433d06f351c658dbeb34d968abce571b6bdb3ddc0b2321f2049d7384d127e453cf62509d5d23c202022961887847daa152f25986234f4fb608965aa78bd2
data/README.md CHANGED
@@ -50,4 +50,5 @@ When running with test as second argument, changes won't be written to files or
50
50
 
51
51
  # TODO
52
52
 
53
+ - update doesn't work for all languages (if we have two different language it will work only for one)
53
54
  - update for more than 2 languages
@@ -23,7 +23,7 @@ class Init
23
23
  # re-init spreadsheet after new worksheets were created
24
24
  TransyncConfig.init_spreadsheet
25
25
  sync = TranslationSync.new(@path, 'x2g')
26
- sync.run('x2g')
26
+ sync.run('x2g', nil)
27
27
  end
28
28
 
29
29
  end
@@ -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
- valid, _ = SyncUtil::check_and_get_xliff_files(@config['LANGUAGES'], @path, file)
18
- abort('Fix your Xliff translations first!') unless valid
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)
@@ -1,3 +1,3 @@
1
1
  module Transync
2
- VERSION = '1.0.2'
2
+ VERSION = '1.0.3'
3
3
  end
@@ -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
- self.translations(self.languages.first)[:translations].keys.each do |x_trans_key|
37
- self.languages.each do |key_lang|
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
- all_translations_for_language[:language] = key_lang
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
- if xliff_lang_value.nil?
45
- p "#{file}.#{key_lang} is missing translation for key '#{x_trans_key}'"
46
- all_translations_for_language[:translations][x_trans_key] = "#{missing_translation_text} - #{x_trans_key}"
47
- missing += 1
48
- else
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
- missing == 0
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
- SyncUtil::check_and_get_xliff_files(TransyncConfig::CONFIG['LANGUAGES'], path, file)
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
- valid, _, all_translations_for_language =
30
- SyncUtil::check_and_get_xliff_files(TransyncConfig::CONFIG['LANGUAGES'], path, file)
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
 
@@ -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
- xliff_trans_reader = XliffTransReader.new(@path, 'test', @languages)
22
- valid = xliff_trans_reader.valid?
23
- valid.must_equal true
21
+ xliff_files = XliffTransReader.new(@path, 'test', @languages)
22
+ xliff_files.valid?.must_equal true
24
23
 
25
- xliff_trans_reader = XliffTransReader.new(@path, 'validators', @languages)
26
- valid = xliff_trans_reader.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('DE').must_equal 3
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.2
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-08-27 00:00:00.000000000 Z
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.0.3
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: