【问题标题】:How to enable Rails I18n translation errors in views?如何在视图中启用 Rails I18n 翻译错误?
【发布时间】:2012-01-22 23:24:16
【问题描述】:

我创建了新的 Rails 3 项目。我尝试在我的视图中使用这样的翻译:

= t('.translate_test')

在我的浏览器中,我看起来 "translate_test" 而不是 "my test translation" 女巫我在 en.yml 中设置的。

我的主要问题 - 为什么我看不到像 "Missing translation: en ..." 这样的错误?

【问题讨论】:

标签: ruby-on-rails internationalization translation


【解决方案1】:

我已经为 raise 一个异常创建了这个初始化程序 - 传递了 args 以便您知道缺少哪个 i18n 键!

# only for development and test
if Rails.env.development? || Rails.env.test?

  # raises exception when there is a wrong/no i18n key
  module I18n
    class JustRaiseExceptionHandler < ExceptionHandler
      def call(exception, locale, key, options)
        if exception.is_a?(MissingTranslationData)
          raise exception.to_exception
        else
          super
        end
      end
    end
  end

  I18n.exception_handler = I18n::JustRaiseExceptionHandler.new

end

Source

【讨论】:

  • 非常感谢,有了这个系统,很容易检查所有运行测试的缺少的翻译。当然,如果你有很好的掩护的话。
  • @NadavB 为 Rails 3 工作,请参阅最新指南:guides.rubyonrails.org/…
【解决方案2】:

在 Rails 3 中,它们不再向您显示此文本。如果您检查 html 源代码中的元素,您将看到翻译缺失消息。

您可以关闭回退,尝试在您的环境或初始化程序中放入以下内容:

config.i18n.fallbacks = false

【讨论】:

    【解决方案3】:

    通过在 application.css.scss 或任何全局样式表中添加此样式,我使用最简单且特定于视图的解决方案在缺少翻译时在 View 中显示错误:

    .translation_missing{
      font-size: 30px;
      color: red;
      font-family: Times;
    
      &:before{
       content: "Translation Missing :: ";
       font-size: 30px;
       font-family: Times;
       color: red;
     }
    }
    

    【讨论】:

    • 友善而务实。上面的其他方法不适用于 Rails 4.x。我创建了一个debug.css 并有条件地将它包含在我的模板中:= stylesheet_link_tag 'debug' unless Rails.env.production?
    【解决方案4】:

    在您的 application.rb 中添加一个猴子补丁,以便在缺少翻译时抛出异常:

    module ActionView::Helpers::TranslationHelper
      def t_with_raise(*args)
        value = t_without_raise(*args)
    
        if value.to_s.match(/title="translation missing: (.+)"/)
          raise "Translation missing: #{$1}"
        else
          value
        end
      end
      alias_method :translate_with_raise, :t_with_raise
    
      alias_method_chain :t, :raise
      alias_method_chain :translate, :raise
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-20
      • 1970-01-01
      • 2014-12-18
      相关资源
      最近更新 更多