Ruby on rails 禁用Rails中仅缺少英语的翻译

Ruby on rails 禁用Rails中仅缺少英语的翻译,ruby-on-rails,localization,internationalization,translation,Ruby On Rails,Localization,Internationalization,Translation,如果语言为英语,是否有方法防止视图中出现.translation\u missing类?既然英文本是正确的,我就不需要翻译了 现在,我为maskspan.translation\u missing添加了样式,如果区域设置是默认的span,我希望它根本不出现,如果区域设置是:en 更新:为了清楚起见,我在.erb文件中进行翻译,所以说变成了菜单项,这太过分了。我只需要将原始字符串保留在:enlocale中,我认为没有办法通过标准方法实现这一点,但您可以添加如下修补程序: module I18n::

如果语言为英语,是否有方法防止视图中出现
.translation\u missing
类?既然英文本是正确的,我就不需要翻译了

现在,我为mask
span.translation\u missing
添加了样式,如果区域设置是默认的span,我希望它根本不出现,如果区域设置是
:en


更新:为了清楚起见,我在
.erb
文件中进行翻译,所以说
变成了
菜单项
,这太过分了。我只需要将原始字符串保留在
:en
locale

中,我认为没有办法通过标准方法实现这一点,但您可以添加如下修补程序:

module I18n::MissingTranslation::Base

  def html_message_with_en_fix
    (locale == :en) ? key : html_message_without_en_fix
  end
  alias_method_chain :html_message, :en_fix

  def message_with_en_fix
    (locale == :en) ? key : message_without_en_fix
  end
  alias_method_chain :message, :en_fix

end
或者,如果不想使用修补程序,也可以定义自己的方法并自己捕获异常:

def my_translate(key)
  begin
    I18n.t(key, :raise => I18n::MissingTranslationData)
  rescue I18n::MissingTranslationData
    (I18n.locale == :en) ? key.to_s : I18n.t(key)
  end
end
另见


(我已经更新了两个答案,以返回翻译字符串,而不是blank/nil。)

不幸地产生了
ActionView::Template::Error(未定义的方法
html\u safe'for nil:NilClass)`生产中的错误。我希望有一种无需修补的方法。更新了我的答案,使其返回空字符串,而不是
nil
。我同意补丁不是最优雅的方法,但它应该是有效的。添加了一种不需要补丁的替代方法。另请参阅此答案:如果确实缺少翻译,则更新(1)重新运行空字符串,但这样,英文版本中的所有文本都将消失。因此,如果您在英语区域设置中,您只想显示密钥?那不是很清楚。无论如何,我更新了我的答案。