найти непереведенные локали в рельсах - PullRequest
2 голосов
/ 09 марта 2010

Я использую рельсы 2.3.5 с i18n. Есть ли способ найти все еще не переведенные локали во всех видах? Может быть, after_filter в контроллере приложения, но какой код я могу использовать для этой работы?

спасибо

Ответы [ 2 ]

5 голосов
/ 09 марта 2010

При использовании гема i18n (что делает 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.

Надеюсь, это поможет!

0 голосов
/ 09 марта 2010

Я не мог найти простой трюк, чтобы сделать это, поэтому я сделал это. Сначала внедрите 'before_filter' в вашем application_controller.rb

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'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...