HTTP-Header, meta-Elemente und Sprachinformationen

Neben dem lang- oder xml:lang-Attribut auf dem html-Start-Tag können Sie Sprachinformationen auch in HTML-meta-Elementen oder in HTTP-Headern finden, mit denen die entsprechende Seite ausgegeben wird. In diesem Artikel schauen wir, ob diese Methoden nützlich sind, um die Sprache von HTML-Inhalten zu deklarieren, und falls ja, wie sie verwendet werden sollten.

Dieser Artikel dreht sich speziell um Sprachangaben in HTTP-Headern und meta-Elementen. Er stellt keine allgemeine Anleitung dar, Sprachen auf einer HTML-Seite festzulegen: Beachten Sie hierfür Angabe der Sprache in HTML.

Dieser Artikel basiert auf einer Unterscheidung zwischen 1) dem Gebrauch von Metadaten, um das Publikum eines Dokuments zu bestimmen und 2) der Angabe der Sprache, die zur Verarbeitung seines Inhalts gebraucht wird. Wenn Sie sich näher mit dieser Unterscheidung beschäftigen wollen, beachten Sie bitte Types of language declaration.

meta-Element

Sie können ein sprachbezogenenes meta-Element am Anfang einer HTML-Datei vorfinden. Es sieht wie folgt aus:

 Schlechter Code. Nicht kopieren!

<meta http-equiv="content-language" content="de" />

Der content-language-Wert des http-equiv-Attributs wurde von der HTML-Spezifikation als veraltet erklärt, und sollte nicht mehr verwendet werden. Statt dessen sollten Sie immer von einem lang-Attribut auf dem html-Start-Tag Gebrauch machen, um die Sprache des Textes auf einer Seite zu deklarieren.

Wenn Sie mehr darüber erfahren wollen, warum dieser Ansatz veraltet ist, beachten Sie untenstehende Informationen. Um zu lernen, wie das lang-Attribut zu verwenden ist, beachten Sie Angabe der Sprache in HTML.

HTTP-Header

Wenn Sie eine Website oder -ressource von einem Server anfordern, sendet der Server verschiedene Informationen zu dem Objekt zurück, das Sie anfordern (Metadaten). Er benutzt dabei ein Format, das als HTTP-Header bezeichnet wird. Eines der Dinge, die Sie in solchen Metadaten finden können, ist sprachbezogen. Achten Sie auf die letzte Zeile im folgenden Beispiel, welches die zu diesem Artikel gehörende HTTP-Antwort zeigt.

HTTP/1.1 200 OK
Date: Sat, 23 Jul 2011 07:28:50 GMT
Server: Apache/2
Content-Location: qa-http-and-lang.en.php
Vary: negotiate,accept-language,Accept-Encoding
TCN: choice
P3P: policyref="http://www.w3.org/2001/05/P3P/p3p.xml"
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=utf-8
Content-Language: de

Hier ist ein Beispiel eines HTTP-Content-Language-Headers, der die Ressource als Mischung von Englisch, Hindi und Pandschabi deklariert. Anders als beim lang-Attribut auf einem HTML-Element erlaubt der HTTP-Header, eine kommaseparierte Liste von Sprachen anzugeben, sofern das Zielpublikum mehr als eine Sprache spricht.

Content-Language: en, hi, pa

Der Content-Language-Header wird mit einer bestimmten Seite durch Einstellungen auf Server-Seite oder durch serverseitiges Scripting verknüpft. Sie finden einen Content-Language-Header beispielsweise in HTTP-Metadaten, wenn ein Server mehr als eine Fassung einer Ressource in jeweils einer anderen Sprache vorhält. Wenn der Server Informationen benutzt, die er über Sie besitzt, um automatisch eine bestimmte Sprachversion auszuwählen (»Content Negotiation«), wird die ausgewählte Sprachversion im HTTP-Header angegeben.

Der HTTP-Content-Language-Header kann nützliche sprachbezogene Daten zur Seite oder Ressource geben, die aufgerufen wird, aber die HTTP-Spezifikation macht deutlich, dass das Ziel dieser Informationen ist, Metadaten über das avisierte Publikum des Dokuments zu liefern, anstatt die Sprache des Textes selbst anzugeben. Solche Metadaten können dazu verwendet werden, eine geeignete Sprachfassung, Workflow-Management, eine bestimmte Klassifizierung, Suchfunktionalität und ähnliches anzubieten. Beachten Sie hierzu auch, wie von einem HTTP-Header auf die Textsprache geschlossen werden kann.

