# Internationalisierung (Softwareentwicklung)

Internationalisierung bedeutet in der Informatik beziehungsweise in der Softwareentwicklung, ein Programm so zu gestalten, dass es leicht (ohne den Quellcode ändern zu müssen) an andere Sprachen und Kulturen angepasst werden kann.
Internationalisierung (englisch internationalization oder internationalisation) wird gerne mit dem Numeronym i18n abgekürzt (im englischen Wort Internationalization befinden sich 18 Buchstaben zwischen dem ersten Buchstaben I und dem letzten Buchstaben n).
Hierunter fallen diejenigen Aufgaben, die der Entwickler/Programmierer eines Programms bewältigen muss. Dazu darf er zum Beispiel Beschreibungstexte nicht im Quellcode fest kodieren, sondern muss Variablen benutzen, die von einer Quelle zur Laufzeit eingelesen werden. Aber auch Datumsformatierungen und die sprachabhängige Oberflächengestaltung (z. B. kann Text unterschiedlich lang sein oder die Rechts-Nach-Links-Orientierung kann sich unterscheiden) gehören hierzu.
Im nächsten Schritt erfolgt die Lokalisierung (localization oder localisation), die als l10n abgekürzt wird (10 Buchstaben zwischen l und n). Ein Programm sollte im vorigen Schritt so gestaltet sein, dass diese Änderungen nicht mehr vom Programmierer durchgeführt werden müssen. Dieser Prozess bezeichnet die reine Übersetzung von zum Beispiel Texten in eine Landessprache.

## Umfang einer Internationalisierung und Lokalisierung (Auswahl)
### Sprache

* Übersetzungen: Textdaten sind in externen Dateien abgelegt und werden dynamisch geladen. Übersetzungen können neben Texten auch Sprachausgaben und Texte innerhalb von grafischen Elementen wie Bilder und Videos (Untertitel in Filmen) betreffen.
* Grafische Darstellung: Die Programmlogik ist von der Benutzungsoberfläche und Ausgabemedien wie Drucker unabhängig.

### Texte

* Unicode: Im Gegensatz zu den früher verwendeten Zeichensätzen wie ASCII oder EBCDIC, verwenden moderne Systeme den Unicode Zeichensatz. Probleme der Zeichenkodierung werden durch einen wesentlich größeren Zeichenvorrat gelöst. Dadurch können Zeichen aus unterschiedlichen Schriften im selben System angeboten werden.
* Bidirektionale Texte: Je nach Schrift müssen unterschiedliche Schreibrichtungen verwendet werden.
* Schrift: Einige Sprachen können in verschiedenen Schreibvarianten existieren, wie z. B. Serbisch mit kyrillischer Schrift und Serbisch mit lateinischer Schrift.
* Textverarbeitung: Konzepte wie die Groß-/Kleinschreibung sind nicht in jeder Schrift bekannt. Für die Texttrennung etwa zum Umbrechen einer Zeile gelten unterschiedliche Regeln.
* Eingabemethoden: Ermöglichen der Eingabe von Tastaturkürzeln mit beliebigen Tastaturlayouts.
* Sortierung: Nationale Sonderzeichen, wie etwa die Umlaute in der deutschen Sprache, müssen nach nationalen Regeln einsortiert werden. Dabei kann es auch thematische Unterscheidungen geben, die dazu führen, dass etwa für Telefonbücher eine spezielle Sortierung erwartet wird.
* Suche: Bei textueller Suche müssen manche Zeichen auf sinngemäß äquivalente Formen abgebildet werden. Die Texte „¼“ und „1/4“ sind zwar unterschiedlich kodiert, die Bedeutung ist jedoch identisch. Die Transformation der Texte wird auch Normalisierung genannt.
* Transformation: Texte können in eine andere Schrift überführt werden, um entweder einen anderen Zeichensatz zu unterstützen, oder um die Lesbarkeit zu erhöhen. Man unterscheidet zwischen Transliteration (der buchstabengetreuen Transformation) und Transkription (der Transformation gemäß der Lautschrift).

