Kalender auf dem lokalen Rechner


Warum auf dem lokalen Rechner?

Ich mag gern Kalender mit persönlichen Bildern. Das ist der Hauptgrund dafür, Kalender vollständig auf dem lokalen Rechner zu pflegen. Auf dem lokalen Rechner sind Änderungen einfach.

Als Voraussetzung braucht man nur die Möglichkeit, Dateien aus dem Web herunterladen zu können (z.B. wget), ein Programm zur Anwendung von XSLT-Transformationen (z.B. xsltproc) und einen nicht zu alten Webbrowser (z.B. Firefox). Sie können die Kalender-Dateien im Browser öffnen und ausdrucken.

Zusätzlich zu der hier beschriebenen Vorlage habe ich auch eine Vorlage für Kalender im Querformat mit quadratischen Bildern.

Um Bilder für den Kalender aufzubereiten, zum Beispiel auf einen quadratischen Ausschnitt zuzuschneiden, benutze ich Gimp.

Die Verzeichnis-Struktur

Kalenderdatei

Im Unterschied zu den Kalendern der Website steht jede Kalenderdatei für eine Sprache und ein Land. Das Attribut kalenderbilder/@xml:lang bezeichnet die Sprache (für die Lokalisierungsdatei und die Hilfe) und das Land (für die Kalender-Grunddaten). Wenn der Wert das Zeichen „-” enthält, hat er die Form LANG-COUNTRY. LANG steht für die Kennung einer Sprache und COUNTRY für die Kennung eines Landes. Wenn der Attributwert das Zeichen „-” nicht enthält, ist er zugleich Kennung des Landes und der Sprache. Ich selbst habe Kalender für Deutschland in deutscher Sprache und für China in chinesischer Sprache.

Das Element t enthält hier den Titel in der einen Sprache.

Das Element <i>BILDNAME</i> verweist auf die Bilddatei img/BILDNAME.jpg.

Die s-Elemente, die in den Web-Kalendern auf ein Bild in einer Bildergeschichte verweisen, gibt es hier nicht.

Als Beispiel kann man eine Kalenderdatei der Website herunterladen, zum Beispiel „Puppen 2018”. Die Transformation src/web2local.xslt passt die Datei an die lokale Verwendung an:

user:~/kalender$ # Hilfstransformation herunterladen
user:~/kalender$ addr=http://kleider.herbaer.de/source/lockal/web2local.xslt
user:~/kalender$ tr=src/web2local.xslt
user:~/kalender$ wget --output-document=$tr $addr
user:~/kalender$ # Kalenderdatei herunterladen (Punkt am Ende!)
user:~/kalender$ addr=http://kleider.herbaer.de/kal/2018/puppen.xml.
user:~/kalender$ file=puppen_web.xml
user:~/kalender$ wget --output-document=$file $addr
user:~/kalender$ # lokale Version deutsch
user:~/kalender$ xsltproc --stringparam lang de $tr $file > puppen_de.xml
user:~/kalender$ # lokale Version chinesisch
user:~/kalender$ xsltproc --stringparam lang zh $tr $file > puppen_zh.xml
user:~/kalender$ # puppen_web.xml wird noch zum Herunterladen der Bilddateien gebraucht.

Grunddaten

Die Datei KALENDER/b/JAHR/COUNTRY.xml enthält die Kalenderdaten mit den Feiertagen des Jahres JAHR für das Land COUNTRY.

Am einfachsten laden Sie die Grunddaten-Datei von der Website herunter. Dort ist auch beschrieben, wie Sie die Grunddaten-Datei selbst erstellen können. Die verwendeten Ländercodes sind hier aufgelistet. Die Grunddaten für China und Deutschland für 2022 laden Sie so herunter:

user:~/kalender$ # Kalender-Grunddaten 2022 China (Punkt am Ende!)
user:~/kalender$ addr=http://kleider.herbaer.de/kal/b/2022/CN.xml.
user:~/kalender$ # lokal verwende ich das Sprachkürzel zh auch für das Land China
user:~/kalender$ file=b/2022/zh.xml
user:~/kalender$ wget --output-document=$file $addr
user:~/kalender$ # Kalender-Grunddaten 2022 Deutschland (Punkt am Ende!)
user:~/kalender$ addr=http://kleider.herbaer.de/kal/b/2022/DE.xml.
user:~/kalender$ file=b/2022/de.xml
user:~/kalender$ wget --output-document=$file $addr