Dadurch, dass Sprachinformationen im HTTP-Header vom Server gesendet werden, sind diese Informationen nicht verfügbar, wenn auf Ihre Seite von einer Festplatte, einem Memory-Stick oder einem anderen, nicht-serverbasierten Ort zugegriffen wird. Es gibt aktuell keine gemeinhin anerkannte Lösung, um diese Metadaten innerhalb einer Seite wiederzugeben.

Spezifizieren der Textverarbeitungssprache

Das lang-Attribut in HTML sollte dazu verwendet werden, die Sprache der Textinhalte anzugeben, so dass der Browser diese Inhalte korrekt anzeigen und verarbeiten kann (z.B. für Silbentrennung, Formatierung, Rechtschreibprüfung und so weiter). Sie sollten es stets auf dem html-Element einsetzen, und es dann auf allen anderen Elementen gebrauchen, die Fragmente von Inhalten in anderen Sprachen beinhalten.

Wenn Sie den Unterschied zwischen 1) dem Gebrauch von Dateimetadaten zur Identifikation des Publikums eines Dokuments und 2) der Spezifizierung der Sprache zur Verarbeitung des Inhalts besser verstehen wollen, beachten Sie den Artikel Types of language declaration.

Für weitere Informationen, wie das lang-Attribut eingesetzt werden kann, beachten Sie bitte Angabe der Sprache in HTML.

Die Textsprache von einem HTTP-Header ableiten

Wenn auf dem html-Element keine Sprache deklariert wird, nehmen die meisten (aber nicht alle) verbreiteten Browser den Wert für die geltende Textsprache an, der im HTTP-Header gesetzt wird. Selbst in einem Browser, der so vorgeht, wird diese Information nur auf manche Funktionen angewandt, und nicht auf alle, die einen Bezug zu Sprache haben. Die HTML-Spezifikation sagt, dass wenn kein lang-Attribut auf dem html-Element vorliegt, und es auch kein meta-Element gibt, das ein http-equiv-Attribut mit Content-Language setzt, und es nur eine einzelne Sprachangabe in der HTTP-Header-Deklaration gibt, dass ein Browser diese Information verwenden muss, um die für den auf der Seite vorliegenden Text geltende Sprache zu ermitteln.

Da Sie jedoch jederzeit ein Sprachattribut (lang) auf dem html-Element verwenden sollten, und da dieses Sprachattribut die HTTP-Header-Informationen stets überschreibt, wird dies zu einer Randnotiz. Der HTTP-Header sollte nur dazu benutzt werden, Metadaten zum beabsichtigten Publikum des Dokuments als Ganzem zu liefern, und das Sprachattribut auf html, um die Standardsprache des Inhalts zu deklarieren.

Zusätzliche Informationen

Die Informationen in diesem Abschnitt sind wahrscheinlich nur am Rande nützlich, werden aber der Vollständigkeit halber ebenfalls bereitgestellt.

Warum Sie das meta-Element nicht verwenden sollten

Der Gebrauch des meta-Elements innerhalb des head eines Dokuments, mit dem http-equiv-Attribut auf Content-Language lautend, wird nicht von der HTML-4.01-Spezifikation erwähnt. Dennoch gibt es inoffizielle Dokumentation, die die Kennzeichnung von Sprache von HTML-Seiten behandelt, die diese Methode vorschlägt. Dazu gab es HTML-Autorenwerkzeuge, die solche Elemente automatisch erzeugten, wenn Sie in einem Dialog der entsprechenden Software Angaben zur Sprache machten. Hier ist ein Beispiel, das als Sprache Englisch deklariert.

 Schlechter Code. Nicht kopieren!

<meta http-equiv="Content-Language" content="en">

Anders als bei den lang- und xml:lang-Attributen kann der Wert des content-Attributs eine Liste von kommaseparierten Sprachauszeichnungen enthalten. Das folgende Beispiel zeichnet die Hauptsprachen des Dokuments als (in gleichen Teilen) Deutsch, Französisch und Italienisch aus.

 Schlechter Code. Nicht kopieren!

