Weblog - kronn.de

Kalendarium

WordPress ist schnell übersetzt. Was man nicht über die config.php erledigt, muss man an zwei bis drei Stellen anpassen, wie Perun bereits beschrieben hat. So, eigentlich gibt es jetzt nichts mehr zu tun. Also: Kaffee holen, zurücklehnen und das frisch übersetzte Weblog bewundern.

Doch Moment! Was ist das denn? Der Kalendar beginnt mit Sonntag? Vielleicht ist es ja nur eine Macke von mir, aber meine Woche beginnt immer Montags. Samstag und Sonntag heißen doch nicht ohne Grund Wochenende. Das umzustellen ist leider nicht so ganz trivial. Aber es geht, wie ich nach einiger Suche erfahren habe.

WordPress und die Internationalisierung

Die Lösung liegt darin , die Kalenderfunktion get_calendar() etwas zu verändern. In der Datei /wp-includes/template-functions-general.php ist—bei mir in Zeile 309—eben diese Funktion definiert. Die tatsächliche Ausgabe des Kalendars wird aber erst am Ende der Funktion in Angriff genommen, bei mir steht in Zeile 456 der Kommentar // See how much we should pad in the beginning. Direkt nach dem Kommentar wird der Abstand vor dem ersten Tag des Monats berechnet. Da wir alle Spalten um eins nach links schieben wollen, muss hier 1 abgezogen werden.

vorher
$pad = intval(date('w', $unixmonth));
nachher
$pad = intval(date('w', $unixmonth)) - 1;

Danach werden die einzelnen Tage des Monats mittels einer (for) Schleife und mehreren (if-then) Prüfungen auf Tabellenzellen verteilt. Wichtig ist für uns der Zeilenwechsel, der am Ende der Schleife geprüft wird. Da es nicht mehr nach Samstag (Wochentag 6), sondern Sonntag (Wochentag 0) ein Zeilenende geben soll, müssen wir das ändern:

vorher
if (6 == date(‘w’, mktime(0, 0 , 0, $thismonth, $day, $thisyear)))
nachher
if (0 == date(‘w’, mktime(0, 0 , 0, $thismonth, $day, $thisyear)))

Nun wird der Abstand nach dem letzten Tag des Monats berechnet, damit alle Zeilen gleich lang sind. Da wir den Anfang um eins nach links gezogen haben und die einzelnen Zeilen entsprechend um eins verlängert haben (es sollen ja weiterhin 7 Tage pro Woche sein), müssen wir am Ende einen “leeren” Tag anhängen. Dafür verändern wir dieses direkt nach der Schleife zu findende Codesegment:

vorher
$pad = 7 - date('w', mktime(0, 0 , 0, $thismonth, $day, $thisyear));
nachher
$pad = 8 - date('w', mktime(0, 0 , 0, $thismonth, $day, $thisyear));

Zu guter Letzt muss jetzt nur noch die Beschriftung des Kalender anpasst werden, damit die Wochentage auch richtig benannt sind. Dies ist recht leicht, es muss nur eine Zeile verschoben werden. Die fragliche Zeile ist in der Datei wp-includes/locale.php schieben wir die Zeile mit der Wertzuweisung $weekday<sup><a href="#fn1964852128574853fc59379">0</a></sup> (sunday) ans Ende der Liste, also nach die Zuweisung $weekday<sup><a href="#fn1234120290574853fc593c9">6</a></sup> (saturday). Das sieht dann so aus:

nachher
$weekday6 = __('Saturday');
$weekday0 = __('Sunday');

Wenn alles so wie bei mir funktioniert, sollte der Kalendar jetzt auf den europäischen Wochenanfangsmontag zugeschnitten sein. Wer außerdem die Wochentage mit zwei statt nur einem Buchstaben gekennzeichnet haben möchte, sollte den Kalender mit get_calendar('2') aufrufen.

(Der Kern dieses Artikels ist eine leicht ergänzte und teilweise recht freie Übersetzung eines Artikels von Morten Frederiksen. )