Bilder

Das Verzeichnis img enthält JPEG-Bilddateien mit der Dateinamensendung .jpg. Das Seitenverhältnis von Breite zu Höhe ist vorzugsweise 2 : 3.

Das Element <i>BILDNAME</i> in einer Kalenderdatei KALENDER/KALENDERNAME.xml verweist auf die Bilddatei KALENDER/img/BILDNAME.jpg.

Um die Bilddateien zu einem Beispiel-Kalender der Website herunterzuladen, laden Sie am einfachsten zunächst die Datei KALENDER/src/imgids.xslt herunter. Diese liefert die relativen Pfade der Bilder. So laden Sie die Bilddateien des Beispiels herunter:

user:~/kalender$ # Hilfstransformation herunterladen
user:~/kalender$ addr=http://kleider.herbaer.de/source/lockal/imgids.xslt
user:~/kalender$ tr=src/imgids.xslt
user:~/kalender$ wget --output-document=$tr $addr
user:~/kalender$ cd img
user:~/kalender/img$ for f in $(xsltproc ../$tr ../puppen_web.xml)
> do
> wget http://kleider.herbaer.de/$f
> done

Unterverzeichnis src

Das Unterverzeichnis src enthält die oben aufgelisteten Stildateien, die zur Darstellung der Kalender nötig sind.

Die Datei KALENDER/src/kal.xslt ist eine vereinfachte Version der entsprechenden Datei der Website-Kalender.

Die Dateien KALENDER/src/kal.js (Download) und KALENDER/src/kal.css (Download) sind die Dateien der Website-Kalender. Sie dienen der Darstellung im Browser.

Die Datei KALENDER/src/prt.css (Download) dient der Darstellung des Ausdrucks. In meinem Browser (Firefox ESR 52) musste ich in der Vorgabe-Einstellung der Druckseite die Kopf- und Fußzeilen löschen. Den oberen Seitenrand habe ich auf Null gesetzt. Die Kalenderbilder und die Schrift konnte ich vergrößern, aber dann passte bei einem älteren Browser eine Kalenderseite nicht mehr auf ein A4-Blatt. Probieren Sie verschiedene Schriftgrößen, Bildgrößen und Abstände aus!

Die Dateien KALENDER/src/kal_help.js (Download) und KALENDER/src/kal_help.css (Download) dienen zur Darstellung der Hilfe.

Im Unterverzeichnis KALENDER/src liegen auch die sprachabhängigen Dateien (Hilfe, Texte zur Lokalisierung) Es ist das geeignete Verzeichnis für weitere Hilfsdateien.

Sprachabhängige Dateien

Die Hilfe-Dateien KALENDER/src/kal_help.xhtml.LANG gibt es in verschiedenen Sprachen. Viele der hier aufgeführten Sprachcodes LANG sind verfügbar. Die Hilfe-Dateien erfordern im Vergleich zu den Website-Versionen kleine Anpassungen. Die Transformation mkhelp.xslt passt die Website-Version zur Verwendung mit lokalen Kalendern an. So erzeugen Sie die Hilfe-Dateien in Chinesisch und Deutsch:

user:~/kalender/src$ # Hilfstransformation herunterladen
user:~/kalender/src$ wget http://kleider.herbaer.de/source/lockal/mkhelp.xslt
user:~/kalender/src$ # deutsch
user:~/kalender/src$ file=kal_help.de
user:~/kalender/src$ addr=http://kleider.herbaer.de/kal/s/kal_help.xhtml.de.
user:~/kalender/src$ wget --output-document=$file $addr
user:~/kalender/src$ xsltproc mkhelp.xslt $file > kal_help.xhtml.de
user:~/kalender/src$ rm $file
user:~/kalender/src$ # chinesisch (vereinfacht)
user:~/kalender/src$ file=kal_help.zh
user:~/kalender/src$ addr=http://kleider.herbaer.de/kal/s/kal_help.xhtml.zh.
user:~/kalender/src$ wget --output-document=$file $addr
user:~/kalender/src$ xsltproc mkhelp.xslt $file > kal_help.xhtml.zh
user:~/kalender/src$ rm $file