### Textformatierung

* Datumsformate und die verschiedenen Kalendersysteme: Softwareprodukte rechnen meistens mit Zeiten des gregorianischen Kalenders, doch für die Anzeige kann eine Formatierung in die regional üblichen Formate und Zeitrechnungen angeboten werden.
* Zeitformate: Unterschieden wird z. B. zwischen der 24-Stunden-Zählung und der 12-Stunden-Zählung, bei der explizit Vormittag (a.m.) und Nachmittag (p.m.) angegeben wird.
* Zahlenformate: Unterschiedliche Dezimal- und Tausendertrennzeichen, sowie unterschiedliche Währungen, Gewichte und Maße.
* Zeitzonen: Ähnlich zur Datumsproblematik, muss eine Software einerseits mit allen unterschiedlichen Zeiten einheitlich rechnen, andererseits jedem Benutzer die Zeit in der angemessenen Formatierung und umgerechnet auf die entsprechende Zeitzone anzeigen.

### Kultur

* Locale: Um die Kultur zu definieren, auf die sich die Software anpassen soll, wird von der Software meist eine Locale verwendet. Diese enthält die Informationen über die Sprache, das Land und ggf. weitere regionale Eigenschaften, wie die zu verwendende Schrift.
* Bilder und Farben: Probleme bei der Verständlichkeit und kulturellen Angemessenheit
* Namen und Titel
* vom Staat vergebene Nummern wie Passnummern oder die Sozialversicherungsnummer (social security number) in den Vereinigten Staaten, die national insurance number im Vereinigten Königreich oder die Isikukood in Estland
* Telefonnummern, Adressen und internationale Postleitzahlen
* Papierabmessungen

## Unterschied zwischen Internationalisierung und Lokalisierung

Der Unterschied zwischen Internationalisierung und Lokalisierung scheint zwar subtil, ist aber wichtig. Internationalisierung ist die Anpassung eines Produkts, damit es theoretisch überall eingesetzt werden kann. Lokalisierung ist das Hinzufügen spezieller Eigenschaften für die Anwendung in einem bestimmten geographisch oder ethnisch umschriebenen Absatz- oder Nutzungsgebiet (Land, Region oder ethnische Gruppe). Internationalisierung wird pro Produkt einmal durchgeführt. Lokalisierung wird dann ein Mal für jede Kombination von Produkt und Nutzungsgebiet durchgeführt. Die Prozesse ergänzen einander und müssen kombiniert werden, um ein System zu erhalten, das global funktioniert.

## Geschäftsprozess der Internationalisierung von Software

Um ein Produkt zu internationalisieren, müssen die verschiedenen Märkte betrachtet werden, in die das Produkt voraussichtlich eingebracht werden soll. Details wie Feldlängen von Adressen, optionale Felder für Postleitzahlen und die Einführung neuer Registrierungsprozesse, um die lokalen Rechtssituationen zu bedienen sind Beispiele dafür, wie komplex das Projekt einer Internationalisierung sein kann.
Ein umfassender Ansatz geht bis zu kulturellen Faktoren wie die Anpassung von Geschäftsprozesslogik oder die Berücksichtigung individueller kultureller Verhaltensaspekte.

## Programmierpraxis

Die traditionell vorherrschende Praxis für Anwendungen ist es, die Texte (oder andere Elemente, wie Namen von Grafikdateien) in Hilfszeichenketten (resource strings) auszulagern, die während der Programmausführung bei Bedarf geladen werden. Die Zeichenketten werden in Hilfsdateien gespeichert und sind verhältnismäßig einfach zu übersetzen. Programme werden oft so gebaut, dass sie je nach gesetztem Vertriebsgebiet auf Hilfsbibliotheken zugreifen. Eine Programmbibliothek, die das unterstützt, ist beispielsweise GNU gettext.

