Created
January 22, 2010 05:07
-
-
Save ptzn/283525 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
namespace :translations do | |
desc "Show available locales" | |
task :available => :environment do | |
puts "Available locales: #{I18n.available_locales.join(', ')}" | |
end | |
desc "Show missed translations depending on default language environment (:#{I18n.default_locale} by default). You can change it providing LOCALE argument" | |
task :missed => :environment do | |
locale = ENV['LOCALE'] || I18n.default_locale | |
puts "Using :#{locale} as default locale" | |
i18n_backend = I18n.backend | |
i18n_backend.send(:init_translations) unless i18n_backend.initialized? | |
translations = i18n_backend.send(:translations) | |
main_translation = translations.delete(locale.to_sym) | |
translations.each do |key, value| | |
print "Checking :#{key} translations:" | |
diff = find_keys_diff(main_translation, value) | |
if diff.empty? | |
puts " is up to date" | |
else | |
puts " here is list of missed translation keys" | |
puts "\t" + merge_diff(diff).sort.join("\n\t") | |
end | |
end | |
end | |
private | |
def find_keys_diff(master, in_hash) | |
master.inject([]) do |result, value| | |
key = value.first | |
if !in_hash.has_key?(key) | |
result << key.to_s | |
elsif value.last.is_a?(Hash) | |
diff = find_keys_diff(master[key], in_hash[key]) | |
result << { key.to_s => diff } unless diff.empty? | |
end | |
result | |
end | |
end | |
def merge_diff(diff, prefix = "") | |
prefix << "." unless prefix.blank? | |
diff.inject([]) do |result, value| | |
if value.is_a?(Hash) | |
result += merge_diff(value.first.last, prefix + value.first.first) | |
else | |
result << "#{prefix}#{value}" | |
end | |
result | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment