Mehrsprachigkeit bei Websites, Internationalisierung

Mehrsprachigkeit ist bei Websites exportorientierter Unternehmen keine Seltenheit, sondern ein Muss. Neben Deutsch spielt Englisch die wichtigste Rolle bei der Internationalisierung, aber zunehmend auch "exotischere" Sprachen wie Tschechisch, Russisch, oder gar Chinesisch. Der Exportmarkt bestimmt, welche Sprachen für die Website des Unternehmens eine wichtige Rolle spielen.

Zeichensätze

Das erste Problem sind die Zeichensätze, sobald es weg vom gewohnten ISO-8859-1 geht (oder dessen aktuellerer Variante ISO-8859-15). Dieser Standard deckt nur westeuropäische Sprachen ab, schon beim Tschechischen muß stattdessen ISO-8859-2 gewählt werden. Unübersichtlich bis unmöglich wird das spätestens, wenn weitere Sprachen hinzukommen, oder gar Inhalte verschiedener Sprachen gleichzeitig dargestellt werden müssen.

Zeichensatz-Esperanto Unicode

Seit den 4er-Versionen der Browser und dank aktueller Betriebssysteme ist die Benutzung des Zeichensatz-Esperanto Unicode die Lösung der Wahl. In der 16-Bit-BMP-Variante erlaubt Unicode bis zu 216 = 65.536 Zeichen, die in der Praxis ausreichend sind.
Am eigenen Rechner hat man zwar Zeichensätze, die viele der 65.000 Zeichen auch darstellen können, aber das reicht nicht für alle Sprachen. Wenn man z.B. auch chinesische oder koreanische Zeichen darstellen möchte, kommt man nicht um die Nachinstallation entsprechender Erweiterungen herum. Bei Windows gibt es im Windows-Update für den IE6 eine Reihe von Sprachpaketen, die hierzu dienen. Alternativ kann man in XP über die Systemsteuerung / Ländereinstellungen Sprachpakete nachinstallieren.
Unicode definiert nur die Zeichen und Codes, nicht aber die Übertragung im Web – und hier kommt das Unicode Transformation Format, kurz UTF ins Spiel.

UTF-8

UTF gibt es in verschiedenen Varianten, wobei die Variante UTF-8 die im heutigen Web verträglichste ist. In UTF-8 werden die meisten Zeichen wie gewohnt in nur einem Byte codiert, die Zeichencodes bis 127 entsprechen 1:1 dem altbewährten ASCII. Vorbei sind die Zeiten, da man Umlaute umständlich als ä anstatt einfach ä codieren musste. Im Gegenteil erschweren solche altertümlichen Codierungen sogar die Weiterverarbeitung, und kosten zudem mehr Speicherplatz.
Für das chinesische gibt es zwar Codierungen, die weniger Bytes im Schnitt für Texte benötigen, wie zum Beispiel Big5, aber ein solcher Misch-Masch, der zunehmend weniger unterstützt wird, ist untragbar, wenn man mehr als nur Chinesisch verwalten muss. Zukunft haben auf absehbare Zeit nur Unicode und die UTF-Definitionen.

UTF-8 in ASP.NET

Um UTF-8 im Praxisbetrieb zu nutzen, sind in der web.config-Datei folgende Angaben zu treffen:

<globalization requestEncoding="utf-8" responseEncoding="utf-8" fileEncoding="utf-8" />

Im Editor der Wahl, meist VS.NET 2005, ist beim Menüpunkt Datei / Erweiterte Speicheroptionen die Einstellung Unicode (UTF8 ohne Signatur) - Codepage 65001 zu wählen. Dieses Format macht weniger Probleme als UTF-8 mit Signatur. Die Signatur, auch BOM genannt, kann ältere Browser oder Editoren verwirren, was wohl erst mit der Zeit keine Rolle mehr spielen wird.

Achtung:
Für manche Ausgaben ist es notwendig, weiterhing ISO-8859-1 zu verwenden, um Kompatibilität zu gewährleisten, z.B. falls CSV-Ausgaben auch von älteren Anwendungen benutzt werden müssen. Hier kann man für die spezifische Seite die Codierung umstellen:

Response.ContentEncoding = System.Text.Encoding.GetEncoding("iso-8859-1");

Meta-Tags

