2012-02-27 25 views
13

多くの従来のデータを扱っていますが、日時フィールドがnil/nullになることがあります。これにより、ローカリゼーションが中断されます。これを行うことを除いて、これを固定することをお勧めする方法はありますか:rails i18n - 日付が渡されない場合の処理​​方法l(無)

+0

I猿はrelaxed_i18n.rb

これは、そのファイルの内容であると呼ばれる初期化子で国際化パッチを適用しました確かにここの2行目は決して実行されませんか? – Yule

答えて

5

残念ながら、組み込みの解決策はありません。 postを参照してください。

人間が判読できない値を提供する独自のヘルパーを定義することができます。例:ラリー・Kの答えを拡張するために

def ldate(dt) 
    dt ? l(dt) : t("[???]") 
end 
13

ヘルパーは、国際化にオプションを渡すことのハッシュを含める必要があります。

def ldate(dt, hash = {}) 
    dt ? l(dt, hash) : nil 
end 

これは、このようなオプションを渡すことができます:

= ldate @term.end_date, format: :short 
18

私はこの問題を解決するためにクリーンな方法があると思います。

module I18n 

    class << self 

    alias_method :original_localize, :localize 

    def localize object, options = {} 
     object.present? ? original_localize(object, options) : '' 
    end 

    end 

end 

そして、これは私がこのメソッドの出力を検証するために使用RSpecのコードです:

require 'spec_helper' 

describe 'I18n' do 

    it "doesn't crash and burn on nil" do 
    I18n.localize(nil).should == '' 
    end 

    it 'returns a date with Dutch formatting' do 
    date = Date.new(2013, 5, 17) 
    I18n.localize(date, format: '%d-%m-%Y').should == '17-05-2013' 
    end 

end 
+0

素晴らしい!これは、Rails 4.2.0を使用して完全に動作します。 – anka

関連する問題