Sprachen, Sprachauswahl, Accept-Language, Request.UserLanguages

Welt, von Apollo 17 aus fotografiert (Bild: NASA) Für den Betreiber eines Webangebots ist es wichtig zu wissen, in welchen Sprachen er seine Inhalte anbieten sollte. Die Reihenfolge, in der fremdsprachliche Versionen der bestehenden Inhalte angeboten werden, ergibt sich oft 1:1 aus dem Umsatz in dem jeweiligen Sprachraum.

Neben dem Heimatmarkt ist meist Englisch die erste Wahl für eine Übersetzung. Die USA, England, Australien und Neuseeland stellen eine große Kaufkraft dar. Dazu ist Englisch noch die wichtigste Lingua Franca der Welt, nahezu jeder Schüler der Welt erlernt diese Sprache (mehr oder weniger gut).

Eine Karte der Welt nach gesprochener Sprache hilft bei der Auswahl.

Englischsprachige Regionen(Bild: http://de.wikipedia.org/wiki/Bild:Anglospeak.png)
SpracheMio. Sprecher
Mandarin 867
Englisch 690
Hindi 525
Spanisch 447
Französisch290
Arabisch 290
Russisch 240
Portugiesisch218
Deutsch 155

Hinzu kommen natürlich strategische Überlegungen, z.B. in welchem Land ein Markteintritt erfolgen soll, oder wo die Marktanteile ausgebaut werden sollen.

Neben diesen web-externen Faktoren sollte man auch interne Messwerte der Website selbst hinzuziehen. Hierzu gibt es verschiedene Ansätze, die Besucher einer Site zu segmentieren.

  • Geografische Bestimmung anhand der IP-Nummer
  • Geografische Bestimmung anhand der Zeitzone
  • Auswertung der bevorzugten Sprache

IP-Nummer

Die geografische Zuordnung der Besucher anhand der IP-Nummer ist eine probate Methode, um die staatliche Zugehörigkeit näherungsweise zu ermitteln. Über die verwendete Sprache erhält man aber keinerlei exakte Information. Schwierig ist die Ermittlung der Sprachen für Länder, in denen mehrere Sprachen gesprochen werden, wie die Schweiz, USA oder China.
Ebenso ergeben sich durch weltumspannende Firmennetze Verfälschungen. Ein prominentes Beispiel ist hier der AOL-Internetzugang, der immer zentral über einen Proxy in den USA läuft. Ein AOL-Benutzer ist daher keinem Land zuordbar.

Zeitzone

Die geografische Ermittlung anhand der Zeitzone funktioniert über eine kleine JavaScript-Funktion, die die im Browser eingestellte Uhrzeit oder Zeitzone mit der des Servers vergleicht.

Die größte Schwäche ist hier, das nur der ungefähre Längengrad ermittelbar ist. Im Praxiseinsatz kann diese Methode nur verwendet werden, um den optimalen Zeitpunkt für einen Neustart des Servers zu planen, oder wann das ressourcenintensive Backup gefahren werden sollte. Die Information, zu welchen Zeiten besonders viel los ist auf dem Server, kann man aber auch über eine gewöhnliche Logfile-Analyse gewinnen.

Browser-Spracheinstellung

Bei der dritten Methode wird das vom Browser des Benutzers bei jeder Anfrage mitgesandte Feld Accept-Userlanguage ausgewertet. In diesem Header-Feld stehen ein oder mehrere Sprachen, die der Benutzer beherrscht. Bei einem deutschen Windows XP mit IE7 steht dort "de-DE" für "Deutsch-Deutschland" oder "de-AT" für "Deutsch-Österreich". Bei manchen Browsern hängt die Voreinstellung von der bei der Installation gewählten Sprache ab.

Sprachauswahl-Dialog im IE7

Neben der primären Sprache können weitere Sprachen angegeben werden. Zu jeder Sprache kann ein Prioritätswert angegeben werden im Bereich von 0 bis 1. Fehlt der Prioritätswert, ist von 1, der höchsten Priorität auszugehen. Falls man also nicht die bevorzugte Sprache bedienen kann, sollte man die weiteren Sprachen untersuchen, ob nicht dort etwas dabei ist, was man ausliefern kann.

Im IE7 kann man die eigenen Vorlieben angeben unter:
  Internetoptionen / Allgemein / Sprachen
  / Hinzufügen

Im Firefox findet man es unter:
  Extras / Einstellungen / Erweitert / Sprachen
  / Wählen

Opera:
  Extras / Einstellungen / Allgemein
  / Sprache / Einzelheiten

Die in Deinem Browser konfigurierten Sprachen (ACCEPT-Language):

Code ISO 639-1 Name Nativer Name Prioritätswert
-none found-

 

Beispielhafte Sprachauswahl

Anhand der Accept-Language kann man den Besucher sofort eine möglichst passende Sprachversion anbieten, sofern der Besucher von einer sprachneutralen Einstiegsseite wie dem Wurzelverzeichnis / her kommt. Ein Besucher aus Deutschland würde automatisch in das Verzeichnis /de/ weitergeleitet, ein französisch-sprechender Besucher auf /fr/. Eigene Sites je Sprache sind zu vermeiden, um den PageRank nicht auf zu viele Domains aufzuteilen.

Aber auch, nachdem man eine Sprache für den aktuellen Benutzer ermittelt hat, muss man dem Benutzer die Auswahl einer anderen Sprache ermöglichen. Eventuell sitzt der Besucher ja an einem Computer, wo er die Sprachvoreinstellung nicht ändern kann, oder er ist Gast an einem fremden Rechner in einem fremden Land.

Als Titel einer solchen Sprachauswahl sollte der Name der Sprache in der Landessprache selbst dienen. Für das Deutsche wäre es also deutsch, für Französisch français. Eine Grafik der Flagge des primären Staats ist zwar nett anzusehen, aber nicht optimal für internationale Besucher geeignet. Nicht jeder des Deutschen mächtige kennt die deutsche Flagge, oder kann als US-Amerikaner den Union-Jack richtig zuzuordnen. Außerdem muss sowieso ein Titel her, damit auch Farben- und Sehbehinderte keine Probleme bekommen.

Die Sprachauswahl sollte möglichst überall erscheinen, mindestens aber auf der Einstiegsseite. Ansonsten stellt sich das Problem, wie man einen der aktuellen Sprache nicht mächtigen Benutzer die Möglichkeit anzeigt, wo er die Sprache ändern kann.

<ul>
<li>
<a href="/de/" hreflang="de" lang="de"
class="langsel" id="lang_de" name="lang_de">
Deutsch</a>
</li><li>
<a href="/en/" hreflang="en" lang="en"
class="langsel" id="lang_en" name="lang_en">
English</a>
</li><li>
<a href="/fr/" hreflang="fr" lang="fr"
class="langsel" id="lang_fr" name="lang_fr">
Français</a>
</li>
</ul>

Ein noch selten nutzbare Variante setzt das link-Tag ein. Die Relation rel=alternate weist den Browser auf die fremdsprachlichen Alternativen hin. Diese Variante kann auf jeder Inhalts-Seite mitgeliefert werden, sie wird allerdings bisher in keinem der wichtigen Browser gut unterstützt.

<link rel="alternate" hreflang="de" lang="de" xml:lang="de"
	title="Deutsch" type="text/html" href="/de/" />
<link rel="alternate" hreflang="en" lang="en" xml:lang="en"
	title="English" type="text/html" href="/en/" />
<link rel="alternate" hreflang="fr" lang="fr" xml:lang="fr"
	title="Français" type="text/html" href="/fr/" />
	

Keinesfalls aber darf man unter ein- und derselben URL verschiedene Sprachversionen ausliefern. Das mag für ein Intranet ja noch angehen, aber wer in Suchmaschinenen mit allen Sprachvarianten vertreten sein möchte, sollte von dieser Idee Abstand nehmen.

Request.UserLanguages in .NET / C# auflisten

Anzeige der im aktuellen Browser eingestellten Sprachen:


using System.Globalization;
foreach (string lsLanguage in HttpContext.Current.Request.UserLanguages)
{
	Response.Write(lsLanguage + "<br />\n");
}

Die erste Sprache benutzen, um ein CultureInfo-Objekt zu instanzieren. Dieses Objekt gibt einige Informationen über das Datums- und Zahlenformat.

if (Request.UserLanguages != null && Request.UserLanguages.Length > 0)
{
	try
	{
		return new CultureInfo(Request.UserLanguages[0]);
	}
	}
	catch
	{
		return null;
	}
	return null;
}

 

