Angabe der Sprache in HTML

Question

Wie sollte ich die Sprache des Inhalts auf meinen HTML-Seiten angeben?

Kurze Antwort

Verwenden Sie immer ein Sprachattribut im html-Tag, um die Sprache des Textes auf ihrer Seite anzugeben. Wenn die Seite Inhalt in einer weiteren Sprache enthält, fügen Sie ein Sprachattribut zu dem Element hinzu, das diesen Inhalt umschließt.

Verwenden Sie das lang-Attribut für Seiten, die als HTML ausgeliefert werden, und das xml:lang-Attribut für Seiten, die als XML ausgeliefert werden. Für XHTML 1.x und polyglotte HTML5-Dokumente verwenden Sie beide Attribute gemeinsam.

Verwenden Sie die Sprachkürzel aus dem IANA-Register für Sprachkürzel. Dieses inoffizielle Tool zum Nachschlagen von Sprachkürzeln bietet eine nutzer­freundliche Oberfläche für das IANA-Register.

Verwenden Sie verschachtelte Elemente, wenn Elementinhalt und Attributwert bei einem Element in verschiedenen Sprachen sind.

Details

Grundlagen

Verwenden Sie immer ein Sprachattribut für das html-Element. Diese Angabe wird an alle anderen Elemente vererbt und setzt damit auch die Basis-Sprache für den Text im head-Element.

Sie sollten die Angabe für das html-Element setzen, nicht für das body-Element, denn das body-Element schließt nicht den Text im head-Element ein.

Wenn Sie auf der Seite Inhalt in einer anderen Sprache haben als in der für das html-Element angegebenen, setzen Sie ein Sprachattribut bei dem Element, das diesen Inhalt umschließt. Dadurch können Sie diesen Inhalt anders stylen oder verarbeiten.

An einigen Stellen in Ihrem Code stoßen Sie auf ein Problem: Wenn Sie mehrsprachigen Text im title-Element haben, können die die verschiedenen Sprachen nicht angeben, denn im title-Element ist nur Text, aber kein Mark-up erlaubt. Dasselbe gilt für Text in Attributen. Für dieses Problem gibt es gegenwärtig keine befriedigende Lösung.

Die Wahl des richtigen Attributs

Wenn Ihr Dokument als HTML ausgeliefert wird (d.h. als text/html), verwenden Sie das lang-Attribut, um die Sprache des Dokuments bzw. eines Textabschnitts anzugeben. Um bspw. Französisch als Basis-Sprache anzugeben:

<html lang="fr">

Wenn Sie XHTML 1.x oder polyglotte HTML5-Dokumente als text/html ausliefern, verwenden Sie sowohl das lang-Attribut als auch das xml:lang-Attribut bei jeder Sprachangabe. Das xml:lang-Attribut dient zur Angabe der Sprachinformation in XML. Stellen Sie sicher, dass beide Attribute denselben Wert haben.

<html lang="fr" xml:lang="fr" xmlns="http://www.w3.org/1999/xhtml">

Das xml:lang-Attribut ist wirkungslos, wenn die Datei als HTML verarbeitet wird, es übernimmt aber die Funktion vom lang-Attribut, sobald das Dokument als XML verarbeitet wird. Das lang-Attribut ist in XHTML erlaubt und kann auch von Browsern beachtet werden. Wenn Sie andere XML-Parser verwenden (wie bspw. die lang()-Funktion in XSLT), können Sie nicht davon ausgehen, dass das lang-Attribut beachtet wird.

Wenn Ihre Seite als XML ausgeliefert wird (d.h. mit einem Medientypen wie application/xhtml+xml), benötigen Sie kein lang-Attribut. Das xml:lang-Attribut allein genügt.

<html xml:lang="fr" xmlns="http://www.w3.org/1999/xhtml">

Was tun, wenn Elementinhalt und Attributwerte in verschiedenen Sprachen sind?

Manchmal ist der Text in einem Attributwert in einer anderen Sprache als der Inhalt dieses Elements. In der rechten oberen Ecke dieser Seite befinden sich bspw. Links zum englischen Original und zu übersetzten Versionen. Der Linktext gibt die Sprache der Zielseite in der jeweiligen Zielsprache an, ein zugehöriges title-Attribute enthält den Hinweis in der Sprache der aktuellen Seite:

Screenshot, der ein Tooltip mit dem Wort „Spanisch“ zeigt, der beim Text „Español“ erscheint

Wenn Ihr Code folgendermaßen aussieht, würde das Sprachattribut angeben, dass nicht nur der Elementinhalt, sondern auch der Text im title-Attribut auf spanisch ist. Das ist offensichtlich nicht der Fall.

 Achtung! Diesen Code nicht verwenden!

<a lang="es" title="Spanisch" href="qa-html-language-declarations.es">Español</a>

Hängen Sie stattdessen das Attribut mit dem anderssprachigen Text an ein anderes Element, wie im folgenden Beispiel gezeigt, wobei das span-Element die Sprachangabe de vom html-Element erbt.

<span title="Spanisch"><a lang="es" href="qa-html-language-declarations.es">Español</a></span>

Und wenn es kein Element gibt, woran man das Attribut hängen könnte?

Wenn Sie die Sprache für einen Inhalt angeben möchten, der nicht in Markup eingeschlossen ist, schließen Sie ihn in ein span- bzw. div-Element ein. Hier ein Beispiel:

<p>Auf chinesisch würde man <span lang="zh-Hans">中国科学院文献情报中心</span> sagen.</p>

Werte für Sprachattribute angeben

