lib/babelyoda.rb in babelyoda-2.0.2 vs lib/babelyoda.rb in babelyoda-2.0.3

- old
+ new

@@ -1,15 +1,17 @@ BABELYODA_PATH = File.expand_path(File.join(File.dirname(__FILE__), '..')) require 'awesome_print' +require 'fileutils' require_relative 'babelyoda/genstrings' require_relative 'babelyoda/git' require_relative 'babelyoda/ibtool' require_relative 'babelyoda/keyset' require_relative 'babelyoda/localization_key' require_relative 'babelyoda/localization_value' +require_relative 'babelyoda/logger' require_relative 'babelyoda/rake' require_relative 'babelyoda/specification' require_relative 'babelyoda/tanker' require_relative 'babelyoda/xib' @@ -29,122 +31,156 @@ Babelyoda::Rake.spec do |spec| desc "Extract strings from sources" task :extract_strings do - puts "Extracting strings from sources..." - dev_lang = spec.development_language - spec.scm.transaction("[Babelyoda] Extract strings from sources") do + $logger.info "Extracting strings from sources..." + dev_lang = spec.development_language Babelyoda::Genstrings.run(spec.source_files, dev_lang) do |keyset| old_strings_filename = strings_filename(keyset.name, dev_lang) old_strings = Babelyoda::Strings.new(old_strings_filename, dev_lang).read old_strings.merge!(keyset) old_strings.save! - puts " #{old_strings_filename}: #{old_strings.keys.size} keys" + $logger.debug "#{old_strings_filename}: #{old_strings.keys.size} keys" end end end desc "Extract strings from XIBs" task :extract_xib_strings do - puts "Extracting .strings from XIBs..." spec.scm.transaction("[Babelyoda] Extract strings from XIBs") do + $logger.info "Extracting .strings from XIBs..." spec.xib_files.each do |xib_filename| xib = Babelyoda::Xib.new(xib_filename, spec.development_language) next unless xib.extractable?(spec.development_language) keyset = xib.strings - puts " #{xib_filename} => #{xib.strings_filename}" - Babelyoda::Strings.save_keyset(keyset, xib.strings_filename, spec.development_language) + unless keyset.empty? + $logger.debug "#{xib_filename} => #{xib.strings_filename}" + Babelyoda::Strings.save_keyset(keyset, xib.strings_filename, spec.development_language) + end end end end desc "Extracts localizable strings into the corresponding .strings files" task :extract => [:extract_strings, :extract_xib_strings] do end + desc "Drops empty local keysets" + task :drop_empty_strings do + spec.scm.transaction("[Babelyoda] Drop empty .strings files") do + $logger.info "Dropping empty .strings files..." + files_to_drop = [] + spec.strings_files.each do |filename| + strings = Babelyoda::Strings.new(filename, spec.development_language).read! + if strings.empty? + files_to_drop << filename + spec.localization_languages.each do |language| + localized_filename = File.localized(filename, language) + files_to_drop << localized_filename if File.exist?(localized_filename) + end + end + end + files_to_drop.each do |filename| + $logger.info "REMOVED empty file: #{filename}" + FileUtils.rm filename + end + end + end + desc "Create remote keysets for local keysets" - task :create_keysets => :extract do - # Create remote keysets for each local keyset if they don't exist. - puts "Creating remote keysets for local keysets..." + task :create_keysets => [:extract, :drop_empty_strings] do + $logger.info "Creating remote keysets for local keysets..." remote_keyset_names = spec.engine.list spec.strings_files.each do |filename| keyset_name = Babelyoda::Keyset.keyset_name(filename) if remote_keyset_names.include?(keyset_name) - puts " Tanker: An existing keyset found: #{keyset_name}" + $logger.debug "Tanker: An existing keyset found: #{keyset_name}" next end - spec.engine.create(keyset_name) - puts " Tanker: Created NEW keyset: #{keyset_name}" + strings = Babelyoda::Strings.new(filename, spec.development_language).read! + unless strings.empty? + spec.engine.create(keyset_name) + $logger.debug "Tanker: Created NEW keyset: #{keyset_name}" + end end end desc "Drops remote keys not found in local keysets" task :drop_orphan_keys => :create_keysets do - puts "Dropping orphan keys..." + $logger.info "Dropping orphan keys..." spec.strings_files.each do |filename| strings = Babelyoda::Strings.new(filename, spec.development_language).read! - puts " Processing keyset: #{strings.name}" + $logger.debug "Processing keyset: #{strings.name}" remote_keyset = spec.engine.load_keyset(strings.name) - keys_to_drop = [] - remote_keyset.keys.each_value do |key| - unless strings.keys.has_key?(key.id) - keys_to_drop << key.id - puts " Found orphan key: #{key.id}" + original_keys_size = remote_keyset.keys.size + remote_keyset.keys.delete_if do |key, value| + unless strings.keys.has_key?(key) + $logger.debug "Found orphan key: #{key}" + true + else + false end end - keys_to_drop.each do |key| - remote_keyset.keys.delete(key) + next if original_keys_size == remote_keyset.keys.size + unless remote_keyset.empty? + $logger.debug "Keys removed: #{original_keys_size - remote_keyset.keys.size}, keyset REPLACED." + spec.engine.replace(remote_keyset) + else + $logger.debug "All keys removed: keyset DELETED." + spec.engine.drop_keyset!(remote_keyset.name) end - spec.engine.replace(remote_keyset) - puts " Dropped keys: #{keys_to_drop.size}" end end desc "Pushes resources to the translators" task :push => :drop_orphan_keys do - puts "Pushing local keys to the remote..." + $logger.info "Pushing local keys to the remote..." spec.strings_files.each do |filename| strings = Babelyoda::Strings.new(filename, spec.development_language).read! - puts " Processing keyset: #{strings.name}" + $logger.debug "Processing keyset: #{strings.name}" remote_keyset = spec.engine.load_keyset(strings.name, nil, :unapproved) result = remote_keyset.merge!(strings, preserve: true) remote_keyset.ensure_languages!(spec.all_languages) - spec.engine.replace(remote_keyset) - puts " New keys: #{result[:new]} Updated keys: #{result[:updated]}" + if result[:new] > 0 || result[:updated] > 0 + spec.engine.replace(remote_keyset) + $logger.debug "New keys: #{result[:new]} Updated keys: #{result[:updated]}" + end end end desc "Fetches remote strings and merges them down into local .string files" task :fetch_strings do - puts "Fetching remote translations..." spec.scm.transaction("[Babelyoda] Merge in remote translations") do + $logger.info "Fetching remote translations..." spec.strings_files.each do |filename| keyset_name = Babelyoda::Keyset.keyset_name(filename) remote_keyset = spec.engine.load_keyset(keyset_name, nil, :unapproved) remote_keyset.drop_empty! spec.all_languages.each do |language| keyset_filename = strings_filename(keyset_name, language) Babelyoda::Strings.save_keyset(remote_keyset, keyset_filename, language) - puts " #{keyset_filename}" + $logger.debug "#{keyset_filename}" end end end end desc "Incrementally localizes XIB files" task :localize_xibs do - puts "Translating XIB files..." - spec.scm.transaction("[Babelyoda] Localize XIB files") do + $logger.info "Translating XIB files..." spec.xib_files.each do |filename| xib = Babelyoda::Xib.new(filename, spec.development_language) - - xib.import_strings(spec.scm) - spec.localization_languages.each do |language| - xib.localize_incremental(language, spec.scm) + if xib.localizable? + xib.import_strings(spec.scm) + spec.localization_languages.each do |language| + xib.localize_incremental(language, spec.scm) + end + else + $logger.warn "#{filename} has no localizable resources. No localization needed." end end end spec.scm.transaction("[Babelyoda] Update XIB SHA1 version refs") do @@ -167,11 +203,11 @@ spec.localization_languages.each do |language| lang_strings = Babelyoda::Strings.new(filename, language).read combined_keyset.merge!(lang_strings) end end - $logger.success("#{spec.development_language}: #{combined_keyset.keys.size} keys", false) + $logger.info("#{spec.development_language}: #{combined_keyset.keys.size} keys", false) missing = {} spec.localization_languages.each do |language| missing[language] = Babelyoda::Keyset.new("babelyoda.verify.#{language}") end combined_keyset.drop_empty! @@ -200,25 +236,20 @@ task :drop_keysets do if ENV['KEYSETS'] keysets = ENV['KEYSETS'].split(',') if keysets.include?('*') keysets = spec.engine.list - puts "Dropping ALL keysets: #{keysets}" + $logger.info "Dropping ALL keysets: #{keysets}" else - puts "Dropping keysets: #{keysets}" + $logger.info "Dropping keysets: #{keysets}" end keysets.each do |keyset_name| - puts " Dropping: #{keyset_name}" - keyset = Babelyoda::Keyset.new(keyset_name) - key = Babelyoda::LocalizationKey.new("Dummy", "Dummy") - value = Babelyoda::LocalizationValue.new(:en, "Dummy") - key << value - keyset.merge_key!(key) - spec.engine.replace(keyset) + $logger.debug "Dropping: #{keyset_name}" + spec.engine.drop_keyset!(keyset_name) end - puts "All done!" else - puts "Please provide keyset names to drop in the KEYSET environment variable. Separate by commas. Use * for ALL." + $logger.error "Please provide keyset names to drop in the KEYSET environment variable. " + + "Separate by commas. Use * for ALL." end end end