discourse/lib/tasks/i18n.rake
Sam Saffron 30990006a9 DEV: enable frozen string literal on all files
This reduces chances of errors where consumers of strings mutate inputs
and reduces memory usage of the app.

Test suite passes now, but there may be some stuff left, so we will run
a few sites on a branch prior to merging
2019-05-13 09:31:32 +08:00

75 lines
2.0 KiB
Ruby

# frozen_string_literal: true
require 'i18n/locale_file_checker'
require 'seed_data/categories'
require 'seed_data/topics'
require 'colored2'
desc "Checks locale files for errors"
task "i18n:check", [:locale] => [:environment] do |_, args|
failed_locales = []
if args[:locale].present?
if LocaleSiteSetting.valid_value?(args[:locale])
locales = [args[:locale]]
else
puts "ERROR: #{locale} is not a valid locale"
exit 1
end
else
locales = LocaleSiteSetting.supported_locales
end
locales.each do |locale|
begin
all_errors = LocaleFileChecker.new.check(locale)
rescue
failed_locales << locale
next
end
all_errors.each do |filename, errors|
puts "", "=" * 80
puts filename.bold
puts "=" * 80
errors.each do |error|
message =
case error[:type]
when LocaleFileChecker::TYPE_MISSING_INTERPOLATION_KEYS
"Missing interpolation keys".red
when LocaleFileChecker::TYPE_UNSUPPORTED_INTERPOLATION_KEYS
"Unsupported interpolation keys".red
when LocaleFileChecker::TYPE_MISSING_PLURAL_KEYS
"Missing plural keys".magenta
when LocaleFileChecker::TYPE_INVALID_MESSAGE_FORMAT
"Invalid message format".yellow
end
details = error[:details] ? ": #{error[:details]}" : ""
puts error[:key] << " -- " << message << details
end
end
end
failed_locales.each do |failed_locale|
puts "", "Failed to check locale files for #{failed_locale}".red
end
puts ""
exit 1 unless failed_locales.empty?
end
desc "Update seeded topics and categories with latest translations"
task "i18n:reseed", [:locale] => [:environment] do |_, args|
locale = args[:locale]&.to_sym
if locale.blank? || !I18n.locale_available?(locale)
puts "ERROR: Expecting rake i18n:reseed[locale]"
exit 1
end
SeedData::Categories.new(locale).update
SeedData::Topics.new(locale).update
end