Frage
Wie entwerfe ich meine Webseite, so dass unterschiedliche internationale Datumsformate dargestellt werden können?
Besucher einer Website aus verschiedenen Ländern können ein Datumsformat falsch verstehen. Das Format MM/TT/JJ ist für US-Amerikaner eindeutig. In Europa wird hauptsächlich das Format TT/MM/JJ verwendet. Japan verwendet JJ/MM/TT. Die Separatoren können Slashs, Striche oder Punkte sein.In manchen Ländern werden kleine Zahlen mit einer vorstehenden Null ergänzt, andere lassen diese weg. Angenommen ein gebürtiger Japaner liest eine im amerikanischen Englisch verfasste Webseite aus Deutschland die das Datum 03/04/02 enthält. Wie interpretiert er dieses Datum?
Antwort
Ihr erster Impuls ist vielleicht anzunehmen, dass das Problem bei der Übersetzung der Website in andere Sprachen gelöst wird - d.h. lass den Übersetzter das Problem lösen. Widerstehen Sie diesem Impuls. Wollen Sie wirklich zwei Kopien des Dokumentes für eine englische und eine amerikanische Version pflegen, die sich nur anhand des Datumsformates unterscheiden? Auf jeden Fall müssen Sie mit mehrsprachigen Lesern umgehen, wie dem im oben gezeigten Beispiel.
Sie haben hierzu drei Möglichkeiten, alle mit Vor- und Nachteilen:
- Ein ortsunabhängiges Format verwenden
- Offensichtliche Monats- und Jahresangaben
- Den HTTP Accept-Language-Header verwenden
Option 1: Ein ortsunabhängiges Format verwenden
ISO 8601 spezifiziert das Format YYYY-MM-DD. 2003-04-02 ist eindeutiger als 03/04/02. (Manche modifizieren das ISO-Format und verwenden ein Kürzel für den Monat, um ihn von der Tagesangabe zu trennen. Z.B. 2003-Apr-02, jedoch ist dies nun nicht mehr ortsunabhängig.)
Pro:
- Die Datumsangabe ist eindeutig.
- ISO 8601 ist für den Computer leicht handhabbar. Wird eine Liste mit mehreren Daten auf normale Art, also buchstabenabhängig, sortiert, entsteht eine chronologisch geordnete Liste.
Contra:
- ISO 8601 ist für Menschen schwer lesbar. Menschen bevorzugen ihr "natürliches" Datumsformat.
- Es werden mehr Zeichen benötigt. Bei einem Datum innerhalb eines Absatzes ist das irrelevant. Enthält jedoch ein Dokument eine Tabelle mit einigen Spalten, die Datumsangaben enthalten, könnte der zusätzlich benötigte Platz eine Bedeutung haben, besonders wenn Sie ein Layout entwerfen, das bereits verkleinert wurde.
- Es ist besonders in Ländern benutzerunfreundlich, in denen ein alternativer Kalender verwendet wird (z.B. in Thailand bevorzugt den buddhistischen Kalender).
Option 2: Offensichtliche Monats- und Jahresangaben
Hierzu verwenden Sie einen Namen für den Monat (abgekürzt oder vollständig) und eine vierstellige Zahl für alle Jahresangaben des gregorianischen Kalenders. Zum Beispiel: 2. April 2003.
Pro:
- Die Datumsangabe ist eindeutig.
- Sie ist für Menschen leicht verständlich. Menschen bevorzugen ihr "natürliches" Datumsformat.
Contra:
- Es ist für den Computer schlechter handzuhaben, wenn es um die Sortierung, etc. geht.
- Es werden mehr Zeichen benötigt. In manchen Ländern muss selbst die Abkürzung des Monats mehr als drei Buchstaben haben. (In Frankreich sind die ersten drei Buchstaben der Monate Juni und Juli gleich, Juin und Juillet). Hierfür mehr als drei Zeichen zu erlauben, verschärft die Probleme mit dem Platz.
Option 3: Den HTTP Accept-Language-Header verwenden
Der HTTP Accept-Language-Header bestimmt nur die Spracheinstellungen des Benutzers, wird aber ebenfalls gewöhnlich für die Ortsangabe verwendet.
Die Methode funktioniert gut bei dynamisch generierten Web-Dokumenten, wenn auf einer Seite ein Datum aus einer im Hintergrund gelagerten Datensammlung eingefügt werden soll, sofern die Erwartungen eines Benutzers an ein Datumsformat klar sind. Ausschlaggebend ist eher der sprachliche Kontext als nur die Einstellungen des Browsers. Zum Beispiel:
- Das Einfügen eines Datums aus einer Datenbank auf einer japanischen Seite im japanischen Format wäre sehr hilfreich für den Benutzer.
- Ein Japaner, der das generierte Datum 03/04/02 in einem englischen Dokument liest, könnte fälschlicherweise annehmen, dass das englische Datumsformat verwendet wurde.
- Die Darstellung eines generieten Datums in japanischen Datumsformat, wie 2003年4月2日, auf einer englischen Seite erscheint dagegen fehl am Platz.
Wie dies umgesetzt wird, ist unterschiedlich und abhängig von Ihrer Entwicklungsumgebung. Hier sind einige Hinweise für die gängigsten Umgebungen.
Java/JSP
Rufen Sie die Methode getLocale des ServletRequest oder des HttpServletRequest Objekts auf. Verwenden Sie das erhaltene Locale Objekt, um DateFormat aufzurufen. Beachten Sie, dass das SHORT Format nur Zahlen verwendet. Wenn Sie eindeutige Formate wünschen, verwenden Sie FULL. In einigen Ländern ist selbst LONG numerisch.
Beachten Sie auch ICU4J seit es mehr up to date Daten (und mehr Funktionalität) als die JDK-Programme enthält.
ASP
Verwenden Sie Request.ServerVariables('HTTP_ACCEPT_LANGUAGE'), um die Benutzer-Einstellungen zu erhalten. Ermitteln Sie die erste Angabe von der Liste der akzeptierten Länder. Sie müssen ein eigenes Mapping von der Ortsangabe in Buchstaben zu einem nummerischen Bezeichner durchführen. Setzen Sie Session.LCID auf den resultierenden Wert. Rufen Sie FormatDateTime zur Formatierung des Datums auf.
Verwenden Sie vbLongDate, um Mehrdeutigkeit zu vermeiden.
Perl
Verwenden Sie $ENV{'HTTP_ACCEPT_LANGUAGE'}, um die bevorzugte Sprache zu erhalten und POSIX:strftime zur Formatierung der Datumswerte. Sie müssen ein eigenes Mapping von den Sprachwerten zu dem Formatierungsstring durchführen.
Zusammenfassung
Es gibt keine ideale Lösung für die Problematik. Wägen Sie die Möglichkeiten ab und entscheiden Sie gemäß Ihren Prioritäten und Ihrer Sachlage.
Ist aus der Sicht des Benutzers eine Doppeldeutigkeit möglich, ist es üblich Namen für den Monat und vierstellige Jahreszahlen für Daten des gregorianischen Kalenders anzugeben oder zumindest auf der Seite anzugeben, wie die Daten zu interpretieren sind.
Datumsangaben können durch dynamische Technologien, zur Anpassung an den sprachlichen Kontext der Seite, neu formatiert werden.
Übrigens
Manche haben den Entwurf eines <date>-Tags empfohlen, das die Datumsangaben anhand der Ortsangaben des Benutzers darstellen würde. Dies neigt zur gleichen Problematik, wie sie das Beispiel des Japaners für die dynamische Generierung des Datums beschreibt. Das angemessene Format ist öfters abhängig vom sprachlichen Kontext der Seite, als von der Plattform des Benutzers.
Literaturhinweise
ServletRequest API Beschreibung, inklusive der getLocale Methode
Verwendung der Java-Klasse DateFormat
Über die FormatDateTime Funktion in VBScript
Datum-Formatierung im .NET Framework
Java/JSP Beispiel-Code