diff --git a/lib/tasks/i18n_stats.rake b/lib/tasks/i18n_stats.rake deleted file mode 100644 index ae48b2e9686..00000000000 --- a/lib/tasks/i18n_stats.rake +++ /dev/null @@ -1,134 +0,0 @@ -require 'yaml' - -desc "show the current translation status" -task "i18n:stats" => :environment do - - def to_dotted_hash(source, target = {}, namespace = nil) - prefix = "#{namespace}." if namespace - if source.kind_of?(Hash) - - # detect pluralizable string - if (source["other"] != nil) - target[namespace] = { pluralizable: true, content: source } - return - end - - source.each do |key, value| - to_dotted_hash(value, target, "#{prefix}#{key}") - end - else - target[namespace] = source - end - target - end - - def compare(a, b, plural_keys) - locale1 = /.*\.([^.]{2,})\.yml$/.match(a)[1] - locale2 = /.*\.([^.]{2,})\.yml$/.match(b)[1] - - a = YAML.load_file("#{Rails.root}/config/locales/#{a}")[locale1] - b = YAML.load_file("#{Rails.root}/config/locales/#{b}")[locale2] - a = to_dotted_hash(a) - b = to_dotted_hash(b) - - plus = [] - minus = [] - same = [] - total = a.count - - a.each do |key, value| - if b[key] == nil - minus << key - end - if a[key] == b[key] - same << key - end - end - - b.each do |key, value| - if a[key] == nil - plus << key - end - end - - a.each do |key, value| - if value.kind_of?(Hash) - if value[:pluralizable] - plural_keys.each do |pl| - if b[key] == nil || !b[key].kind_of?(Hash) || b[key][:content][pl] == nil - minus << "#{key}.#{pl}" - end - end - - if b[key] != nil && b[key].kind_of?(Hash) - b[key][:content].each do |pl, val| - if ! plural_keys.include?(pl) - if a[key][:content]["zero"] == nil - plus << "#{key}.#{pl}" - end - end - end - end - - # special handling for zero - if a[key][:content]["zero"] != nil - if b[key] == nil || !b[key].kind_of?(Hash) || b[key][:content]["zero"] == nil - minus << "#{key}.zero" - end - end - end - end - end - - return plus, minus, same, total - end - - def get_plurals(locale) - I18n.t("i18n.plural.keys", locale: locale).map { |x| x.to_s } - end - - puts "Discourse Translation Status Script" - puts "To show details about a specific locale (e.g. 'de'), run as:" - puts " rake i18n:stats locale=de" - puts "" - - filemask = "client.*.yml" - details = false - if ENV['locale'] != nil - filemask = "client.#{ENV['locale']}.yml" - details = true - end - - puts " locale | cli+ | cli- | cli= | cli tot| srv+ | srv- | srv= | srv tot" - puts "----------------------------------------------------------------------------------" - - Dir["#{Rails.root}/config/locales/#{filemask}"].each do |f| - locale = /.*\.([^.]{2,})\.yml$/.match(f)[1] - next if locale == "en" - next if !File.exists?("#{Rails.root}/config/locales/client.#{locale}.yml") - next if !File.exists?("#{Rails.root}/config/locales/server.#{locale}.yml") - - pluralization_keys = get_plurals(locale) - - plus1, minus1, same1, total1 = compare("client.en.yml", "client.#{locale}.yml", pluralization_keys) - plus2, minus2, same2, total2 = compare("server.en.yml", "server.#{locale}.yml", pluralization_keys) - puts "%10s %8s %8s %8s %8s %8s %8s %8s %8s" % [locale, plus1.count, minus1.count, same1.count, total1, - plus2.count, minus2.count, same2.count, total2] - - if details - puts "" - puts "Equal keys:" - same1.each { |k| puts "client: #{locale}.#{k}" } - same2.each { |k| puts "server: #{locale}.#{k}" } - puts "" - puts "Missing keys:" - minus1.each { |k| puts "client: #{locale}.#{k}" } - minus2.each { |k| puts "server: #{locale}.#{k}" } - puts "" - puts "Surplus keys:" - plus1.each { |k| puts "client: #{locale}.#{k}" } - plus2.each { |k| puts "server: #{locale}.#{k}" } - end - end - -end