Module: I18n::Processes::Command::Commands::Preprocessing

Includes:
I18n::Processes::Command::Collection, Path
Included in:
Missing, I18n::Processes::Commands
Defined in:
lib/i18n/processes/command/commands/preprocessing.rb

Instance Method Summary collapse

Methods included from I18n::Processes::Command::Collection

included

Instance Method Details

#changed_keys(previous, current) ⇒ Object



63
64
65
66
67
68
69
70
# File 'lib/i18n/processes/command/commands/preprocessing.rb', line 63

def changed_keys(previous, current)
  previous_dic = get_dic(previous)
  current_dic = get_dic(current)
  diff = current_dic.merge(previous_dic){|k, v1, v2| {:current => v1, :previous => v2} unless v1 == v2 }
  diff.select!{ |k, v| v.is_a?(Hash)}
  print_changed_keys(diff) unless diff == {}
  changed_keys_save(diff) unless diff == {}
end

#changed_keys_save(diff) ⇒ Object



72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/i18n/processes/command/commands/preprocessing.rb', line 72

def changed_keys_save(diff)
  file = 'tmp/changed_keys/changed_keys'
  FileUtils::mkdir_p File.dirname(file) unless Dir.exist?File.dirname(file)
  changed_keys = File.new(file, 'w')
  diff.each do |k, v|
    changed_keys.write "key: #{k}\n"
    changed_keys.write "current: #{v[:current]}"
    changed_keys.write "previous: #{v[:previous]}"
    changed_keys.write "\n"
  end
  changed_keys.close
  log_warn("need to update #{diff.count} keys' translation")
  log_warn("changed_keys save to #{file}")
end

#keys_source(dic, path, locale) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/i18n/processes/command/commands/preprocessing.rb', line 50

def keys_source(dic, path, locale)
  filename = path + locale
  previous_file = "#{path}pre_#{locale}"
  File.delete(previous_file) if File.exist?(previous_file)
  File.rename(filename, previous_file) if File.exist?(filename)
  local_file = File.new(filename, 'w')
  dic.map do |key, value|
    value.include?("\n") ? local_file.write("#{key}=#{value}") : local_file.write("#{key}=#{value}\n")
  end
  local_file.close
  changed_keys(previous_file, filename) if File.exist?(previous_file) && locale == base_locale
end

#origin_file_read(file) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/i18n/processes/command/commands/preprocessing.rb', line 33

def origin_file_read(file)
  {}.tap do |a|
    File.open(file).read.each_line do |line|
      next if line =~ /^#/ || line == "\n" || !line.include?('.')
      if line.include?('\':')
        line.gsub!(/'|,/, '')
        key = line.split(': ').first.delete(' ')
        value = line.split(': ').last
      else
        key = line.split('=').first.delete(' ')
        value = line.split('=').last
      end
      a[key] = value
    end
  end
end

#preprocessing(opt = {}) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/i18n/processes/command/commands/preprocessing.rb', line 19

def preprocessing(opt = {})
  locale = opt[:locales].include?(base_locale) ? 'zh-CN' : opt[:locales].first
  dic = {}
  origin_files(locale).flatten.each do |file|
    # dic.merge!(origin_file_read(file)) { |key, v1, v2| fail "conflict: #{key}: #{v1}, #{v2} in #{file}" unless v1 == v2 }
    dic.merge!(origin_file_read(file))
  end
  ## 对比文件默认存储路径
  path = 'tmp/'
  keys_source(dic, path, locale)
  $stderr.puts Rainbow('preprocess origin data files into primitive files successfully').green if locale == base_locale
end