2012-02-27 12 views

risposta

5

Sfortunatamente, non esiste una soluzione integrata. Vedi post.

È possibile definire il proprio helper che fornisce il valore "nil" leggibile dall'uomo. Ad esempio:

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

Per estendere la risposta di Larry K,

L'aiutante dovrebbe includere un hash di passare opzioni ai I18n.

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

Questo permette di passare le opzioni in questo modo:

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

penso che ci sia un modo più pulito per risolvere questo problema. Ho scimmia patchato I18n in un inizializzatore chiamato relaxed_i18n.rb

Questo è il contenuto di quel file:

module I18n 

    class << self 

    alias_method :original_localize, :localize 

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

    end 

end 

E questo è il codice RSpec che ho usato per convalidare l'uscita di questo metodo:

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

Ottimo! Funziona perfettamente con Rails 4.2.0. – anka