我认为没有办法通过标准方法来做到这一点,但你可以添加这样的补丁:
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
另请参阅此答案。
(我已经更新了两个答案以返回翻译字符串,而不是感谢空白/无。)