In der Theorie eigentlich überflüssig, doch in der Praxis unabdingbar ist das Setzen des Meta-Tags, das den benutzten Zeichensatz angibt. Eigentlich sendet ja schon der Webserver die Informationen über den verwendeten Zeichensatz in den "unsichtbaren" Header-Antworten mit. Ohne eine Angabe im HTML-Quelltext selbt sind aber ansonsten sogar verbreitete Browser (respektive der IE6) manchmal verwirrt, und zwar spätestens, wenn dieselbe Seite aus dem lokalen Cache geholt wird.
Zu Zeichensalat kommt es oftmals auch, wenn man eine solche HTML-Seite vom Browser aus ins Dateisystem abspeichert und danach von dort aus anzeigen möchte. Kaum ein Browser erkennt dabei noch sicher den korrekten Zeichensatz.

Die folgende Angabe gehört daher in den Header-Bereich einer jeden ausgelieferten Webseite:

<meta http-equiv="content-type" content="text/html; charset=utf-8" />

Diese Angabe sollte dabei vor dem title-Tag erscheinen, da ja dort schon fremdsprachige Zeichen vorkommen können, die der Browser ansonsten für eine "Schätzung" - best guess - des verwendeten Zeichensatzes benutzen könnte.

Übrigens:
Ein manchmal gesehenes Meta-Tag mit name="content-type" gibt es nicht, seine Verwendung ist daher unsinnig.

Datenbank

Bei professionellen Websites werden die Daten über ein CMS verwaltet, das die eigentlichen Inhalte in einer Datenbank ablegt. Mehrsprachige Inhalte können schon seit mehr als einem Jahrzehnt in guten Datenbanken im Unicode abgespeichert werden. Beim Microsoft SQL-Server ist hierzu nvarchar oder ntext zu wählen.

Wichtig ist natürlich, für jede Zeile oder jedes Feld zu vermerken, in welcher Sprache es vorliegt. Einfache Tabellen müssen in eine sprachunabhängige Basistabelle und eine relational dazugehörige Tabelle mit einer zusätzlichen Zeile je Sprachversion aufgeteilt werden.

Für die Codierung der Sprachversion bietet sich die ISO 639 an.

Die Sortierung von Datensätzen per ORDER BY oder durch einen gruppierte Index benötigt auch Beachtung, wenn die Anwendung eine sprachspezifische und korrekte Sortierung benötigt.

HTML / XHTML

Im HTML-Quelltext selbst ist die verwendete Sprache anzugeben. Die primäre Sprache einer Seite ist im Header anzugeben:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>

Bei der Angabe ist eine Codierung gemäß RFC 4646 zu verwenden – welche in der Praxis aber die ISO 639-Codes als Teilmenge enthält. Es gibt sogar einen Validator für RFC 4646-Codes.

Wenn einzelne Fragmente der Seite andere Sprachen verwenden, so ist dies durch das lang-Attribut anzuzeigen, das als Universalattribut bei allen Tags verwendet werden kann.

Das Wort <span lang="en">Tag</span> ist ein englisches Wort für Etikett oder Trennzeichen.

Diese Kennzeichnung dient nicht nur Screenreadern für Blinde zur richtigen Aussprache beim Vorlesen, sondern auch Suchmaschinen zur korrekten Einordnung eines Wortes oder Abschnitts, oder Rechtschreibprüfungen.

bdo, dir, ltr und rtl

Nein, mit rtl ist nicht der Sender aus Luxemburg gemeint, sondern es steht für right to left und gibt eine für uns ungewohnte Schreibrichtung wieder, die z.B. im Arabischen oder Hebräischen benutzt wird.
Eigentlich sollte der Browser in Abhängigkeit von den verwendeten Zeichen und der gewählten Sprache die Schreibrichtung automatisch richtig wählen, aber manchmal kann etwas Nachhilfe hier angebracht sein.
Um nun dem HTML-Browser die korrekte Anzeige zu ermöglichen, und gemischtsprachige Inhalte zu ermöglichen, kann man das Universalattribut dir benutzen, oder das spezielle Tag bdo. bdo ist die Abkürzung von bidirectional order, und gibt somit die Schreibrichtung an. ltr ist die für uns gewohnte Schreibrichtung von links nach rechts.

Das Tag bdo im Einsatz: Dies ist ein Test.
Und hier das Universalattribut dir mit dem Wert rtl
Das Universalattribut dir mit dem Wert ltr

Datum und Zahlenangaben

Datums- und Zeitangaben sollten in der Datenbank in der Weltzeit UTC gespeichert werden. Bei der Ausgabe kann dann per .ToLocalTime die Zeit an die konkrete Ortszeit gewandelt werden – oder auch nicht, wenn z.B. eine weltweite Kampagne sich auf einen einzigen Zeitpunkt bezieht.

