2015-02-12 68 views
2

当前,当某些任意转换丢失时,导致引用I18n::MissingTranslationData(如config.action_view.raise_on_missing_translations = true所配置)。但是,当翻译缺失是针对某些模型的属性时,它会悄悄地将密钥“转换”为该词。如何在缺少模型属性转换时引发错误

例如activerecord.attributes.user.first_name获得“翻译”到First name

有没有办法强制导轨抛出一个异常,在每一个失踪的翻译包括本

回答

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