Class: XliffTransReader

Inherits:
Object
  • Object
show all
Defined in:
lib/transync/xliff_trans/xliff_trans_reader.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(path, file, languages) ⇒ XliffTransReader

Returns a new instance of XliffTransReader.



8
9
10
11
12
# File 'lib/transync/xliff_trans/xliff_trans_reader.rb', line 8

def initialize(path, file, languages)
  self.path       = path
  self.file       = file
  self.languages  = languages
end

Instance Attribute Details

#fileObject

Returns the value of attribute file.



4
5
6
# File 'lib/transync/xliff_trans/xliff_trans_reader.rb', line 4

def file
  @file
end

#languagesObject

Returns the value of attribute languages.



4
5
6
# File 'lib/transync/xliff_trans/xliff_trans_reader.rb', line 4

def languages
  @languages
end

#pathObject

Returns the value of attribute path.



4
5
6
# File 'lib/transync/xliff_trans/xliff_trans_reader.rb', line 4

def path
  @path
end

Instance Method Details

#check_allObject



79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/transync/xliff_trans/xliff_trans_reader.rb', line 79

def check_all
  self.languages.each do |lang_a|
    self.languages.each do |lang_b|
      next if lang_a == lang_b

      xliff_reader = XliffTransReader.new(self.path, self.file, self.languages)
      translations_lang_a = self.translations(lang_a)[:translations]
      keys = translations_lang_a.keys
      i = 1

      keys.each do |x_trans_key|
        translations_lang_b = xliff_reader.translations(lang_b)[:translations]
        xliff_lang_value = translations_lang_b[x_trans_key]

        yield(lang_a, lang_b, xliff_lang_value, x_trans_key, translations_lang_b, keys.length == i) # last key?
        i += 1
      end
    end
  end
end

#fill_with_missing_keysObject



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/transync/xliff_trans/xliff_trans_reader.rb', line 43

def fill_with_missing_keys
  missing_translation_text = TransyncConfig::CONFIG['MISSING_TRANSLATION_TEXT'] || '#MISSING-TRANS#'
  all_translations_for_language = {file: file, language: nil, translations: {}}
  added = false
  clean = true

  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
    all_translations_for_language[:language] = lang_b

    if xliff_lang_value.nil?
      p "Comparing #{file}.#{lang_a} against #{file}.#{lang_b} => #{file}.#{lang_b} "\
        "was missing translation for key '#{x_trans_key}' => setting value: '#{missing_translation_text} - #{x_trans_key}'"
      all_translations_for_language[:translations][x_trans_key] = "#{missing_translation_text} - #{x_trans_key}"
      added = true
      clean = false
    else
      all_translations_for_language[:translations][x_trans_key] = xliff_lang_value
    end

    if last
      if added
        all_translations_for_language[:translations] = translations_lang_b.merge(all_translations_for_language[:translations])
        xliff_trans_writer = XliffTransWriter.new(path, file)
        xliff_trans_writer.write(all_translations_for_language)
      end

      # clear
      all_translations_for_language[:translations] = {}
      added = false
    end
  end

  # return if any key was added
  clean
end

#open_file(language) ⇒ Object

Reading from source tags in xliff



101
102
103
104
105
106
107
108
109
# File 'lib/transync/xliff_trans/xliff_trans_reader.rb', line 101

def open_file(language)
  begin
    xml_file = File.open(file_path(language))
    doc = Nokogiri::XML(xml_file)
    yield doc
  rescue Errno::ENOENT => e
    abort(e.message)
  end
end

#translations(language) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/transync/xliff_trans/xliff_trans_reader.rb', line 14

def translations(language)
  data = { file: file, language: language, translations: {} }

  open_file(language) do |doc|
    doc.remove_namespaces!
    doc.xpath('//trans-unit').each do |node|
      key   = node.xpath('source').text
      value = node.xpath('target').text
      data[:translations][key] = value
    end
  end

  data
end

#valid?Boolean

Returns:

  • (Boolean)


29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/transync/xliff_trans/xliff_trans_reader.rb', line 29

def valid?
  missing = 0

  check_all do |lang_a, lang_b, xliff_lang_value, x_trans_key|
    if xliff_lang_value.nil?
      p "Comparing #{file}.#{lang_a} against #{file}.#{lang_b} => #{file}.#{lang_b} "\
        "is missing translation for key '#{x_trans_key}'"
      missing += 1
    end
  end

  missing == 0
end