DEV: Update i18n:check rake task to detect invalid Markdown links (#13728)

In addition to that it fixes a problem where the check failed on empty locale files and allows calling the rake task with multiple locales.
This commit is contained in:
Gerhard Schlager 2021-07-14 13:26:12 +02:00 committed by GitHub
parent 2318bd66a7
commit 2a95f892af
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 28 additions and 8 deletions

View File

@ -8,6 +8,7 @@ class LocaleFileChecker
TYPE_UNSUPPORTED_INTERPOLATION_KEYS = 2
TYPE_MISSING_PLURAL_KEYS = 3
TYPE_INVALID_MESSAGE_FORMAT = 4
TYPE_INVALID_MARKDOWN_LINK = 5
def check(locale)
@errors = {}
@ -20,9 +21,12 @@ class LocaleFileChecker
@locale_yaml = YAML.load_file(locale_path)
@reference_yaml = YAML.load_file(reference_path)
next if @locale_yaml.blank? || @locale_yaml.first[1].blank?
check_interpolation_keys
check_plural_keys
check_message_format
check_markdown_links
end
@errors
@ -93,6 +97,16 @@ class LocaleFileChecker
end
end
def check_markdown_links
traverse_hash(@locale_yaml, []) do |keys, value|
next if value.is_a?(Array)
if /\[.*?\]\s+\(.*?\)/.match?(value)
add_error(keys, TYPE_INVALID_MARKDOWN_LINK, nil, pluralized: false)
end
end
end
def check_plural_keys
known_parent_keys = Set.new

View File

@ -6,15 +6,19 @@ require 'seed_data/topics'
require 'colored2'
desc "Checks locale files for errors"
task "i18n:check", [:locale] => [:environment] do |_, args|
task "i18n:check" => [: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
if args.extras.present?
locales = []
args.extras.each do |locale|
if LocaleSiteSetting.valid_value?(locale)
locales << locale
else
puts "ERROR: #{locale} is not a valid locale"
exit 1
end
end
else
locales = LocaleSiteSetting.supported_locales
@ -44,8 +48,10 @@ task "i18n:check", [:locale] => [:environment] do |_, args|
"Missing plural keys".magenta
when LocaleFileChecker::TYPE_INVALID_MESSAGE_FORMAT
"Invalid message format".yellow
when LocaleFileChecker::TYPE_INVALID_MARKDOWN_LINK
"Invalid markdown links".yellow
end
details = error[:details] ? ": #{error[:details]}" : ""
details = error[:details].present? ? ": #{error[:details]}" : ""
puts error[:key] << " -- " << message << details
end