2010-03-09 5 views
2

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

благодаря

ответ

5

При использовании драгоценного камня 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/конфигурации/инициализаторах/i18n.rb)

Теперь, когда вы пытаетесь перевести ключ, для которого у вас не указан никакой перевода, предупреждение печатается в RAILS_ROOT/log/missing_translations.log.

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

0

Я не мог найти простой трюк, чтобы сделать это, так что я сделал это. Во-первых реализовать «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 

«дзен = истина», приведенный выше находками и «дзен = ложь» в строке запроса. Затем добавьте этот метод к вашему application_helper.rb:

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

С помощью этого метода «дзен = истина» делает «т» метод отображения локализованные строки в квадратных скобках []. Чтобы отключить его, введите строку запроса с именем «zen = false».

Смежные вопросы