mirror of
https://github.com/discourse/discourse.git
synced 2025-06-05 14:07:30 +08:00
DEV: Ensure banned phrases do not occur in en translations (#30264)
This will help us keep consistency with things that we've decided to rename. Initial rules are for "color scheme" -> "color palette", and "private message" -> "personal message". Also updates some remaining occurences of "color scheme" in our translation files. Co-authored-by: Gerhard Schlager <gerhard.schlager@discourse.org>
This commit is contained in:
@ -26,6 +26,9 @@ class I18nLinter
|
||||
end
|
||||
|
||||
class LocaleFileValidator
|
||||
# Format: "banned phrase" => "recommendation"
|
||||
BANNED_PHRASES = { "color scheme" => "color palette", "private message" => "personal message" }
|
||||
|
||||
ERROR_MESSAGES = {
|
||||
invalid_relative_links:
|
||||
"The following keys have relative links, but do not start with %{base_url} or %{base_path}:",
|
||||
@ -37,7 +40,16 @@ class LocaleFileValidator
|
||||
"Pluralized strings must have only the sub-keys 'one' and 'other'.\nThe following keys have missing or additional keys:",
|
||||
invalid_one_keys:
|
||||
"The following keys contain the number 1 instead of the interpolation key %{count}:",
|
||||
}
|
||||
}.merge(
|
||||
BANNED_PHRASES
|
||||
.map do |banned, recommendation|
|
||||
[
|
||||
"banned_phrase_#{banned}",
|
||||
"The following keys contain the banned phrase '#{banned}' (use '#{recommendation}' instead)",
|
||||
]
|
||||
end
|
||||
.to_h,
|
||||
)
|
||||
|
||||
PLURALIZATION_KEYS = %w[zero one two few many other]
|
||||
ENGLISH_KEYS = %w[one other]
|
||||
@ -49,6 +61,7 @@ class LocaleFileValidator
|
||||
def initialize(filename)
|
||||
@filename = filename
|
||||
@errors = {}
|
||||
ERROR_MESSAGES.keys.each { |type| @errors[type] = [] }
|
||||
end
|
||||
|
||||
def has_errors?
|
||||
@ -87,10 +100,6 @@ class LocaleFileValidator
|
||||
end
|
||||
|
||||
def validate_content(yaml)
|
||||
@errors[:invalid_relative_links] = []
|
||||
@errors[:invalid_relative_image_sources] = []
|
||||
@errors[:invalid_interpolation_key_format] = []
|
||||
|
||||
each_translation(yaml) do |key, value|
|
||||
@errors[:invalid_relative_links] << key if value.match?(%r{href\s*=\s*["']/[^/]|\]\(/[^/]}i)
|
||||
|
||||
@ -100,6 +109,10 @@ class LocaleFileValidator
|
||||
!EXEMPTED_DOUBLE_CURLY_BRACKET_KEYS.include?(key)
|
||||
@errors[:invalid_interpolation_key_format] << key
|
||||
end
|
||||
|
||||
BANNED_PHRASES.keys.each do |banned|
|
||||
@errors["banned_phrase_#{banned}"] << key if value.include?(banned)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -115,9 +128,6 @@ class LocaleFileValidator
|
||||
end
|
||||
|
||||
def validate_pluralizations(yaml)
|
||||
@errors[:wrong_pluralization_keys] = []
|
||||
@errors[:invalid_one_keys] = []
|
||||
|
||||
each_pluralization(yaml) do |key, hash|
|
||||
# ignore errors from some ActiveRecord messages
|
||||
next if key.include?("messages.restrict_dependent_destroy")
|
||||
|
Reference in New Issue
Block a user