Um sicherzugehen, dass alle Nutzerprogramme verstehen, welche Sprache Sie meinen, sollten Sie bei Sprachangaben dem Standard folgen. Eventuell müssen Sie auch berücksichtigen, wie gemäß dem Standard auf verschiedene Dialekte verwiesen wird, z.B. amerikanisches bzw. britisches Englisch, die sich deutlich in Rechtschreibung und Aussprache unterscheiden.

Die Regeln für gültige Werte von Sprachattributen werden in der IETF-Spezifikation BCP 47 beschrieben. Zusätzlich zur Festlegung, wie man einfache Sprachkennzeichnungen verwendet (wie bspw. en für Englisch oder fr für Französisch), beschreibt BCP 47 auch, wie man Sprachkennzeichnungen zusammensetzt, die die Angabe von regionalen Dialekten, Schriften und anderen mit der jeweiligen Sprache verbundenen Varianten ermöglichen.

BCP 47 enthält und erweitert die Menge der ISO-Sprachcodes und -Ländercodes. Um die passenden Codes zu finden, schlagen Sie im IANA-Register für Sprachkürzel nach.

Als kurze, aber dennoch umfassende Einführung in die Syntax der Sprachkennzeichnungen nach BCP 47 lesen Sie Sprachkennzeichnungen in HTML und XML. Zur Hilfe bei der Wahl der richtigen Sprachkennzeichnung aus der Fülle der möglichen Kürzel und deren Kombinationen lesen Sie Eine Sprachkennzeichnung wählen.

Weitere Informationen

Metadaten über die Sprache des Zielpublikums angeben

Wenn Sie Metadaten erstellen wollen, die die Sprache des Zielpublikums angeben und nicht die Sprache des Textes, lassen Sie den Server diese Information im HTTP-Header Content-Language senden. Wenn Ihr Zielpublikum mehrere Sprachen spricht, erlaubt der HTTP-Header eine kommagetrennte Liste von Sprachen.

Hier ein Beispiel eines HTTP-Headers, der die Ressource als Mix aus Englisch, Hindi und Panjabi ausweist:

Content-Language: en, hi, pa

Dieser Ansatz ist wirkungslos, wenn die Seite nicht von einem Webserver, sondern von der Festplatte oder einer ähnlichen Quelle aufgerufen wird. Es gibt gegenwärtig keinen allgemein funktionierenden Weg, diese Art von Metadaten innerhalb der Seite unterzubringen.

In der Vergangenheit haben viele ein meta-Element verwendet, in dem das http-equiv-Attribut auf Content-Language gesetzt wird. Wegen andauernden Irritationen und unterschiedlichen Implementierungen dieses Elements erklärt die HTML5-Spezifikation dies für nicht normgerecht in HTML. Sie sollten das folglich nicht mehr verwenden.

Zur Rückwärtskompatibilität beschreibt HTML5 einen Algorithmus, der – unter bestimmten Bedingungen – die Basis-Sprache des Inhalts anhand der Content-Language-Information aus dem HTTP-Header oder einem meta-Element errät. Das ist jedoch nur ein Fallback-Mechanismus für Fälle, wenn kein Sprachattribut im html-Tag verwendet wird. Wenn Sie das Sprachattribut im html-Tag verwenden – was Sie immer tun sollten –, sind diese Fallbacks irrelevant.

Für weitere Information über Content-Language in HTTP bzw. meta lesen Sie HTTP-Header, meta-Elemente und Sprachinformationen.

Dinge, die nicht im Zusammenhang mit Sprachangaben stehen

Der Vollständigkeit halber sollen noch einige Dinge erwähnt werden, die nicht im Zusammenhang mit Sprachangaben stehen.

1. Es ist nicht möglich, die Sprache des Inhalts mittels CSS anzugeben.

2. Die DOCTYPE-Deklaration, mit der jede XHTML-Datei beginnen sollte, könnte etwas enthalten, das für einige wie eine Sprachangabe aussehen könnte. Der DOCTYPE im folgenden Beispiel enthält EN, was für „Englisch“ steht. Diese Angabe bezieht sich jedoch auf die Sprache des zugehörigen Schemas – das hat nichts mit der Sprache des Dokuments selbst zu tun.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

3. Manche nehmen an, dass Informationen über die natürliche Sprache aus der Zeichencodierung gewonnen werden kann. Die Zeichencodierung ermöglicht aber keine eindeutige Identifikation der natürlichen Sprache. Dazu wäre eine Eins-zu-eins-Beziehung zwischen Codierung und Sprache zwingend; eine solche gibt es aber nicht. Eine Zeichencodierung kann für viele Sprachen verwendet werden, man kann bspw. mit Latin-1 (ISO 8859-1) sowohl Französisch als auch Englisch und viele weitere Sprachen codieren. Außerdem kann die Zeichencodierung für eine Sprache variieren, man kann bspw. für Arabisch Codierungen wie Windows-1256, ISO 8859-6 oder UTF-8 verwenden.

All diese Zeichencodierungen sind heutzutage allerdings kaum noch relevant, da sämtliche Inhalte in UTF-8 codiert werden sollten, was die allermeisten Sprachen mit einer einzigen Zeichencodierung abdeckt.

Dasselbe gilt für die Schreibrichtung. Wie bei Codierungen und Sprachen, so gibt es auch hier nicht immer eine Eins-zu-eins-Beziehung zwischen Sprache und Schrift, und damit auch nicht zwischen Sprache und Schreibrichtung. Aserbaidschanisch bspw. kann in von rechts nach links geschriebener (arabischer) Schrift und in von links nach rechts geschriebener (lateinischer oder kyrillischer) Schrift geschrieben werden, und der Sprachcode az wird für all diese Schriftvarianten verwendet. Markup zur Angabe der Schreibrichtung kann einem Text eine Reihe von Werten zuweisen, die Angabe der Sprache hingegen ist ein einfacher Schalter, der dafür nicht taugt.