Jak na datum a čas nejenom v ASP – lokalizace funkcí

25. ledna 2001

V úplně prvním článku byla publikována funkce pro zobrazení data a času nezávisle na národním nastavení serveru. Dnes si mimo jiné ukážeme, jak tuto funkci upravit pro použití ve více jazycích.

Jako základ použijeme funkci z výše zmiňovaného článku a rozšíříme ji o jeden parametr, který bude určovat, v jakém jazyce chceme datum zobrazit. V původní verzi jsme měli textové údaje o měsíci a dnu v týdnu umístěné v jednorozměrném poli. Pro více jazyků musíme použít pole dvourozměrné. Toto pole si lze představit jako tabulku, kde v každém sloupci je uvedena jedna jazyková verze.

Pro jednoduchost uvedu funkci upravenou do dvou jazykových verzí a ukáži, jak přidat jednoduchým způsobem další jazykovou verzi. Jako první krok si deklarujeme pole pro uložení názvu měsíců a dní.

dim mesice(12,2),dny(7,2)

Takto jsme si definovali jedno pole pro názvy dní a jedno pole pro názvy měsíců. V obou případech jde o dvourozměrné pole. Toto pole si lze představit jako tabulku o dvou sloupcích a dvanácti řádcích.Každém sloupci je uložena jedna jazyková verze a každý řádek odpovídá jednomu měsíci.

Po deklaraci pole si jej naplníme příslušnými hodnatami.

mesice(1,1)=“Ledna“
mesice(2,1)=“Února“
mesice(3,1)=“Března“
mesice(4,1)=“Dubna“
mesice(5,1)=“Května“
mesice(6,1)=“Června“
mesice(7,1)=“Července“
mesice(8,1)=“Srpna“
mesice(9,1)=“Září“
mesice(10,1)=“Října“
mesice(11,1)=“Listopadu“
mesice(12,1)=“Prosince“
dny(1,1)=“Pondělí“
dny(2,1)=“Úterý“
dny(3,1)=“Středa“
dny(4,1)=“Čtvtek“
dny(5,1)=“Pátek“
dny(6,1)=“Sobota“
dny(7,1)=“Neděle“
mesice(1,2)=“January“
mesice(2,2)=“February“
mesice(3,2)=“March“
mesice(4,2)=“April“
mesice(5,2)=“May“
mesice(6,2)=“June“
mesice(7,2)=“July“
mesice(8,2)=“August“
mesice(9,2)=“September“
mesice(10,2)=“October“
mesice(11,2)=“November“
mesice(12,2)=“December“
dny(1,2)=“Monday“
dny(2,2)=“Tuesday“
dny(3,2)=“Wednesday“
dny(4,2)=“Thursday“
dny(5,2)=“Friday“
dny(6,2)=“Saturday“
dny(7,2)=“Sunday“

Námi vytvořená funkce bude mít oproti funkci ceskydatumcas jeden parametr navíc. Pomocí tohoto parametru určujeme jazyk, ve kterém bude psán název měsíce a název dne v týdnu. Hlavička funkce je uvedena v následují tabulce:

function datumcas(plnedatum,co,den,jazyk)
‚co = 1 – zobrazi datum
‚co = 2 zobrazi cas
‚co = 0 – zobrazi datum i cas
‚den = 0 nezobrazi nazev dne
‚den = 1 zobrazi nazev dne
‚jazyk =1 – zobrazi datum česky
‚jazyk =2 – zobrazi datum anglicky

Nyní vytvoříme vlastní tělo funkce, která bude na základě předaných parametrů zobrazovat datum a čas v různých formátech a ke všemu ještě v několika jazycích.

dim tmpden,tmpcas,tmpdatum‚ deklarujeme pomocné proměnné
if den=1 then ‚ připravíme název dne pro zobrazení
   tmpden=dny(weekday(plnedatum,2),jazyk)
end if
if co=2 or co=0 then ‚ připravíme čas pro zobrazení
   tmpcas=tmp&hour(plnedatum)&“:“
   tmpcas=tmpcas&minute(plnedatum)&“:“
   tmpcas=tmpcas&Second(plnedatum)
end if
if co=1 or co=0 then ‚ připravíme datum pro zobrazení
   tmpdatum=day(plnedatum)&“.“
   tmpdatum=tmpdatum&mesice(month(plnedatum),jazyk)&“ „
   tmpdatum=tmpdatum&year(plnedatum)
end if
‚ a nakonec spojíme do jednoho řetězce a vrátíme hodnotu funkce
datumcas=tmpden&“ „&tmpdatum&“ „&tmpcas

Na základě parametrů co, den a plnedatum sestavíme text, který je posléze vrácen jako návratová hodnota funkce. Volba jazykové verze je provedena pomocí parametru jazyk. Tento parametr vlastně určuje, ze kterého sloupce tabulky má funkce „vzít“ název dne a měsíce.

Pro pořádek si ješte uvedeme celý kód funkce:

