目前,当某些任意转换缺失时,rails将按照I18n::MissingTranslationData
的配置抛出config.action_view.raise_on_missing_translations = true
。但是,如果缺少某些模型属性的翻译,它会默默地将密钥“转换”为该单词。
e.g。 activerecord.attributes.user.first_name
被“翻译”为First name
。
有没有办法强制rails在每个缺失的翻译中抛出异常,包括这个
答案 0 :(得分:0)
我遇到了同样的问题,并在这篇文章中找到了解决方案:https://stackoverflow.com/a/22191491/410996
您可以修补human_attribute_name方法以引发错误。将此代码放在初始化程序中:
require 'active_support/core_ext/hash/reverse_merge'
module ActiveModel
module Translation
include ActiveModel::Naming
def human_attribute_name(attribute, options = {})
defaults = lookup_ancestors.map do |klass|
[:"#{self.i18n_scope}.attributes.#{klass.model_name.i18n_key}.#{attribute}",
:"#{self.i18n_scope}.attributes.#{klass.model_name.i18n_key.to_s.tr('.', '/')}.#{attribute}"]
end.flatten
defaults << :"attributes.#{attribute}"
defaults << options.delete(:default) if options[:default]
defaults << attribute.to_s.humanize if Rails.env.production? # Monkey patch
options.reverse_merge! :count => 1, :default => defaults
I18n.translate(defaults.shift, options)
end
end
end