2010-03-09 73 views
2

我在i18n中使用rails 2.3.5。我有一種方法可以在所有視圖中查找所有尚未翻譯的區域設置嗎? 也許應用程序控制器中有一個after_filter,但是我可以使用哪些代碼來完成這項工作?在rails中找到未翻譯的語言環境

感謝

回答

5

當使用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 /配置/初始化/ i18n.rb)

現在,只要你試着翻譯了,你有沒有指定翻譯的關鍵,警告打印到RAILS_ROOT/log/missing_translations.log中。

希望這會有所幫助!

0

我無法找到一個簡單的技巧來做到這一點,所以我做到了這一點。在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 

以上的發現「禪= TRUE」和「禪=假」的查詢字符串中首先推行「的before_filter」。然後此方法添加到application_helper.rb:

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

利用這種方法「禪=真」使得「T」方法顯示本地化字符串在方括號[]。要關閉它,請輸入一個含有'zen = false'的查詢字符串。