Auswertung

Als praktische Veranschaulichung hier eine Momentaufnahme der UserLanguages-Auflistungen der aktuellen Online-Sessions einer international genutzten Internetpräsenz.

Haupt-Sprachen

Die Haupt-Sprache wird ermittelt aus der UserLanguages-Auflistung. Hierbei wird ausschließlich das Element mit der höchsten Priorisierung benutzt. Zusätzlich wird die Angabe der Region entfernt, falls vorhanden. Aus en-US wird also en, aus de-DE und de-AT wird de.

# iso Kultur Name Anzahl Prozent
694  
1 de Deutsch Deutsch 360 51,9%
2 en Englisch English 126 18,2%
3 es Spanisch español 52 7,5%
4 it Italienisch italiano 39 5,6%
5 nl Niederländisch Nederlands 34 4,9%
6 ru Russisch русский 21 3,0%
7 fr Französisch français 21 3,0%
8 pl Polnisch polski 9 1,3%
9 sv Schwedisch svenska 8 1,2%
10 pt Portugiesisch Português 6 0,9%
11 he Hebräisch עברית 4 0,6%
12 tr Türkisch Türkçe 3 0,4%
13 cs Tschechisch čeština 3 0,4%
14 zh-CHS Chinesisch (vereinfacht) 中文(简体) 2 0,3%
15 hr Kroatisch hrvatski 1 0,1%
16 * 1 0,1%
17 no Norwegisch norsk 1 0,1%
18 bg Bulgarisch български 1 0,1%
19 lt Litauisch lietuvių 1 0,1%
20 nn 1 0,1%
chart of the user languages

