Systemvoraussetzung
- Linux
- Windows
- PHP 3
- PHP 4
- PHP 5
Datei(en)
germanDate.php, date.php, localInstall.php
Problem
Sie möchten gerne einen Kalender mit den Monatsnamen auf Ihrer Website
präsentieren, allerdings sollen deutsche Namen für die Monate genommen
werden.
Lösung
Sie könnten jetzt ein Array mit zwölf Index-Einträgen
bilden und den jeweiligen
Monatsnamen in jedes Arrayelement speichern. Kompliziert wird die Sache
aber, wenn Sie z. B. zwölf verschiedene Sprachen auf Ihrer Seite anbieten –
das wird zwar selten vorkommen, im Fall des Falles würde aber eine Menge
Schreibarbeit auf Sie zukommen.
Einfacher geht es, wenn Sie einfach den Ländercode umstellen und sich den
Monatsnamen in deutscher Ausgabe vom System liefern lassen. Dann könnten
Sie hundert Sprachen anbieten, der administrative Aufwand wäre dennoch
gering.
Zuerst müssen wir herausfinden, auf welchem Betriebssystem (24) das Beispielskript
läuft. Da wir nicht jede Windowsversion abfragen wollen, nehmen
wir lediglich den gekürzten Teil (WIN) zur Überprüfung. Der Ländercode ist
ausnahmsweise zwischen Linux-und
Windowsrechnern verschieden.
Haben wir das Betriebssystem erkannt, können wir den Ländercode mit
setlocale() (29) neu setzen und erhalten als Rückgabewert den eingestellten
Ländercode. Erschrecken Sie nicht, denn er kann von unseren Voreinstellungen
(siehe Beispielausgabe) abweichen.
Jetzt benötigen wir lediglich strftime() (34), das mit dem Paramter %B, den
Monatsnamen ausgehend von der zuvor gesetzten Ländereinstellung liefern
kann.
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
|
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN')
$localeCode = 'ge';
else
$localeCode = 'de_DE';
$typ = setlocale(LC_TIME,$localeCode);
echo 'Aktueller Ländercode: ' . $typ . "<br>\n";
for($x=1;$x<=12;$x++){
echo strftime("%B",mktime(0, 0, 0, $x, 1, date("Y"))). "<br>\n";
} |
Beispiel 2.19: germanDate.php
Ausgabe
Aktueller Ländercode: German_Germany.1252
Januar
Februar
März
April
Mai
Juni
Juli
August
September
Oktober
November
Dezember |
Wie Sie sehen, ist das keine Hexerei und der Aufwand minimal. Oft ist auf
Webseiten auch das aktuelle Datum in der Form „Sonntag, 26. März 2006“ zu
sehen. Das sieht schön aus und ziert die Webseite – ob es sinnvoll ist oder
nicht, sei hier einfach mal dahingestellt. Eine solche Ausgabe zu erzeugen,
sollte für Sie nun eigentlich kein Problem mehr sein – oder doch? Sie können
zwar den Monatsnamen in deutscher Schrift ausgeben, aber woher bekommen
Sie den Tag?
Es sind die Parameter, die uns helfen. Der Parameter %B bei strftime() hat
uns bereits den Monatsnamen geliefert. Da so ein Parameter für die Monate
existiert, sollte es auch einen für Tage geben. Dem ist tatsächlich so! Der
Parameter %A liefert uns den Tag. Wenn wir jetzt noch ein wenig die Ausgabe
formatieren, erhalten wir als Ergebnis das gewünschte Datum.
24:
25: 26: 27: 28: 29: 30: 31:
| if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN')
$localeCode = 'ge'; else $localeCode = 'de_DE';
setlocale(LC_TIME,$localeCode);
echo strftime("%A, %d. %B %Y");
|
Beispiel 2.20: date.php
Ausgabe
Im folgenden Beispiel sehen Sie eine kleine Auswahl für andere Länder, denn
vielleicht möchten Sie den Besuchern Ihrer Webseite einen besonderen Service
bieten und ihnen das jeweilige Datum in ihrer Landessprache anzeigen. Bitte
bedenken Sie aber, dass die verschiedenen Sprachen je nach Betriebssystem
anders deklariert werden müssen (siehe Türkei oder Polen).
01: 02: 03: 04: 05: 06: 07: 08: 09: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| if (strtoupper(substr(PHP_OS, 0, 3)) === ’WIN’)
$os = ’win’; else $os = ’linux’; $countries = array(’de’,’fr’,’fi’,’it’,’tr’,’hu’,’pl’); $lc[’win’][’de’] = array(’ge’,’Deutschland’); $lc[’win’][’fr’] = array(’fr’,’Frankreich’); $lc[’win’][’fi’] = array(’fi’,’Finnland’); $lc[’win’][’it’] = array(’it’,’Italien’); $lc[’win’][’tr’] = array(’turkish’,’Türkei’); $lc[’win’][’hu’] = array(’hu’,’Ungarn’); $lc[’win’][’pl’] = array(’polish’,’Polen’);
$lc[’linux’][’de’] = array(’de_DE’,’Deutschland’); $lc[’linux’][’fr’] = array(’fr_CA’,’Frankreich’); $lc[’linux’][’fi’] = array(’fi_FI’,’Finnland’); $lc[’linux’][’it’] = array(’it_IT’,’Italien’); $lc[’linux’][’tr’] = array(’tr_TR’,’Türkei’); $lc[’linux’][’hu’] = array(’hu_HU’,’Ungarn’); $lc[’linux’][’pl’] = array(’pl_PL’,’Polen’);
for($x=0;$x<count($countries);$x++) { setlocale(LC_TIME, $lc[$os][$countries[$x]][0]); echo strftime(’%A, %e %B %Y, in ’) . $lc[$os][$countries[$x]][1]; echo ’<br>’; } |
Ausgabe
Sonntag, 26 März 2006, in Deutschland
dimanche, 26 mars 2006, in Frankreich
sunnuntai, 26 maaliskuu 2006, in Finnland
domenica, 26 marzo 2006, in Italien
Pazar, 26 Mart 2006, in Türkei
vasárnap, 26 március 2006, in Ungarn
niedziela, 26 marzec 2006, in Polen |
Unter Linux haben Sie die Möglichkeit, sich alle unterstützten Ländercodes
anzeigen zu lassen. Das folgende kleine Skript listet Ihnen alle Ländercodes
auf. Dabei wird die Ausgabe nicht direkt erzeugt, sondern mit ob_start()
(24) gepuffert.
Der Shell-Befehl
(25) fragt hier die Ländercodes ab, und der Inhalt der Ausgabe
wird dann mit ob_get_contents() (26) in die Variable gespeichert. Zum
Schluss müssen wir lediglich den Inhalt (ein Array!) ausgeben (29).
Die Ausgabe wurde hier in einer Tabelle dargestellt, entspricht also nicht der
Ausgabe im Browser (dort sollten Sie den Quelltext öffnen, um die Ausgabe
besser sehen zu können).
24:
25: 26: 27: 28: 29:
| ob_start();
system('locale -a'); $lc = ob_get_contents(); ob_end_clean();
print_r($lc);
|
Beispiel 2.21: localInstall.php
Ausgabe formatiert
af_ZA
ar_AE
ar_BH
ar_DZ
ar_EG
ar_IN
ar_IQ
ar_JO
ar_KW
ar_LB
ar_LY
ar_MA
ar_OM
ar_QA
ar_SA
ar_SD
ar_SY
ar_TN
ar_YE
be_BY
bg_BG
bokmal
bokmål
br_FR
bs_BA
ca_ES
ca_ES@euro
catalan
croatian
cs_CZ
cy_GB
czech
da_DK
danish
dansk
ga_IE@euro
ko_KR
ko_KR.euckr
ko_KR.utf8
korean
korean.euc
kw_GB
lithuanian
lt_LT
lv_LV
mi_NZ
mk_MK
mr_IN.utf8
ms_MY
mt_MT
nb_NO
nb_NO.ISO88591
nl_BE
nl_BE@euro |
de_AT
de_AT@euro
de_BE
de_BE@euro
de_CH
de_DE
de_DE.utf8
de_DE@euro
de_LU
de_LU@euro
deutsch
dutch
eesti
el_GR
el_GR.utf8
en_AU
en_BW
en_CA
en_DK
en_GB.utf8
en_HK
en_IE
en_IE@euro
en_IN
en_NZ
en_PH
en_SG
en_US
en_US.utf8
en_ZA
en_ZW
es_AR
es_BO
es_CL
es_CO
nl_NL
nl_NL@euro
nn_NO
oc_FR
pl_PL
polish
portuguese
pt_BR
pt_PT
pt_PT@euro
ro_RO
romanian
ru_RU
ru_RU.koi8r
ru_RU.utf8
ru_UA
russian
sk_SK
sl_SI |
es_CR
es_DO
es_EC
es_ES
es_ES@euro
es_GT
es_HN
es_MX
es_NI
es_PA
es_PE
es_PR
es_PY
es_SV
es_US
en_GB
es_UY
es_VE
estonian
et_EE
eu_ES
eu_ES@euro
fa_IR.utf8
fi_FI
fi_FI@euro
finnish
fo_FO
fr_BE
fr_BE@euro
fr_CA
fr_CH
fr_FR
fr_FR.utf8
fr_FR@euro
fr_LU
slovak
slovene
slovenian
spanish
sq_AL
sr_YU
sr_YU@cyrillic
sv_FI
sv_FI@euro
sv_SE
swedish
ta_IN
te_IN
tg_TJ
th_TH
no_NO
norwegian
nynorsk
thai |
fr_LU@euro
français
french
galego
galician
german
gl_ES
gl_ES@euro
greek
gv_GB
he_IL
hebrew
hi_IN.utf8
hr_HR
hrvatski
hu_HU
hungarian
icelandic
id_ID
is_IS
it_CH
it_IT
it_IT@euro
italian
iw_IL
ja_JP
ja_JP.eucjp
ja_JP.ujis
ja_JP.utf8
japanese
japanese.euc
japanese.sjis
ka_GE
kl_GL
ga_IE
tl_PH
tr_TR
turkish
uk_UA
ur_PK
uz_UZ
vi_VN.utf8
wa_BE
wa_BE@euro
yi_US
zh_CN
zh_CN.gb18030
zh_CN.gbk
zh_CN.utf8
zh_HK
zh_HK.utf8
zh_TW
zh_TW.euctw
zh_TW.utf8 |
Dieses Skript aus dem SELFPHP KOCHBUCH wurde von SELFPHP unter dem "Tarif Mc500" von McAc.net-Webhosting erfolgreich ausgeführt und getestet!
Auf der Übersichtseite unter "McAc.net – Webhosting zu diesem Buch" finden Sie weitere Informationen zu dem Webhostingpaket, dass durch SELFPHP getestet wurde.
|