Abgelegt in: Code
Veröffentlicht am 09.10.2004 um 09:00
Dauerhafter Link zu "Kalendarium"

  • Pingback: C-blog - Das Weblog von Christoph Hörl » Kalender bearbeiten()

  • Pingback: micha-schmidt.net » Wordpress: deutscher Kalender()

  • Hmm … auch bei mir ist der Begriff Wochenende in zufälliger Übereinstimmung mit der Bibel mit dem Wort Sonntag besetzt.

    Nebenbei: auch im (Super-) Editor Boxer kann man den Kalender nach seiner Wahl anfangen lassen. Enn man will mit Mittwoch.

    Was ich bemerken will ist einfach kurios: Den Wochenanfang mit dem Sonntag wird meines Wissens NUR von einer Gruppe progagiert: der amerikanischen Church of Christ, eine dort verbreitete Religionsgemeinschaft die den Evangelen nahesteht. Und sich krampfhaft an der Bibel festhält. Wenn es gerade mal paßt. So ist dort unter Nichtbeachtung des AltenTestamentes der Sonntag der Wochenanfang, zu Ehren des Gottes den man vorwiegend Sonntags besingt. Ab Montag ist man dan wieder für die Todesstrafe von der ja gerade im Neuen Testament abgeraten wird und die selbst im Alten Testament nicht empfohlen wird (stattdessen wird dort die Verbannung empfohlen und wurde so auch praktiziert). Aber so widersprüchlich sind nun mal Religionen.

    IMO ist ein Kalender mit wählbaren Anfangswochentag besser, als einer mit festem Anfang am Montag. Auch wenn es für mich und alle anderen Mitteleuropäer genügen würde.

  • Bei mir kommt eine Fehlermeldung.
    Es geht scheinbar um folgende Änderung:
    “vorher
    if (6 date(‘w’, mktime(0, 0 , 0, $thismonth, $day, $thisyear)))
    nachher
    if (0 date(?w?, mktime(0, 0 , 0, $thismonth, $day, $thisyear)))”

    wobei mir die betreffende Zeile auch ein wenig von Deinem Beispiel abweicht.
    “if (6 == date(‘w’, mktime(0, 0 , 0, $thismonth, $day, $thisyear)))”

  • Oh, da sollte eigentlich sowohl vorher als auch nachher das doppelte Gleich (==) vor der date(...)-Funktion stehen… Werde ich versuchen zu korririgieren.

    Welche WP Version hast du, André? Bei WP 1.2 funzt es ohne Probleme…

  • Ich verwende WordPress 1.2.

    Strange, beim ersten Mal muss ich was beim Copy & Paste falsch gemacht haben. Jetzt bekomme ich zwar keine Fehlermeldung aber jeder Tag ist ein Sonntag (eigentlich auch ganz schön).
    Auch nach mehrmaligem Kontrollieren fällt mir nicht auf was ich falsch gemacht habe.

  • Jau, immer Sonntag, das ist spitze!

    Hört sich nach einem Fehler in der locale.php an, wenn du mich fragst, von dort werden die Bezeichnungen ja geholt.

  • vielen dank für die anleitung. hat super geklappt. jetzt brauch ich nur noch ein script um meine sunlog-einträge nach wordpress zu exportieren.

  • danke für die tolle anleitung. sowas braucht das land ;). weiter so.

    ciao psysp

  • daniel

    Hi,
    Danke für die Mühe! Dennoch habe ich das gleiche Problem wie André am 06.11.04 -> kopiert wurde alles richtig, habe es überprüft. Bei mir ist jeder Tag ein Montag…

  • generationenhaus

    Nicht dass nicht auch ich Samstag/Sonntag als Wochenende bezeichnen würde… aber die Argumentation mit der Bibel greift leider daneben.
    Tatsächlich ist es so, dass mit den Worten der Bibel (im Schöpfungsbericht, AT, genauer Gen) der Herr am siebten(=letzten) Tage ruhte, das war natürlich der “Sabbat”, also der Samstag – natürlich in jüdischer Tradition. Die christliche Überlieferung greift das auf (NT). Jesus wird vor dem Passah(/Pessach)Fest hingerichtet (nämlich am KarFREITAG) und soll am Festtag nicht am Kreuz hängenbleiben, deswegen wird er – entgegen der Gewohnheit – sofort vom Kreuz abgenommen und ins Grab gelegt. So hängt er nicht am Sabbat tot am Kreuz sondern hält “Grabesruhe” (in Übereinstimmung mit dem Schöpfungsbericht “ruht der Herr”). Am “dritten Tag” (das ist dann der Sonntag) ist er nicht mehr im Grab sondern “auferstanden”. Eine Formulierung, die in jeder katholischen Messe (also nicht nur in einer einzelnen “verbohrten” amerikanischen christlichen Gruppierung) vorkommt, lautet: ”...und so feiern wir den ERSTEN Tag der Woche als den Tag seiner Auferstehung…” – klingt nicht mehr nach Wochenende, oder? Der Sonntag heißt dann auch in romanischen Sprachen nicht “SONN”-Tag sondern “Domenica / Dimanche etc.” = “Tag des Herrn”. Es ist der Tag NACH dem Ruhetag, nach dem Sabbat. Vielleicht liegt das Problem darin, dass wir heute selbstverständlich 2 Ruhetage als Wochenende bezeichnen und nicht mehr nur noch einen. Aber das wird sich sicher mit der Zeit (Krise, Krise, Krise) ändern…
    So, jetzt genug geklugsch…rt.

Diese Internetseite wurde von Wordpress zusammenebastelt und besteht aus geprüftem XHTML und CSS.
Das hat viele Vorteile.

Weitere Seiten mit ähnlichen Vorteilen preisen gutes Webdesign an oder enthalten Texte.
So ist das Leben eben.
© Kronn/2003-2005

Mein Server hat, nebenbei gesagt, 0,334 Sekunden benötigt, das hier zu fabrizieren.
War aber nicht böse gemeint.