<%
function datumcas(plnedatum,co,den,jazyk)
‚co = 1 – zobrazi datum
‚co = 2 zobrazi cas
‚co = 0 – zobrazi datum i cas
‚den = 0 nezobrazi nazev dne
‚den = 1 zobrazi nazev dne
‚jazyk =1 – zobrazi datum česky
‚jazyk =2 – zobrazi datum anglicky
dim mesice(12,2),dny(7,2)
mesice(1,1)=“Ledna“
mesice(2,1)=“Února“
mesice(3,1)=“Března“
mesice(4,1)=“Dubna“
mesice(5,1)=“Května“
mesice(6,1)=“Června“
mesice(7,1)=“Července“
mesice(8,1)=“Srpna“
mesice(9,1)=“Září“
mesice(10,1)=“Října“
mesice(11,1)=“Listopadu“
mesice(12,1)=“Prosince“
dny(1,1)=“Pondělí“
dny(2,1)=“Úterý“
dny(3,1)=“Středa“
dny(4,1)=“Čtvtek“
dny(5,1)=“Pátek“
dny(6,1)=“Sobota“
dny(7,1)=“Neděle“
mesice(1,2)=“January“
mesice(2,2)=“February“
mesice(3,2)=“March“
mesice(4,2)=“April“
mesice(5,2)=“May“
mesice(6,2)=“June“
mesice(7,2)=“July“
mesice(8,2)=“August“
mesice(9,2)=“September“
mesice(10,2)=“October“
mesice(11,2)=“November“
mesice(12,2)=“December“
dny(1,2)=“Monday“
dny(2,2)=“Tuesday“
dny(3,2)=“Wednesday“
dny(4,2)=“Thursday“
dny(5,2)=“Friday“
dny(6,2)=“Saturday“
dny(7,2)=“Sunday“
dim tmpden,tmpcas,tmpdatum‚ deklarujeme pomocné proměnné
if den=1 then ‚ připravíme název dne pro zobrazení
   tmpden=dny(weekday(plnedatum,2),jazyk)
end if
if co=2 or co=0 then ‚ připravíme čas pro zobrazení
   tmpcas=tmp&hour(plnedatum)&“:“
   tmpcas=tmpcas&minute(plnedatum)&“:“
   tmpcas=tmpcas&Second(plnedatum)
end if
if co=1 or co=0 then ‚ připravíme datum pro zobrazení
   tmpdatum=day(plnedatum)&“.“
   tmpdatum=tmpdatum&mesice(month(plnedatum),jazyk)&“ „
   tmpdatum=tmpdatum&year(plnedatum)
end if
‚ a nakonec spojíme do jednoho řetězce a vrátíme hodnotu funkce
datumcas=tmpden&“ „&tmpdatum&“ „&tmpcas
end function
%>

Někteří z vás si určitě položí otázku: „Jak přidat další jazyk?“ Odpověď je jednoduchá. Pouhou modifikací jednoho řádku a přidáním pole s názvy v jiném jazyce. Vlastní přidání dalšího jazyka spočívá v rozšíření velikosti pole (přidání dalšího sloupce do tabulky) a doplnění kódu, který zajistí naplnění přidaných sloupců. Následující kód obsahuje názvy dní a měsíců v němčině:

dim mesice(12,3),dny(7,3}
mesice(1,3)=“der Januar“
mesice(2,3)=“der Februar“
mesice(3,3)=“der März“
mesice(4,3)=“der April“
mesice(5,3)=“der Mai“
mesice(6,3)=“der Juni“
mesice(7,3)=“der Juli“
mesice(8,3)=“der August“
mesice(9,3)=“der September“
mesice(10,3)=“der October“
mesice(11,3)=“der November“
mesice(12,3)=“der Dezember“
dny(1,3)=“der Montag“
dny(2,3)=“der Dienstag“
dny(3,3)=“der Mittwoch“
dny(4,3)=“der Donnerstar“
dny(5,3)=“der Freitag“
dny(6,3)=“der Samstag“
dny(7,3)=“der Sonntag“

A na závěr ještě jedna funkce. Možná jste si všimli, že ve výpisu diskuzí jsou datum a čas formátovány poněkud nestandardním způsobem. Je to díky existenci následující funkce, které se předá jako parametr datum pro zformátování. Funkce vrátí výsledek ve formě řetězce.

function formatujdatum(datum)‚ nadeklarujeme si potřebné proměnné
dim den,mesic,rok,hodina,minuta‚ naplníme separovanými hodnotami data
den=trim(day(datum))
mesic=trim(month(datum))
rok=trim(year(datum))
rok=right(rok,2) ‚ rok nám bude stačit na dve místa
hodina=trim(hour(datum))
minuta=trim(minute(datum))
‚ a protože nechceme, aby se nám měnila šírka řetězce upravíme si jednotlivé položky na dvě místa
if len(hodina)<2 then hodina="0"&hodina ‚ *
if len(minuta)<2 then minuta="0"&minuta ‚ *
if len(den)<2 then den="0"&den ‚ *
if len(mesic)<2 then mesic="0"&mesic ‚ *
‚ a nakonec sestavíme řetězec a vrátíme hodnotu funkce.
formatujdatumek1=den&“.“&mesic&“.“&rok&“, „&hodina&“:“&minuta
end function

Funkce je dostatečně komentována přímo v kódu a tak pouze uvedu jednu možnou změnu. Pokud by vám vadila 0 (nula) v případě dnů měsíců, hodin a minut, můžete ji nahradit například mezerou, anebo celou příslušnou část kódu (označená hvězdičkou na konci řádku) vypustit. Pokud však tuto část kódu vypustíte, musíte počítat s tím, že vracená délka řetězce bude variabilní, což se může mepříznivě projevit v designu vašich stránek.

Dnes jsem vám přinesl dvě podle mého názoru docela užitečné funkce pro práci s datem a časem při tvorbě webových aplikací. Výhodou těchto funkce je fakt, že jsou nezávislé na národním nastavení serveru. Tato skutečnost umožnuje bezproblémovou práci datumovými položkami a zajištuje vždy naprosto stejné zobrazení bez ohledu na server na němž jsou ASP provozována.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Štítky: Články

Mohlo by vás také zajímat

Nejnovější

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *