namespace :translation_engine do namespace :pull do desc 'Download all master translations from Translations server and ' + 'store them into config/locales/z_translation_engine.yml' task master: :environment do TranslationEngine::Downloader.new.store puts 'Downloaded translations to: config/locales/z_translation_engine.yml' end desc 'Download released translations from Translations server and ' + 'store them into config/locales/z_releases/LOCALE.yml, ' + 'will overwrite previous locale release, leaving allways only one.' task release: :environment do Rails.logger = Logger.new(STDOUT) TranslationEngine::Downloader.new.store_release(ENV['RELEASE']) end end namespace :list do desc 'List all available releases from Translations Server' task releases: :environment do puts "Listing releases from: #{TranslationEngine.api_host}" releases = TranslationEngine::Connection.new.get_releases releases_hash = Hash.new { |h, k| h[k] = [] } releases.each_with_object(releases_hash) do |release, hash| hash[release.locale] << release end releases_hash.each do |locale, releases| puts "LOCALE: #{locale}" releases.each do |release| print " #{release.version} - #{release.created_at}" print ' -> `rake translation_engine:pull:release ' puts "RELEASE=#{release.version}`" end end end end desc 'Send all translations from directory config/locales/LOCALE ' + 'to translations server' task push: :environment do locale = ENV['LOCALE'] || 'default' puts "\nLOCALE: #{locale}" TranslationEngine.timeout = 1000 def to_dotted_hash(hash, recursive_key = []) hash.each_with_object({}) do |(k, v), ret| key = recursive_key + [k] if v.is_a? Hash ret.merge! to_dotted_hash(v, key) else ret[key] = v end end end dir = Rails.root.join('config', 'locales') Dir[dir.join "#{locale}/**/*.{yml}"].each do |file| unless file.include?('faker') hash = YAML.load_file(file) || {} to_dotted_hash(hash).each do |keys, text| TranslationEngine::Translation.catch text, keys end end end if TranslationEngine::Translation.catched.any? data = { locale: locale, translations: TranslationEngine::Translation.catched.uniq } puts "Send #{TranslationEngine::Translation.catched.size} translations" TranslationEngine::Connection.new.send_translations(data) else puts "No translations was found and send" end end end