<meta http-equiv="Content-Language" content="de, fr, it">

Wenn der Name des meta-Elements noch keinen eindeutigen Hinweis gibt, sollte die Tatsache, dass der Wert mehrere Sprachen akzeptiert, Hinweis genug sein, dass sich dieses Element um Dokumentmetadaten dreht. Wenn Sie die Sprache eines Textabschnitts kennzeichnen wollen, müssen Sie spezifischer sein – Text kann nur einer Sprache zur Zeit entsprechen. Das meta-Element bietet eine Gelegenheit innerhalb eines Dokuments, Metadaten zur Sprache des avisierten Publikums des Dokuments als Ganzem auszudrücken.

Bis vor kurzem achteten wenige Browser auf dieses Metaelement. Dann fingen einige größere Browser an, darauf zurückzugreifen, wenn kein Sprachattribut auf dem html-Tag vorlag, um die Standardsprache des Dokumenttextes zu bestimmen (wofür Sie eigentlich ein Sprachattribut auf dem html-Start-Tag gebrauchen sollten). Wie dies implementiert wurde, war von Browser zu Browser verschieden und damit nicht zuverlässig.

Aufgrund dieser Geschichte von Konfusion und inkonsistenter Implementierung, die diese Sprachdeklaration umgibt, hat die HTML-Arbeitsgruppe 2011 entschieden, das meta-Element mit http-equiv und Content-Language für nicht-spezifikationsgerecht mit HTML zu erklären. Dies bedeutet, dass Sie dies in HTML (»HTML 5«) nicht mehr verwenden sollten, und es, obgleich dies in früheren Fassungen von HTML nicht ausdrücklich unerlaubt war, auch in anderen Dokumenten nicht einzusetzen.

HTML hat zur Abwärtskompatibilität jedoch auch ein Zugeständnis gemacht. Wenn es ein Metaelement gibt, dessen http-equiv-Attribut einen Wert Content-Language hat, und wenn auf dem html-Start-Tag kein Sprachattribut vorliegt, und wenn das Metaelement einen Wert hat, der eine einzelne Sprache angibt, dann muss der Browser diese Information verwenden, um sie als Sprache des Textes anzunehmen. Dies dient jedoch nur der Abwärtskompatibilität, und Sie sollten diese Methode sonst nicht wählen. Benutzen Sie statt dessen ein Sprachattribut auf dem html-Element.

Dokumentinterne Metadaten

Eine Implikation davon, dass HTML den Einsatz des meta-Elements zur Sprachkennzeichnung fallen lässt, ist dass es nun keinen offensichtlichen Weg gibt, Metadaten über ein Dokument innerhalb des Dokuments anzugeben. Theoretisch wäre dies nützlich für Content-Management-Systeme, Übersetzungsprozesse und ähnliches. Diese Art der Information kann über einen HTTP-Header übertragen werden (wie wir im nächsten Abschnitt sehen werden), aber solche Systeme und Prozesse neigen dazu, mit Dokumenten zu arbeiten, die nicht von einem Server unter Angabe eines HTTP-Headers ausgeliefert werden, wofür Metadaten innerhalb des Dokuments nützlich wären.

Vielleicht kann ein anderer Ansatz wie RDFa eine Möglichkeit darstellen, solche Informationen zukünftig abzubilden.

Die MetaExtensions-Seite des WHATWG-Wikis bietet eine erweiterte Liste von Werten, die als name-Wert des meta-Elements verwendet werden können, obwohl keiner davon bisher akzeptiert wurde. Einer dieser Werte ist dc.language, der dazu dient, Sprache im Rahmen von Dublin Core auszudrücken.

Do not use this <meta name="dc.language" content="en">

Es ist unklar, ob diese Information je von Browsern beachtet wird, oder in welchem Umfang sie von anderen Anwendungen benutzt würde. Die WHATWG-Seite empfiehlt, statt dessen das lang-Attribut zu verwenden. Diese Empfehlung ist gut, um die Textverarbeitungssprache zu deklarieren, aber gibt nicht ihren möglichen Gebrauch als Ausdruck von Metadaten über eine Seite als Ganzes wieder.