Schließlich benötigen Sie für jede Sprache eine Lokalisierungsdatei KALENDER/src/local.xml.LANG. Sie können Sie von der Web-Adresse http://kleider.herbaer.de/local/local.xml.LANG. (mit Punkt am Ende!) herunterladen:

user:~/kalender$ # Deutsch (Punkt am Ende!)
user:~/kalender$ addr=http://kleider.herbaer.de/local/local.xml.de.
user:~/kalender$ file=src/local.xml.de
user:~/kalender$ wget --output-document=$file $addr
user:~/kalender$ # Chinesisch (Punkt am Ende!)
user:~/kalender$ addr=http://kleider.herbaer.de/local/local.xml.zh.
user:~/kalender$ file=src/local.xml.zh
user:~/kalender$ wget --output-document=$file $addr

Zusammenfassung

Das folgende Skript fasst alle Schritte zusammen, die die nötigen Dateien für Kalender auf Ihrem Rechner erstellen. Es ist ist im Verzeichnis KALENDER (als aktuellem Verzeichnis) auszuführen.

#!/bin/bash

# Hier evtl. das gewünschte Kalenderjahr und/oder Basis-URL einsetzen
jahr=$(date +%Y)
# jahr=2022
baseurl=http://kleider.herbaer.de

# Unterverzeichnisse anlegen
for d in src b img
do
  [[ -e $d ]] || mkdir $d
done

# Dateien, die keine Anpassung erfordern
for n in kal.xslt imgids.xslt web2local.xslt mkhelp.xslt
do
   file=src/$n
   addr=$baseurl/source/lockal/$n
   wget --output-document=$file $addr
done
for n in kal.js kal.css prt.css kal_help.js kal_help.css
do
   file=src/$n
   addr=$baseurl/source/kalender/$n
   wget --output-document=$file $addr
done

# Kalender-Grunddaten für Deutschland und China
# Lokal benutze ich den Sprachcode auch zur Bezeichnung der Länder
# anstelle des Länder-Codes
# Kalender-Grunddaten
# China: Länderkennung CN, Sprachkennung zh
# Deutschland: Länderkennung DE, Sprachkennung de
[[ -e b/$jahr ]] || mkdir b/$jahr
for code in zh-CN de-DE
do
  lang=${code%-*}
  country=${code#*-}
  addr=$baseurl/kal/b/$jahr/$country.xml.
  file=b/$jahr/$lang.xml
  wget --output-document=$file $addr
done

# Sprachabhängige Dateien
for lang in de zh
do
  file=src/local.xml.$lang
  addr=$baseurl/local/local.xml.$lang.
  wget --output-document=$file $addr
  addr=$baseurl/kal/s/kal_help.xhtml.$lang.
  file=src/kal_help.xhtml
  wget --output-document=$file $addr
  xsltproc --stringparam lang $lang src/mkhelp.xslt $file > $file.$lang
  rm $file
done

# Beispiel-Kalender
addr=$baseurl/kal/2018/puppen.xml.
name=puppen
wget --output-document=$name $addr
for lang in de zh
do
  xsltproc --stringparam lang $lang --stringparam year $jahr \
    src/web2local.xslt $name > ${name}_${jahr}.$lang.xml
done
for bild in $(xsltproc src/imgids.xslt $name)
do
  addr=$baseurl/$bild
  file=img/${bild##*/}
  wget --output-document=$file $addr
done
rm $name

Nun können Sie die Kalenderdatei(en) und die Stildateien bearbeiten und eigene Bilder einsetzen. Sie können die Kalenderdaei(en) im Browser öffnen und ausdrucken. Wenn Sie den Kalender als PDF-Datei mein_kalender.pdf gespeichert haben, können Sie auf Debian-Systemen mit dem Befehl pdftoppm aus dem Paket poppler-utils die einzelnen Kalenderblätter als JPEG-Dateien speichern:

user:~/kalender$ pdftoppm -r 300 -jpeg mein_kalender.pdf mein_kalender