## Schwierigkeiten

Während das Übersetzen existierenden Textes in eine andere Sprache einfach erscheint, ist es weitaus schwieriger, gleichzeitig Sprachversionen von Texten während des Produktlebenszyklus zu verwalten. Wenn eine Nachricht, die dem Benutzer angezeigt wird, verändert wird, müssen alle übersetzten Versionen auch geändert werden. Das verlängert den Entwicklungszyklus.
Die unterschiedliche Länge der Texte kann in der Anzeige zu unerwünschten Ergebnissen führen (abgeschnittener Text, unerwünschte Zeilenumbrüche).
Viele Lokalisierungsaufgaben (Schreibrichtung, Textsortierung usw.) verlangen eine tiefgreifendere Änderung der Software als nur die reine Übersetzung. OpenOffice.org löst das beispielsweise mit Kompilierungsverzweigung (compilation switches).
Häufig entstehen Probleme auch aus den syntaktischen Eigenheiten der verschiedenen Sprachen. Die Anzeige von „ZAHL days ago“ lässt sich nicht etwa mit einer einteiligen Übersetzung für days ago umsetzen, da diese Angabe in anderen Sprachen, etwa im Deutschen, möglicherweise in zwei Teile zerfällt, die durch die Zahl getrennt angezeigt werden müssen: „vor ZAHL Tagen“. Daher muss die internationalisierte Version des Programms Text vor und hinter der Zahl ermöglichen, wobei der Text vor der Zahl in der englischen Lokalisierung leer wäre, während er in der deutschen „vor“ enthalten müsste.
In der Praxis wird diese Problematik in der Regel durch Platzhalter gelöst: der gesamte Satz wird weiterhin als Einheit behandelt, jedoch geben spezielle Zeichenketten die Position der Parameter an: „Showing results {0} to {1} out of {2}“ wird zu „Zeige Treffer {0} bis {1} von {2}“. Diese Technik ermöglicht auch ein Umstellen der Reihenfolge der Argumente, falls dies für verschiedene Sprachen benötigt wird. Für in Abhängigkeit von den Parameterwerten abweichende Formulierungen (z. B. Singular und Plural) werden in die Text-Ressourcen mehrere Alternativen eingebaut, die vom System zur Laufzeit dynamisch ausgewertet und je nach aktuellem Parameter-Wert entsprechend ausgewählt werden: „Die Suche lieferte {PLURAL|{0}|keine Ergebnisse|1 Ergebnis|{0} Ergebnisse}.“
Ab einem bestimmten Grad an Komplexität (zum Beispiel für die Qualitätssicherung) braucht das Entwicklungsteam jemanden, der andere Sprachen und Kulturen versteht und einen technischen Hintergrund hat.

## Kosten-Nutzen-Analyse

In einer kommerziellen Umgebung ist der Vorteil der Lokalisierung der Zugang zu mehr Märkten. Es gibt die Auffassung, dass die Lokalisierung eines Produktes in verschiedene Sprachen beziehungsweise Kulturen selbstverständlich ist. Alles was nötig sei, sei die Bestätigung der Höhe der Kosten. Es kostet mehr, Produkte für internationale Märkte zu produzieren, aber in einer immer globaleren Ökonomie ist die Unterstützung nur einer Sprache beziehungsweise nur eines Marktes kaum eine Option. Jedoch ist die Lokalisierung selbstentwickelter Software von ökonomischen Unwägbarkeiten beeinflusst und entbehrt zumeist der Möglichkeit, dass Endbenutzer und Freiwillige die Lokalisierung vornehmen können, wie es in Open-Source-Umgebungen üblich ist. Da Open-Source-Software im Allgemeinen frei verändert und weiterverbreitet werden kann, ist sie zugänglicher für eine Internationalisierung. Das KDE-Projekt ist zum Beispiel in 100 Sprachen übersetzt worden.