2 Apr
duccio

duccio il 2 April 2009 parla di Rails Snippet

Rails I18n: metodo .to_s() per formattare le date

Spero non sia solo un mio problema ma usando l’I18n di Rails per l’internazionalizzazione, funziona tutto correttamente a parte il metodo to_s(:format) usato sulle date (classe ActiveSupport::TimeWithZone) che restituisce la data formattata correttamente ma sempre in inglese.

Per ovviare al problema ho fatto l’overload del metodo to_s() per la classe TimeWithZone:

    1 module ActiveSupport
    2   class TimeWithZone
    3     def to_s(format = :db)
    4       I18n.l(self, :format => format)
    5     end
    6   end
    7 end

Così uso il metodo I18n.l passando il formato. I formati delle date li dovete inserire nel file .yml nel punto dove sono definiti i date-formats:

    1 it:
    2   date:
    3     formats:
    4       default: "%d-%m-%Y"
    5       short: "%d %b"
    6       long: "%d %B %Y"
    7       only_day: "%e"

8 Commenti a “Rails I18n: metodo .to_s() per formattare le date”

  1. Filippo il 2 April 2009 alle 15:09 dice:

    Sinceramente non mi sembra di avere il tuo stesso problema (verificherò meglio). In ogni caso segnalo a chi non la conoscesse questa utile risorsa: http://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale

    Grande Duccio, ciao!

  2. duccio il 2 April 2009 alle 15:16 dice:

    Mitico Filippo… hai fatto benissimo a suggerire il link, non ci avevo pensato, ma effettivamente è utilissimo per chi usa I18n!!

  3. Marco il 10 July 2009 alle 15:16 dice:

    Ciao duccio. No non sei l’unico, anch’io ho appena incontrato lo stesso problema!

    Il mio file .yml è a posto, ho provato a fare l’overload sia in environment.rb che in un initializer appositamente creato, ho riavviato il server, ma niente da fare…

    Dove devo inserire il tuo codice perché l’overload avvenga?

    PS. se uso I18n.l diretttamente nella vista funziona

  4. duccio il 10 July 2009 alle 15:17 dice:

    Ciao,
    volevo dirti che esiste un plugin che si chiama localize_date…. che fa quello che faccio io un po’ meglio :-) la mia era una soluzione un po’ velocina e poco testata!

  5. Marco il 10 July 2009 alle 15:19 dice:

    Perfetto! Non è che puoi darmi il link?

  6. duccio il 10 July 2009 alle 15:27 dice:

    ruby script/plugin install git://github.com/clemens/localized_dates.git

    :-)

  7. Marco il 10 July 2009 alle 15:47 dice:

    Ah… peccato che non funziona con il plugin translate_routes!

    Mi toccherà utilizzare i18n.t nelle viste finché Rails non offrirà qualcosa di meglio.

  8. lor il 17 November 2009 alle 19:47 dice:

    soluzione … Rails 2.2+
    l n.updated_at, :format => ‘long’

Scrivi un commento