Chris@0: namespace :locales do Chris@0: desc 'Updates language files based on en.yml content (only works for new top level keys).' Chris@0: task :update do Chris@0: dir = ENV['DIR'] || './config/locales' Chris@0: Chris@0: en_strings = YAML.load(File.read(File.join(dir,'en.yml')))['en'] Chris@0: Chris@0: files = Dir.glob(File.join(dir,'*.{yaml,yml}')) Chris@0: files.each do |file| Chris@0: puts "Updating file #{file}" Chris@0: file_strings = YAML.load(File.read(file)) Chris@0: file_strings = file_strings[file_strings.keys.first] Chris@0: Chris@0: missing_keys = en_strings.keys - file_strings.keys Chris@0: next if missing_keys.empty? Chris@0: Chris@0: puts "==> Missing #{missing_keys.size} keys (#{missing_keys.join(', ')})" Chris@0: lang = File.open(file, 'a') Chris@0: Chris@0: missing_keys.each do |key| Chris@0: {key => en_strings[key]}.to_yaml.each_line do |line| Chris@0: next if line =~ /^---/ || line.empty? Chris@0: puts " #{line}" Chris@0: lang << " #{line}" Chris@0: end Chris@0: end Chris@0: Chris@0: lang.close Chris@0: end Chris@0: end Chris@0: end