1

由于我使用的是 rails 3,因此生产环境中有很多翻译丢失记录,因为在 rails 3 中处理翻译丢失字符串的方式,例如翻译丢失的输出现在是:

<span class="translation_missing" title="translation missing: fr.admin.orders_logs.update.title">Title</span>

在我们的应用程序中,我们看到“标题”,所以我们认为翻译没问题,但实际上翻译丢失了,如果我没记错的话,在 Rails 2 中显示的文本是“翻译丢失:fr.admin.orders_logs.update.title”。 X

我如何才能再次激活它,让他向我显示错误消息,而不是将其作为标题放在跨度中?

4

2 回答 2

1

这似乎是 Rails 的一个特性。见:https ://gist.github.com/rails/rails/issues/6489

一个可能的解决方法是通过将类似这样的内容放置到 application.rb 来覆盖罪魁祸首:

module ActiveModel
  module Translation
    def human_attribute_name(attribute, options = {})
      defaults  = []
      parts     = attribute.to_s.split(".", 2)
      attribute = parts.pop
      namespace = parts.pop

      if namespace
        lookup_ancestors.each do |klass|
          defaults << :"#{self.i18n_scope}.attributes.#{klass.model_name.i18n_key}/#{namespace}.#{attribute}"
        end
        defaults << :"#{self.i18n_scope}.attributes.#{namespace}.#{attribute}"
      else
        lookup_ancestors.each do |klass|
          defaults << :"#{self.i18n_scope}.attributes.#{klass.model_name.i18n_key}.#{attribute}"
        end
      end

      defaults << :"attributes.#{attribute}"
      defaults << options.delete(:default) if options[:default]
      defaults << "MISSING TRANSLATION"+defaults.to_yaml # defaults << attribute.humanize

      options.reverse_merge! :count => 1, :default => defaults
      I18n.translate(defaults.shift, options)
    end
  end
end
于 2012-06-09T11:42:43.650 回答
0

您是否尝试将 i18n.fallbacks 配置设置为 false?

# Enable locale fallbacks for I18n (makes lookups for any locale fall back to
# the I18n.default_locale when a translation can not be found)
config.i18n.fallbacks = false
于 2012-05-02T12:08:55.947 回答