mirror of
https://github.com/heartcombo/devise.git
synced 2026-04-06 03:01:21 -04:00
Ensure auth keys at the start of the i18n msg are properly cased
Otherwise if we humanized the whole string, it could cause us to change the output of strings with periods and maybe other side-effects, since we're changing the whole string from i18n. This is safer as it only changes the first char of the translated message, and only if it is a match with the first translated auth key, so we can more safely humanize & downcase all auth keys to interpolate in the message whenever needed. Also add changelog for the change.
This commit is contained in:
@@ -111,13 +111,16 @@ module Devise
|
||||
options[:scope] = "devise.failure"
|
||||
options[:default] = [message]
|
||||
auth_keys = scope_class.authentication_keys
|
||||
keys = (auth_keys.respond_to?(:keys) ? auth_keys.keys : auth_keys).map { |key| scope_class.human_attribute_name(key).downcase }
|
||||
options[:authentication_keys] = keys.join(I18n.t(:"support.array.words_connector"))
|
||||
human_keys = (auth_keys.respond_to?(:keys) ? auth_keys.keys : auth_keys).map { |key|
|
||||
scope_class.human_attribute_name(key).downcase
|
||||
}
|
||||
options[:authentication_keys] = human_keys.join(I18n.t(:"support.array.words_connector"))
|
||||
options = i18n_options(options)
|
||||
translated_message = I18n.t(:"#{scope}.#{message}", **options)
|
||||
# only call `#humanize` when the message is `:invalid` to ensure the original format
|
||||
# of other messages - like `:does_not_exist` - is kept.
|
||||
message == :invalid ? translated_message.humanize : translated_message
|
||||
|
||||
I18n.t(:"#{scope}.#{message}", **options).then { |msg|
|
||||
# Ensure that auth keys at the start of the translated string are properly cased.
|
||||
msg.start_with?(human_keys.first) ? msg.upcase_first : msg
|
||||
}
|
||||
else
|
||||
message.to_s
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user