2

我想本地化我的rails應用程序(webservice)。 我安裝了gem'rails-i18n',工作正常。ActiveRecord RecordNotFound本地化

除了它不翻譯ActiveRecord :: RecordNotFound消息。 在Rails代碼: https://github.com/rails/rails/blob/3-2-stable/activerecord/lib/active_record/relation/finder_methods.rb

raise RecordNotFound, "Couldn't find #{@klass.name} with #{conditions.to_a.collect {|p| p.join(' = ')}.join(', ')}" 

看來這個消息是硬編碼。

有沒有解決方案,除了沒有使用Model.find_by_'attribute'?

+0

注:rails4,find_by_'attribute_name「!已被棄用,所以此錯誤的發生率大大降低。 – cyrilchampier

回答

2

足夠我的理由告訴用戶提供更多的信息消息:

exception.message.match /^Couldn't find (\w+) with (id=([\S]*))?/ 
msg = t 'activerecord.exceptions.not_found', klass: $1, id: $3 

,因爲我想要一個捷克transaltion:

cs: 
    activerecord: 
    exceptions: 
     not_found: "Nelze nalézt %{klass} s id=%{id}" 

..當是硬編碼的唯一方法是硬解碼它

+0

K,我想您的權利,即使是像talion法律:) – cyrilchampier

1

您可以捕獲應用程序控制器中的RecordNotFound異常並返回本地化的消息。這樣你也可以改變爲404的默認行爲:

class ApplicationController < ActionController::Base 

    rescue_from ActiveRecord::RecordNotFound, :with => :not_found 

    private 

    def not_found 
     render :json => { :message => I18n.t('exception.record_not_found') }, 
      :status => :not_found 
    end 

end 
+0

是的,但我會放棄顯示克拉斯和屬性名稱的原始消息的上下文! – cyrilchampier

+0

你需要什麼信息?對於用戶恕我直言,這是不相關的沒有發現,但只是出現了問題。如果你想記錄這類錯誤,你可以指定not_found帶有參數異常。因此,您可以訪問它並記錄它或其他什麼...... – lawitschka

+0

因爲這是一個web服務,客戶必須知道他們做錯了什麼,而不需要聯繫我們的支持。 – cyrilchampier

1

Ano在YAML配置療法方法:

en: 
activerecord: 
    exceptions: 
    not_found: "%{model_name} not found" 

您還可以設置爲模型名稱的複數形式,添加如下:

en: 
    activerecord: 
    models: 
     user: 
     one: Dude 
     other: Dudes 
+0

您還可以設置爲模型名稱的複數形式,添加如下: EN: 的ActiveRecord: 型號: 用戶: 一個:哥們 其他:Dudes –

相關問題