Zum Inhalt

Lokalisierung

Unter Lokalisierung versteht man die Zuordnung von Merkmalen wir Sprache, Bilder, Logos zu einer Webseite.

Lokalisierung

Bei der Anzeige einer Sprachversion gibt es einige Herausforderungen. Welche Sprache soll man anzeigen? Die bestimmung der Sprache sollte auf Serverseite erfolgen, da hier alle Daten zur Verfügung stehen und genügend Resourcen für die Auswertung gegeben sind. Das Frontend sollte nicht mit eine umfangreichen Lokalisierung aufgebläht werden.

Dokumentensprache auslesen

Die wichtigste Funktion ist in diesem Zusammenhang die Funktion:

Alvine.i18n.getLocaleOfDocument();

Mit Hilfe dieser Funktion kann die Locale des Dokuments ermittelt werden, die der Server festgelegt hat. Will man zusätzlich eine andere Defaultsprache als englisch festlegen, so muss man noch den gewünchten Parameter übergeben.

Alvine.i18n.getLocaleOfDocument('de');

Ist im Dokument selber kein Locale definiert, dafür aber in der URI, so kann man die Option scannen der URI aktivieren. Dazu muss die Position der Locale in der URI übergeben werden. Ist die URL zum Beispiel http://www.example.com/part/de/page so kann man mit dem ersten Parameter das de aus der URL übernehmen:

Alvine.i18n.getLocaleOfDocument(1);

Das Ergebnis dieser Methode ist ein Objekt vom Typ Locale, zum Beispiel:

Locale {
   language: "en", 
   region: "CN", 
   script: "Hans", 
   variants: "rozaj", 
   extensions: undefined
   }

Dokumentenlokale setzen

Nach dem ersten Abfragen der Sprache wird der Wert zwischengespeichert und nicht erneut aus dem Dokument ermittelt. Möchte man die Sprache des Dokuments ändern, so muss man die Funktion

Alvine.i18n.setDocumentLocale(locale);

aufrufen. Diese Funktion schreibt den Wert der Locale in den HTML-Tag und setzt die interne Variable auf den neuen Wert. Der Parameter locale kann etweder eine Zeichenkette oder ein Objekt vom Typ Locale sein.

Lokale aus Zeichenkette erstellen

Um ein Lokale-Objekt zu erstellen, kann auf die Funktion Alvine.i18n.getLocale() zurückgegriffen werden. Diese Funktion zerlegt eine Sprach-Zeichenkette und gibt ein Locale-Objekt mit den entsprechenden Eigenschaften zurück.

Alvine.i18n.getLocale('en_Hans_CN_nedis_rozaj_x_prv1_prv2');

Locale {
   language: "en", 
   region: "CN", 
   script: "Hans", 
   variants: "rozaj", 
   extensions: undefined
   }

Diese Methode hat einige Einschränkungen bzg der Erkennung mehrerer Varianten und privaten Erweiterungen, die aber nicht für den normalen Betrieb einer Webseite ins Gewicht fallen dürfte.

Alvine.i18n.getLocale('zh-cmn-Hans-CN');

Locale {
   language: "zh", 
   region: "CN", 
   script: "Hans", 
   variants: undefined, 
   extensions: "cmn"
   }

Alvine.i18n.getLocale('de-AT');

Locale {
   language: "de", 
   region: "AT", 
   script: undefined, 
   variants: undefined, 
   extensions: undefined
   }

Umwandungin Zeichenkette

Bei der Umwandlung der Locale in eine Zeichenkette wird die Locale::toString() aufgerufen. Diese Funktion besitzt als Parameter einen Filter. Mit Hilfe dieses Filters lassen sich beliebige Variationen der Eigenschaften erstellen.

locale = Alvine.i18n.getLocale('zh-cmn-Hans-CN');

// Ausgabe der Locale als Zeichenkette
console.log(locale.toString());
// -> zh-cmn-Hans-CN

// Nur die Region
console.log(locale.toString(['region']));
// -> CN

// Die Region gefolgt von der Sprache
console.log(locale.toString(['region','language']));
// -> CN-zh

Resourcendatei laden

Lokalisierte Zeichenketten können aus einer Resourcendatei nachgeladen werden. Wird in einem Dokument mit der Lokalen zh-cmn-Hans-CN die Methode Alvine.i18n.loadLocaleResource() aufgerufen,

Alvine.i18n.loadLocaleResource()

so versucht die Funktion der Reihe nach folgende Dateien zu laden:

  • /resource/locale/zh-cmn-Hans-CN.json
  • /resource/locale/zh-cmn-Hans.json
  • /resource/locale/zh-cmn.json
  • /resource/locale/zh.json

Um Resourcen-Dateien von einer anderen URL zu laden, muss der Funktion der Parameter url übergeben werden.

Alvine.i18n.loadLocaleResource('mylocale')

Jetzt werden die Dateien im Verzeichnis mylocale/ gesucht:

  • /mylocale/zh-cmn-Hans-CN.json
  • /mylocale/zh-cmn-Hans.json
  • /mylocale/zh-cmn.json
  • /mylocale/zh.json

Wird eine Datei gefunden und vom Server mit Status 200 zurückgeliefert, so werden weitere Versuche abgebrochen. Um an die geladene Sprachdatei zu kommen, muss das Event loadresource.DONE abonniert werden.

jQuery(window).on('loadresource.DONE', function(event, resource) {
   // code
})

Fehler beim Laden einer Datei können über das Event loadresource.FAIL abonniert werden.

jQuery(window).on('loadresource.FAIL', function(event, resource) {
   // code
})

Das Ergebnis ist eine Objekt vom Typ Resouren. Mit der Methode Resource::get() können die einzelnen Texte geholt werden. Resource ist von Map abgeleitet (siehe Map)

resource.get('key')
// -> mein text

Kommentare