Die Tortengrafik visualisiert die vorherige Tabelle der Haupt-Sprachen.

Sprachen én detail

Diese Tabelle unterscheidet sich von der vorherigen dadurch, das hier der komplette String der primären Sprache ausgewertet wird. Angaben zur Region sind hier also nicht weggekürzt. So wird ein erster Einblick in die regionale Herkunft der Besucher möglich. Seit dem IE7 liefert Microsoft nämlich immer auch die Region, die im Betriebssystem voreingestellt ist, als Angabe mit.

# iso Kultur Name Anzahl Prozent
694  
1 de Deutsch Deutsch 213 30,7%
2 de-de Deutsch (Deutschland) Deutsch (Deutschland) 122 17,6%
3 en-us Englisch (USA) English (United States) 70 10,1%
4 es Spanisch español 52 7,5%
5 en-gb Englisch (Großbritannien) English (United Kingdom) 46 6,6%
6 it Italienisch italiano 31 4,5%
7 de-at Deutsch (Österreich) Deutsch (Österreich) 22 3,2%
8 nl Niederländisch Nederlands 21 3,0%
9 ru Russisch русский 19 2,7%
10 fr Französisch français 15 2,2%
11 pl Polnisch polski 9 1,3%
12 nl-be Holländisch (Belgien) Nederlands (België) 9 1,3%
13 sv Schwedisch svenska 8 1,2%
14 it-it Italienisch (Italien) italiano (Italia) 8 1,2%
15 en Englisch English 7 1,0%
16 pt Portugiesisch Português 6 0,9%
17 nl-nl Holländisch (Niederlande) Nederlands (Nederland) 4 0,6%
18 he Hebräisch עברית 4 0,6%
19 tr Türkisch Türkçe 3 0,4%
20 de-ch Deutsch (Schweiz) Deutsch (Schweiz) 3 0,4%
21 cs Tschechisch čeština 3 0,4%
22 fr-be Französisch (Belgien) français (Belgique) 3 0,4%
23 zh-cn Chinesisch (VR China) 中文(中华人民共和国) 2 0,3%
24 en-ie Englisch (Irland) English (Eire) 2 0,3%
25 ru-ru Russisch (Russland) русский (Россия) 2 0,3%
26 en-au Englisch (Australien) English (Australia) 1 0,1%
27 fr-lu Französisch (Luxemburg) français (Luxembourg) 1 0,1%
28 hr Kroatisch hrvatski 1 0,1%
29 * * * 1 0,1%
30 lt Litauisch lietuvių 1 0,1%
31 fr-fr Französisch (Frankreich) français (France) 1 0,1%
32 nn-no Norwegisch, Nynorsk (Norwegen) norsk, nynorsk (Noreg) 1 0,1%
33 no-no no-no no-no 1 0,1%
34 bg Bulgarisch български 1 0,1%
35 fr-ch Französisch (Schweiz) français (Suisse) 1 0,1%

Eine Gleichverteilung des IE7 über alle Länder vorausgesetzt, kann man hierüber auch schon eine geografische Zuordnung vornehmen. Mit der weiteren Verbreitung des IE7 wird man hierüber recht verlässlich und vor allem extrem einfach eine Zuordnung zu Staaten vornehmen können.

Falsche Angaben

