【问题标题】:find untranslated locales in rails在 rails 中查找未翻译的语言环境
【发布时间】:2010-03-09 14:02:17
【问题描述】:

我正在使用带有 i18n 的 rails 2.3.5。我有没有办法在所有视图中找到所有尚未翻译的语言环境? 可能是应用程序控制器中的 after_filter,但我可以使用哪些代码来完成这项工作?

谢谢

【问题讨论】:

    标签: ruby-on-rails ruby internationalization


    【解决方案1】:

    当使用 i18n gem(Rails 使用)时,您可以指定自己的异常处理程序。试试这个代码:

    # A simple exception handler that behaves like the default exception handler
    # but additionally logs missing translations to a given log.
    #
    module I18n
      class << self
        def missing_translations_logger
          @@missing_translations_logger ||= Logger.new("#{RAILS_ROOT}/log/missing_translations.log")
        end
    
        def missing_translations_log_handler(exception, locale, key, options)
          if MissingTranslationData === exception # use MissingTranslation in Rails 3.x !!!
            puts "logging #{exception.message}"
            missing_translations_logger.warn(exception.message)
            return exception.message
          else
            raise exception
          end
        end
      end
    end
    
    I18n.exception_handler = :missing_translations_log_handler
    

    (例如放入RAILS_ROOT/config/initializers/i18n.rb)

    现在,每当您尝试翻译未指定翻译的键时,都会在 RAILS_ROOT/log/missing_translations.log 中打印一条警告。

    希望这会有所帮助!

    【讨论】:

      【解决方案2】:

      我找不到一个简单的技巧来做到这一点,所以我做了这个。首先在 application_controller.rb 中实现一个 'before_filter'

      before_filter :set_user_language
      
      # set the language, 'zen' is a special URL parameter that makes localizations the use the 't' method visible
      def set_user_language
        # turn on 'zen' to see localization by adding 'zen=true' to query string, will stay on until a query with 'zen=false'
        session[:zen] = (session[:zen] || params[:zen] == "true") && params[:zen] != "false"
        I18n.locale = 'en'
      end
      

      上面在查询字符串中找到了“zen=true”和“zen=false”。然后将此方法添加到您的 application_helper.rb:

      def t(*args)
        result = super(*args)
        result = "[#{result}]" if session[:zen] && result.is_a?(String)
        result
      end
      

      使用此方法,'zen=true' 使 't' 方法在方括号 [] 中显示本地化字符串。要关闭它,请输入带有 'zen=false' 的查询字符串。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多