Lokalizujeme datumy

05.09.2007 17:44

Na českém Rails fóru jsem nalezl pochvalný ohlas na článek Localizing datetime format. Nerad bych byl za rejpala, ale autorův přístup je velice pěkný jako demostrace možností Ruby, jako řešení nastíněného probému je to zbytečný overkill.

K podobným praktikám mají Rails lepší a daleko jednodužší prostředky. Ve spoustě tříd definuje ActiveSupport metodu to_formatted_s, mimo jiné taky ve všech třídách pro datum a čas (Time, Date a DateTime). K lokalizovanému výstupu datumových objektů je pak potřeba udelat dvě věci.

Nadefinovat vystupní formáty

Kromě základních formátů, které definují Rails ve výše linkovaných souborech si následujícím způsobem v environment.rb můžeme dodefinovat vlastní:

ActiveSupport::CoreExtensions::Time::Conversions::DATE_FORMATS.merge!(
:cz_datetime => "%d.%m.%Y %H:%M",
:cz_time => "%H:%M",
:cz_date => "%d.%m.%Y"
)
ActiveSupport::CoreExtensions::Date::Conversions::DATE_FORMATS.merge!(
:cz_datetime => "%d.%m.%Y %H:%M",
:cz_date => "%d.%m.%Y"
)

V šabloně použít metodu to_formatted_s


<%= muj_datum.to_formatted_s(:cz_datetime) %>

A hle, máme lokalizované datumy. Není co dodat. Rails rocks!

Komentáře

K tomuto postu je 2 komentářů. Přidej vlastní →
Robert Cigán přidal 10.09.2007 07:23

Ano je to jiste reseni, ale dovolim si zde pripomenou, ze to co zde uvadite, je jednosmerna konverze pri vystupu/printu datumovych/casovych polozek. Je potreba nezapominat na to, ze lide chteji v tomto formatu take zadavat data(ne kazdy ma rad trapny date time defaultni helper railsu, kde se vybira z nekolika select boxu, osobne preferuji text field s javascriptovym kalendarem). Je potreba se zamyslet, proc jsem Vami nazyvany overkill delal, ne kvuli vystupu dat, to je skoro bezpredmetne, ale hlavne kvuli vstupu! Navic v pripade lokalizovane aplikace, je zde nasnade univerzalnost reseni, ktere stacilo lehce modifikovat (prikladem je sMoney.EU, kde je moznost vyberu datumoveho formatu resena prave takto).

Honza přidal 10.09.2007 12:09

Defaulti date_time_select nema rad snad nikdo a chudak ten kdo ho pouziva. S tvoji argumentaci v podstate souhlasim v tom smyslu ze pro vstup datumu muzou mit takoveto helpery opodstatneni a u moznosti zmenit si format datumu je to dokonce nutne a velmi elegantni reseni.

Přidej komentář

Povinná pole jsou vyznačena tučně.