require “rails_translation_manager”
namespace :translation do
desc "Regenerate all locales from the EN locale - run this after adding keys" task(:regenerate, [:directory] => [:environment]) do |t, args| directory = args[:directory] || "tmp/locale_csv" Rake::Task["translation:export:all"].invoke(directory) Rake::Task["translation:import:all"].invoke(directory) end desc "Export a specific locale to CSV." task :export, [:directory, :base_locale, :target_locale] => [:environment] do |t, args| FileUtils.mkdir_p(args[:directory]) unless File.exist?(args[:directory]) base_locale = Rails.root.join("config", "locales", args[:base_locale] + ".yml") target_locale_path = Rails.root.join("config", "locales", args[:target_locale] + ".yml") exporter = RailsTranslationManager::Exporter.new(args[:directory], base_locale, target_locale_path) exporter.export end namespace :export do desc "Export all locales to CSV files." task :all, [:directory] => [:environment] do |t, args| directory = args[:directory] || "tmp/locale_csv" FileUtils.mkdir_p(directory) unless File.exist?(directory) locales = Dir[Rails.root.join("config", "locales", "*.yml")] base_locale = Rails.root.join("config", "locales", "en.yml") target_locales = locales - [base_locale.to_s] target_locales.each do |target_locale_path| exporter = RailsTranslationManager::Exporter.new(directory, base_locale, target_locale_path) exporter.export end puts "Exported locale CSV to #{directory}" end end desc "Import a specific locale CSV to YAML within the app." task :import, [:locale, :path] => [:environment] do |t, args| importer = RailsTranslationManager::Importer.new(args[:locale], args[:path], Rails.root.join("config", "locales")) importer.import end namespace :import do desc "Import all locale CSV files to YAML within the app." task :all, [:directory] => [:environment] do |t, args| directory = args[:directory] || "tmp/locale_csv" Dir[File.join(directory, "*.csv")].each do |csv_path| locale = File.basename(csv_path, ".csv") importer = RailsTranslationManager::Importer.new(locale, csv_path, Rails.root.join("config", "locales")) importer.import end end end desc "Check translation files for errors" task :validate do require 'rails_translation_manager/validator' logger = Logger.new(STDOUT) validator = RailsTranslationManager::Validator.new(Rails.root.join('config', 'locales'), logger) errors = validator.check! if errors.any? puts "Found #{errors.size} errors:" puts errors.map(&:to_s).join("\n") else puts "Success! No unexpected interpolation keys found." end end desc "Import and convert a locale file from another app." task :steal, [:locale, :source_app_path, :mapping_file_path] do |t, args| stealer = RailsTranslationManager::Stealer.new(args[:locale], args[:source_app_path], args[:mapping_file_path], Rails.root.join('config', 'locales')) stealer.steal_locale end namespace :steal do desc "Import and convert all locale files from another app." task :all, [:source_app_path, :mapping_file_path] => [:environment] do |t, args| I18n.available_locales.reject { |l| l == :en }.each do |locale| stealer = RailsTranslationManager::Stealer.new(locale.to_s, args[:source_app_path], args[:mapping_file_path], Rails.root.join('config', 'locales')) stealer.steal_locale end end end
end