Im Laufe der Zeit finden sich einige merkwürdige Sprachangaben, die entweder durch eine Fehlprogrammierung/Fehlkonfiguration oder eine bewusste Falschangabe sind. Ungültige Werte sollten stillschweigend ignoriert werden, zumal auch einige Suchmaschinen merkwürdige Angaben machen könnten.

Einige defekte Angaben aus der Praxis:

jp, cz
Mit jp ist wahrscheinlich das Land Japan bgemeint. JP ist allerdings keine korrekte Sprachangabe, richtig wäre hier ja für Japanisch. Ebenso gibt es keine Sprache "cz", es ist wahrscheinlich "cs" für Tschechisch gemeint.
zh
Das Chinesisch gibt es nicht. Da eine Site aber meist sowieso nur eine Variante Chinesisch anbietet, sollte man es "naheliegend" interpretieren, z.B. als zh-Hans oder zh-Hant, die beides neutrale Kulturen darstellen.
kr
kr - ist in ISO 3166 das Land Südkorea, die Sprache Koreanisch hat aber das Kürzel ko
Einige Angaben sind zwar korrekt, funktionieren aber in der CultureInfo-Klasse von .NET bisher nicht:
  • nn (norwegisch neu, Nynorsk)
  • nb (norwegisch Buchsprache, Bokmål)
  • no-NO (norwegisch aus Norwegen)
  • es-US (spanisch USA)
  • en-SG (englisch Singapur)
  • en-IN (englisch Indien)
  • so (somalisch)
Hier sollte Microsoft nachbessern, wie sie es schon des Öfteren getan haben: Bis dahin wird kann man z.B. nn in nn-NO wandeln.
field blocked by paranoia-tool xyz
Es gibt Tools, die den Sprach-Header durch einen ähnlichen Spruch ersetzen. Teilweise scheinen sogar Firmen solche Tools unternehmensweit einzusetzen, wahrscheinlich als Proxy. Allerdings schießt sich der Benutzer solcher Verfremdung damit primär selber ins Bein, kann doch die Website dadurch keine Zuordnung mehr zu einer Sprache vornehmen. Nutzen oder gar Gefahr sehe ich keine, hier ist kontraproduktive Paranoia am Werk, denn genau durch diesen Header lässt sich der Besucher jederzeit wiedererkennen, da fast kein anderer so etwas nutzt. Gut gemeint ist nicht immer gut gemacht.
*
Hiermit möchte eine recht unbekannte Suchmaschine wahrscheinlich andeuten, das sie jede lieferbare Sprache frisst. Weglassen wäre allerdings klarer und zudem ressourcensparender. Wenn man keine Präferenzen hat, braucht das nicht mitgeteilt werden.

Sicherheit

Die per Accept-Language übermittelten Daten sind, wie jeder Input von außen, als potentiell gefährlich und Böse anzusehen. Eine Zeitlang hatte ich folgende "Sprache" in meinem Browser eingestellt:
'<script>alert("html-injection")</script>

Viele Sites reagierten sofort beim Aufruf einer Webseite mit einer Fehlermeldung. Bei einigen Sites wurden detaillierte Fehlermeldungen zurückgeliefert. Diese Meldungen nährten den Verdacht, eine SQL-Injection-Möglichkeit gefunden zu haben. Offensichtlich wollte die Webanwendung den übergebenen UserLanguage-String mit einem unsicheren SQL-Statement in einer Datenbank abspeichern. Der einfache Apostroph am Anfang des Strings war der Auslöser.

Wie viele Abstürze von Logfile-Auswertprogrammen es gab, ist dagegen unbekannt. Ebenso, wie viele Personen beim Ansehen der Ergebnisse der internen webgestützten Logfile-Analyse eine unerwartete Alert-Box zu Gesicht bekamen.

Fazit

Mit der Beobachtung der UserLanguages hat man ein einfaches, aber sehr effektives Analysewerkzeug zur Hand. Man kann recht gut die tatsächlich gewünschten Sprachversionen ermitteln. Kostenlos dazu bekommt man einen ungefähren Anhaltspunkt, in welchen Ländern die angebotenen Seiten besonders gefragt sind.

In einer Online-Anzeige der aktuell am System offenen Sessions kann man sehr gut sehen, wie die Sonne rund um die Erde wandert: Bis 12 Uhr mittags Ortszeit dominieren europäische Staaten, erst später stellen die US-Amerikaner die Mehrheit.

Interessant sind Beobachtungen während der Markteinführung in einzelnen Ländern. Insgesamt kann eine solche Auswertung quasi kostenlos so manche Marktanalyse ersparen und helfen, Trends und Besonderheiten rechtzeitig zu erkennen.

Weiterführende Links / Quellen