Bei der Ausgabe eines Datums oder einer Zahl sind die nationalen Besonderheiten zu beachten. So ist zum Beispiel der 12.10.2007 ist im englischen Sprachraum als 10/12/2007 anzuzeigen, die Zahl 1.000.000 ist als 1,000,000 anzuzeigen. Noch komplizierter wird es, wenn man ein Datum in langer Schreibweise mit Monatsnamen z.B. in Arabisch ausgeben muss.
Gottseidank hat .NET für solche Fälle schon einiges vorverdrahtet. Als Beispiel die Ausgabe des aktuellen Datums und einer Zahl in verschiedenen Sprachen:

Kultur Code NativeName Sprache Zahl
Afrikaans (Südafrika)af-ZAAfrikaans (Suid Afrika)31 Augustus 2014 10:13:58 AM123,456.78
Arabisch (Vereinigte Arabische Emirate)ar-AEالعربية (الإمارات العربية المتحدة)31 أغسطس, 2014 10:13:58 ص123,456.78
Arabisch (Bahrain)ar-BHالعربية (البحرين)31 أغسطس, 2014 10:13:58 ص123,456.780
Arabisch (Algerien)ar-DZالعربية (الجزائر)31 أوت, 2014 10:13:58123,456.78
Arabisch (Ägypten)ar-EGالعربية (مصر)31 أغسطس, 2014 10:13:58 ص123,456.780
Arabisch (Irak)ar-IQالعربية (العراق)31 آب, 2014 10:13:58 ص123,456.78
Arabisch (Jordanien)ar-JOالعربية (الأردن)31 آب, 2014 10:13:58 ص123,456.780
Arabisch (Kuwait)ar-KWالعربية (الكويت)31 أغسطس, 2014 10:13:58 ص123,456.780
Arabisch (Libanon)ar-LBالعربية (لبنان)31 آب, 2014 10:13:58 ص123,456.78
Arabisch (Libyen)ar-LYالعربية (ليبيا)31 أغسطس, 2014 10:13:58 ص123,456.780
Arabisch (Marokko)ar-MAالعربية (المملكة المغربية)31 غشت, 2014 10:13:58123,456.78
Arabisch (Oman)ar-OMالعربية (عمان)31 أغسطس, 2014 10:13:58 ص123,456.78
Arabisch (Katar)ar-QAالعربية (قطر)31 أغسطس, 2014 10:13:58 ص123,456.78
Arabisch (Saudi-Arabien)ar-SAالعربية (المملكة العربية السعودية)05/ذو القعدة/1435 10:13:58 ص123,456.78
Arabisch (Syrien)ar-SYالعربية (سوريا)31 آب, 2014 10:13:58 ص123,456.78
Arabisch (Tunesien)ar-TNالعربية (تونس)31 أوت, 2014 10:13:58123,456.780
Arabisch (Jemen)ar-YEالعربية (اليمن)31 أغسطس, 2014 10:13:58 ص123,456.78
Mapudungun (Chile)arn-CLMapudungun (Chile)domingo, 31 de agosto de 2014 10:13:58123.456,78
Aserbaidschanisch (kyrillisch, Aserbaidschan)az-Cyrl-AZАзәрбајҹан (Азәрбајҹан)31 август 2014 10:13:58123 456,78
Aserbaidschanisch (lateinisch, Aserbaidschan)az-Latn-AZAzərbaycan­ılı (Azərbaycan)31 avgust 2014 10:13:58123 456,78
Belarussisch (Belarus)be-BYБеларускі (Беларусь)31 жніўня 2014 10:13:58123 456,78
Bulgarisch (Bulgarien)bg-BGбългарски (България)31 август 2014 г. 10:13:58 ч.123 456,78
Bosnisch (Kyrillisch, Bosnien und Herzegowina)bs-Cyrl-BAбосански (Босна и Херцеговина)31. август 2014 10:13:58123.456,78
Bosnisch (Lateinisch, Bosnien und Herzegowina)bs-Latn-BAbosanski (Bosna i Hercegovina)31. avgust 2014 10:13:58123.456,78
Katalanisch (Katalanisch)ca-EScatalà (català)diumenge, 31 / agost / 2014 10:13:58123.456,78
Tschechisch (Tschechische Republik)cs-CZčeština (Česká republika)31. srpna 2014 10:13:58123 456,78
Walisisch (Vereinigtes Königreich)cy-GBCymraeg (y Deyrnas Unedig)31 Awst 2014 10:13:58123,456.78
Dänisch (Dänemark)da-DKdansk (Danmark)31. august 2014 10:13:58123.456,78
Deutsch (Österreich)de-ATDeutsch (Österreich)Sonntag, 31. August 2014 10:13:58123.456,78
Deutsch (Schweiz)de-CHDeutsch (Schweiz)Sonntag, 31. August 2014 10:13:58123'456.78
Deutsch (Deutschland)de-DEDeutsch (Deutschland)Sonntag, 31. August 2014 10:13:58123.456,78
Deutsch (Liechtenstein)de-LIDeutsch (Liechtenstein)Sonntag, 31. August 2014 10:13:58123'456.78
Deutsch (Luxemburg)de-LUDeutsch (Luxemburg)Sonntag, 31. August 2014 10:13:58123.456,78
Divehi (Malediven)dv-MVދިވެހިބަސް (ދިވެހި ރާއްޖެ)06/11/1435 10:13:58123,456.78
Griechisch (Griechenland)el-GRΕλληνικά (Ελλάδα)Κυριακή, 31 Αυγούστου 2014 10:13:58 πμ123.456,78
Englisch (Karibik)en-029English (Caribbean)Sunday, August 31, 2014 10:13:58 AM123,456.78
Englisch (Australien)en-AUEnglish (Australia)Sunday, 31 August 2014 10:13:58 AM123,456.78
Englisch (Belize)en-BZEnglish (Belize)Sunday, 31 August 2014 10:13:58 AM123,456.78
Englisch (Kanada)en-CAEnglish (Canada)August-31-14 10:13:58 AM123,456.78
Englisch (Großbritannien)en-GBEnglish (United Kingdom)31 August 2014 10:13:58123,456.78
Englisch (Irland)en-IEEnglish (Ireland)31 August 2014 10:13:58123,456.78
Englisch (Jamaika)en-JMEnglish (Jamaica)Sunday, August 31, 2014 10:13:58 AM123,456.78
Englisch (Neuseeland)en-NZEnglish (New Zealand)Sunday, 31 August 2014 10:13:58 a.m.123,456.78
Englisch (Republik Philippinen)en-PHEnglish (Philippines)Sunday, August 31, 2014 10:13:58 AM123,456.78
Englisch (Trinidad und Tobago)en-TTEnglish (Trinidad y Tobago)Sunday, 31 August 2014 10:13:58 AM123,456.78
Englisch (USA)en-USEnglish (United States)Sunday, August 31, 2014 10:13:58 AM123,456.78
Englisch (Südafrika)en-ZAEnglish (South Africa)31 August 2014 10:13:58 AM123 456.78
Englisch (Zimbabwe)en-ZWEnglish (Zimbabwe)Sunday, August 31, 2014 10:13:58 AM123,456.78
Spanisch (Argentinien)es-AREspañol (Argentina)domingo, 31 de agosto de 2014 10:13:58 a.m.123.456,78
Spanisch (Bolivien)es-BOEspañol (Bolivia)domingo, 31 de agosto de 2014 10:13:58 a.m.123.456,78
Spanisch (Chile)es-CLEspañol (Chile)domingo, 31 de agosto de 2014 10:13:58123.456,78
Spanisch (Kolumbien)es-COEspañol (Colombia)domingo, 31 de agosto de 2014 10:13:58 a.m.123.456,78
Spanisch (Costa Rica)es-CREspañol (Costa Rica)domingo, 31 de agosto de 2014 10:13:58 a.m.123.456,78
Spanisch (Dominikanische Republik)es-DOEspañol (República Dominicana)domingo, 31 de agosto de 2014 10:13:58 a.m.123,456.78
Spanisch (Ecuador)es-ECEspañol (Ecuador)domingo, 31 de agosto de 2014 10:13:58123.456,78
Spanisch (Spanien)es-ESEspañol (España, alfabetización internacional)domingo, 31 de agosto de 2014 10:13:58123.456,78
Spanisch (Guatemala)es-GTEspañol (Guatemala)domingo, 31 de agosto de 2014 10:13:58 a.m.123,456.78
Spanisch (Honduras)es-HNEspañol (Honduras)domingo, 31 de agosto de 2014 10:13:58 a.m.123,456.78
Spanisch (Mexiko)es-MXEspañol (México)domingo, 31 de agosto de 2014 10:13:58 a.m.123,456.78
Spanisch (Nicaragua)es-NIEspañol (Nicaragua)domingo, 31 de agosto de 2014 10:13:58 a.m.123,456.78
Spanisch (Panama)es-PAEspañol (Panamá)domingo, 31 de agosto de 2014 10:13:58 a.m.123,456.78
Spanisch (Peru)es-PEEspañol (Perú)domingo, 31 de agosto de 2014 10:13:58 a.m.123,456.78
Spanisch (Puerto Rico)es-PREspañol (Puerto Rico)domingo, 31 de agosto de 2014 10:13:58 a.m.123,456.78
Spanisch (Paraguay)es-PYEspañol (Paraguay)domingo, 31 de agosto de 2014 10:13:58 a.m.123.456,78
Spanisch (El Salvador)es-SVEspañol (El Salvador)domingo, 31 de agosto de 2014 10:13:58 a.m.123,456.78
Spanisch (Uruguay)es-UYEspañol (Uruguay)domingo, 31 de agosto de 2014 10:13:58 a.m.123.456,78
Spanisch (Bolivarische Republik Venezuela)es-VEEspañol (Republica Bolivariana de Venezuela)domingo, 31 de agosto de 2014 10:13:58 a.m.123.456,78
Estnisch (Estland)et-EEeesti (Eesti)31. august 2014. a. 10:13:58123 456,78
Baskisch (Baskisch)eu-ESeuskara (euskara)igandea, 2014.eko abuztuak 31 10:13:58123.456,78
Farsifa-IRفارسى (ایران)الأحد, أوت 31, 2014 10:13:58 ق.ظ123,456.78
Finnisch (Finnland)fi-FIsuomi (Suomi)31. elokuuta 2014 10:13:58123 456,78
Filipino (Philippinen)fil-PHFilipino (Pilipinas)Linggo, Agosto 31, 2014 10:13:58 AM123,456.78
Färöisch (Färöer-Inseln)fo-FOføroyskt (Føroyar)31. august 2014 10:13:58123.456,78
Französisch (Belgien)fr-BEfrançais (Belgique)dimanche 31 août 2014 10:13:58123.456,78
Französisch (Kanada)fr-CAfrançais (Canada)31 août 2014 10:13:58123 456,78
Französisch (Schweiz)fr-CHfrançais (Suisse)dimanche 31 août 2014 10:13:58123'456.78
Französisch (Frankreich)fr-FRfrançais (France)dimanche 31 août 2014 10:13:58123 456,78
Französisch (Luxemburg)fr-LUfrançais (Luxembourg)dimanche 31 août 2014 10:13:58123 456,78
Französisch (Monaco)fr-MCfrançais (Principauté de Monaco)dimanche 31 août 2014 10:13:58123 456,78
Friesisch (Niederlande)fy-NLFrysk (Nederlân)Snein 31 augustus 2014 10:13:58123.456,78
Irisch (Irland)ga-IEGaeilge (Éire)31 Lúnasa 2014 10:13:58123,456.78
Galizisch (Galizisch)gl-ESgalego (galego)domingo, 31 de agosto de 2014 10:13:58123.456,78
Gujarati (Indien)gu-INગુજરાતી (ભારત)31 ઑગસ્ટ 2014 10:13:581,23,456.78
Hebräisch (Israel)he-ILעברית (ישראל)יום ראשון 31 אוגוסט 2014 10:13:58123,456.78
Hindi (Indien)hi-INहिंदी (भारत)31 अगस्त 2014 10:13:581,23,456.78
Kroatisch (Lateinisch, Bosnien und Herzegowina)hr-BAhrvatski (Bosna i Hercegovina)31. kolovoza 2014. 10:13:58123.456,78
Kroatisch (Kroatien)hr-HRhrvatski (Hrvatska)31. kolovoza 2014. 10:13:58123.456,78
Ungarisch (Ungarn)hu-HUmagyar (Magyarország)2014. augusztus 31. 10:13:58123 456,78
Armenisch (Armenien)hy-AMՀայերեն (Հայաստան)31 Օգոստոս, 2014 10:13:58123,456.78
Indonesisch (Indonesien)id-IDBahasa Indonesia (Indonesia)31 Agustus 2014 10:13:58123.456,78
Isländisch (Island)is-ISíslenska (Ísland)31. ágúst 2014 10:13:58123.456,78
Italienisch (Schweiz)it-CHitaliano (Svizzera)domenica, 31. agosto 2014 10:13:58123'456.78
Italienisch (Italien)it-ITitaliano (Italia)domenica 31 agosto 2014 10:13:58123.456,78
Inuktitut (Lateinisch, Kanada)iu-Latn-CAInuktitut (Kanatami)Nat, Aaggiisi 31,2014 10:13:58 AM123,456.78
Japanisch (Japan)ja-JP日本語 (日本)2014年8月31日 10:13:58123,456.78
Georgisch (Georgien)ka-GEქართული (საქართველო)2014 წლის 31 08, კვირა 10:13:58123 456,78
Kasachisch (Kasachstan)kk-KZҚазақ (Қазақстан)31 тамыз 2014 ж. 10:13:58123 456,78
Kannada (Indien)kn-INಕನ್ನಡ (ಭಾರತ)31 ಆಗಸ್ಟ್ 2014 10:13:581,23,456.78
Koreanisch (Korea)ko-KR한국어 (대한민국)2014년 8월 31일 일요일 오전 10:13:58123,456.78
Konkani (India)kok-INकोंकणी (भारत)31 ऑगस्ट 2014 10:13:581,23,456.78
Kirgisisch (Kirgisistan)ky-KGКыргыз (Кыргызстан)31-Август 2014-ж. 10:13:58123 456,78
Luxemburgisch (Luxemburg)lb-LULëtzebuergesch (Luxembourg)Sonndeg 31 August 2014 10:13:58123 456,78
Litauisch (Litauen)lt-LTlietuvių (Lietuva)2014 m. rugpjūčio 31 d. 10:13:58123.456,78
Lettisch (Lettland)lv-LVlatviešu (Latvija)svētdiena, 2014. gada 31. augustā 10:13:58123 456,78
Maori (Neuseeland)mi-NZReo Māori (Aotearoa)Rātapu, 31 Here-turi-kōkā, 2014 10:13:58 a.m.123,456.78
Mazedonisch (ehemalige jugoslawische Republik Mazedonien)mk-MKмакедонски јазик (Македонија)недела, 31 август 2014 10:13:58123.456,78
Mongolisch (kyrillisch, Mongolei)mn-MNМонгол хэл (Монгол улс)2014 оны 8 дугаар сарын 31 10:13:58123 456,78
Mohawk (Kanada)moh-CAKanien'kéhaAwentatokentì:ke, Seskéha 31, 2014 10:13:58 AM123,456.78
Marathi (Indien)mr-INमराठी (भारत)31 ऑगस्ट 2014 10:13:581,23,456.78
Malaiisch (Brunei Darussalam)ms-BNBahasa Melayu (Brunei Darussalam)31 Ogos 2014 10:13:58123.456,78
Malaiisch (Malaysia)ms-MYBahasa Melayu (Malaysia)31 Ogos 2014 10:13:58123,456.78
Maltesisch (Malta)mt-MTMalti (Malta)Il-Ħadd, 31 ta' Awissu 2014 10:13:58123,456.78
Norwegisch, Bokmål (Norwegen)nb-NOnorsk, bokmål (Norge)31. august 2014 10:13:58123 456,78
Nepalesisch (Nepal)ne-NPनेपाली (नेपाल)आइतवार, अगस्त 31, 2014 10:13:58 विहानी1,23,456.78
Niederländisch (Belgien)nl-BENederlands (België)zondag 31 augustus 2014 10:13:58123.456,78
Niederländisch (Niederlande)nl-NLNederlands (Nederland)zondag 31 augustus 2014 10:13:58123.456,78
Norwegisch, Nynorsk (Norwegen)nn-NOnorsk, nynorsk (Noreg)31. august 2014 10:13:58123 456,78
Südliches Sotho (Südafrika)nso-ZASesotho sa Leboa (Afrika Borwa)31 Phato 2014 10:13:58 AM123,456.78
Punjabi (Indien)pa-INਪੰਜਾਬੀ (ਭਾਰਤ)31 ਅਗਸਤ 2014 ਐਤਵਾਰ ਸਵੇਰ 10:13:581,23,456.78
Polnisch (Polen)pl-PLpolski (Polska)31 sierpnia 2014 10:13:58123 456,78
Pashto (Afghanistan)ps-AFپښتو (افغانستان)06/11/1435 10:13:58 غ.م123،456,78
Portugiesisch (Brasilien)pt-BRPortuguês (Brasil)domingo, 31 de agosto de 2014 10:13:58123.456,78
Portugiesisch (Portugal)pt-PTportuguês (Portugal)domingo, 31 de Agosto de 2014 10:13:58123.456,78
Quechua (Bolivien)quz-BOrunasimi (Qullasuyu)intichaw, 31 de Qhapaq Sitwa de 2014 10:13:58 a.m.123.456,78
Quechua (Ecuador)quz-ECrunasimi (Ecuador)intichaw, 31 de Qhapaq Sitwa de 2014 10:13:58123.456,78
Quechua (Peru)quz-PErunasimi (Piruw)intichaw, 31 de Qhapaq Sitwa de 2014 10:13:58 a.m.123,456.78
Rätoromanisch (Schweiz)rm-CHRumantsch (Svizra)dumengia, 31 avust 2014 10:13:58123'456.78
Rumänisch (Rumänien)ro-ROromână (România)31 august 2014 10:13:58123.456,78
Russisch (Russland)ru-RUрусский (Россия)31 августа 2014 г. 10:13:58123 456,78
Sanskrit (Indien)sa-INसंस्कृत (भारतम्)31 अगस्त 2014 रविवासरः 10:13:581,23,456.78
Sami (Nord, Finnland)se-FIdavvisámegiella (Suopma)borgemánu 31. b. 2014 10:13:58123 456,78
Sami (Nord, Norwegen)se-NOdavvisámegiella (Norga)borgemánu 31. b. 2014 10:13:58123 456,78
Sami (Nord, Schweden)se-SEdavvisámegiella (Ruoŧŧa)borgemánu 31. b. 2014 10:13:58123 456,78
Slowakisch (Slowakei)sk-SKslovenčina (Slovenská republika)31. augusta 2014 10:13:58123 456,78
Slowenisch (Slowenien)sl-SIslovenski (Slovenija)31. avgust 2014 10:13:58123.456,78
Sami (Süd, Norwegen)sma-NOåarjelsaemiengiele (Nöörje)mïetsken 31. b. 2014 10:13:58123 456,78
Sami (Süd, Schweden)sma-SEåarjelsaemiengiele (Sveerje)mïetsken 31. b. 2014 10:13:58123 456,78
Sami (Lule, Norwegen)smj-NOjulevusámegiella (Vuodna)bårggemáno 31. b. 2014 10:13:58123 456,78
Sami (Lule, Schweden)smj-SEjulevusámegiella (Svierik)bårggemáno 31. b. 2014 10:13:58123 456,78
Sami (Inari, Finnland)smn-FIsämikielâ (Suomâ)porgemáánu 31. p. 2014 10:13:58123 456,78
Sami (Skolt, Finnland)sms-FIsääm´ǩiõll (Lää´ddjânnam)på´rǧǧmannu 31. p. 2014 10:13:58123 456,78
Albanien (Albanisch)sq-ALshqipe (Shqipëria)2014-08-31 10:13:58.PD123.456,78
Serbisch (Kyrillisch, Bosnien und Herzegowina)sr-Cyrl-BAсрпски (Босна и Херцеговина)31. август 2014 10:13:58123.456,78
Serbisch (Kyrillisch, Serbien und Montenegro (ehemalig))sr-Cyrl-CSсрпски (Србија и Црна Гора (Претходно))31. август 2014 10:13:58123.456,78
Serbisch (Lateinisch, Bosnien und Herzegowina)sr-Latn-BAsrpski (Bosna i Hercegovina)31. avgust 2014 10:13:58123.456,78
Serbisch (Lateinisch, Serbien und Montenegro (ehemalig))sr-Latn-CSsrpski (Srbija i Crna Gora (Prethodno))31. avgust 2014 10:13:58123.456,78
Schwedisch (Finnland)sv-FIsvenska (Finland)den 31 augusti 2014 10:13:58123 456,78
Schwedisch (Schweden)sv-SEsvenska (Sverige)den 31 augusti 2014 10:13:58123 456,78
Kiswahili (Kenia)sw-KEKiswahili (Kenya)Jumapili, Agosti 31, 2014 10:13:58 AM123,456.78
Syrisch (Syrien)syr-SYܣܘܪܝܝܐ (سوريا)31 ܐܒ, 2014 10:13:58 ܩ.ܛ123,456.78
Tamil (Indien)ta-INதமிழ் (இந்தியா)31 ஆகஸ்ட் 2014 10:13:581,23,456.78
Telugu (Indien)te-INతెలుగు (భారత దేశం)31 ఆగస్టు 2014 10:13:581,23,456.78
Thailändisch (Thailand)th-THไทย (ไทย)31 สิงหาคม 2557 10:13:58123,456.78
Tsuana (Südafrika)tn-ZASetswana (Aforika Borwa)31 Phatwe 2014 10:13:58 AM123,456.78
Türkisch (Türkei)tr-TRTürkçe (Türkiye)31 Ağustos 2014 Pazar 10:13:58123.456,78
Tatarisch (Russland)tt-RUТатар (Россия)31 Августның 2014 10:13:58123 456,78
Ukrainisch (Ukraine)uk-UAукраїнська (Україна)31 серпня 2014 р. 10:13:58123 456,78
Urdu (Islamische Republik Pakistan)ur-PKاُردو (پاکستان)31 اگست, 2014 10:13:58 AM123,456.78
Usbekisch (kyrillisch, Usbekistan)uz-Cyrl-UZЎзбек (Ўзбекистон)2014 йил 31-август 10:13:58123 456,78
Usbekisch (lateinisch, Usbekistan)uz-Latn-UZU'zbek (U'zbekiston Respublikasi)2014 yil 31-avgust 10:13:58123 456,78
Vietnamesisch (Vietnam)vi-VNTiếng Việt (Việt Nam)31 Tháng Tám 2014 10:13:58 SA123.456,78
isiXhosa (Südafrika)xh-ZAisiXhosa (uMzantsi Afrika)31 Thupha 2014 10:13:58 AM123,456.78
Chinesisch (Vereinfacht, VR China)zh-CN中文(中华人民共和国)2014年8月31日 10:13:58123,456.78
Chinesisch (Traditionell, Hongkong SAR)zh-HK中文(香港特別行政區)2014年8月31日 10:13:58123,456.78
Chinesisch (Traditionell, Macau SAR)zh-MO中文(澳門特別行政區)2014年8月31日 10:13:58123,456.78
Chinesisch (Vereinfacht, Singapur)zh-SG中文(新加坡)2014年8月31日 AM 10:13:58123,456.78
Chinesisch (Traditionell, Taiwan)zh-TW中文(台灣)2014年8月31日 上午 10:13:58123,456.78
isiZulu (Südafrika)zu-ZAisiZulu (iNingizimu Afrika)31 uNcwaba 2014 10:13:58 AM123,456.78

