我在i18n中使用rails 2.3.5。我有一種方法可以在所有視圖中查找所有尚未翻譯的區域設置嗎? 也許應用程序控制器中有一個after_filter,但是我可以使用哪些代碼來完成這項工作?在rails中找到未翻譯的語言環境
感謝
我在i18n中使用rails 2.3.5。我有一種方法可以在所有視圖中查找所有尚未翻譯的區域設置嗎? 也許應用程序控制器中有一個after_filter,但是我可以使用哪些代碼來完成這項工作?在rails中找到未翻譯的語言環境
感謝
當使用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中。
希望這會有所幫助!
我無法找到一個簡單的技巧來做到這一點,所以我做到了這一點。在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'的查詢字符串。