Man beachte, das wir in Thailand schon das 26. Jahrhundert schreiben, in Saudi-Arabien dagegen erst im 15. Jahrhundert angekommen sind – das lässt nachdenklich werden …

Wenn der verwendete Browser in einigen der aufgelisteten Sprachen viereckige Kästchen anzeigt, fehlt dem System wohl der geeignete Zeichensatz, oder aber der Browser lehnt diese (fälschlicherweise) ab. Apples Safari für Windows zum Beispiel hat hier noch einige wenige Darstellungsfehler auf Windows Vista.

Für eine einzelne Webseite kann man die verwendete Kultur, die in der web.config eingestellt wurde, abändern. Ein einzelnes Template kann durch spezielle Page-Direktiven auf eine andere Kultur eingestellt werden:

<%@ Page UICulture="de" Culture="de-DE"

Oder mit automatischer Auswahl anhand der im Browser des Nutzers eingestellten Language(s):

<%@ Page UICulture="auto:de" Culture="auto:de-DE"

Wenn einzelne Fragmente der Seite anders-sprachig ausgegeben werden müssen, so kann dies meist durch Nutzung der .ToString-Methode geschehen. Es gibt dabei eigentlich immer eine Methodensignatur, bei der eine Kultur mit angegeben werden kann, wie im folgenden Beispiel dargestellt:

DateTime.Now.ToString("F", System.Globalization.CultureInfo.GetCultureInfo("en-US"));

Fazit

Diese eher rein technischen Erwägungen streifen nur einen kleinen Teil dessen, was für erfolgreiche multinationale Sites zu beachten ist. In loser Folge werden weitere Artikel zu diesem weitem Themengebiet folgen.
Eine Checkliste mit Informationen zu den Basistechniken finden sich in der Checklist for Globalized ASP.Net Web Applications.

Andere wichtige Themen sind Domain-Management, Filterung, rechtliche und kulturelle Unterschiede. Für den arabischen UND den amerikanischen Raum zum Beispiel müssen wir regelmäßig Spuren von Nackheit ausfiltern.
Das Stichwort dazu: no nudes for the prudes .