Zeichenketten in einer .js Datei übersetzen  english flag bandiera italiana spanish flag spanish flag

Eine kurze Anleitung übersetzt von Jürgen Berg

Das Problem : Manchmal haben Erweiterungen zwar einen "locale" Order mit übersetzten Zeichenketten, aber einige Wörter und Sätze sind nicht übersetzt, da diese sich nicht wie üblich übersetzen lassen, weil sie sich in einer .js Datei befinden.

Es gibt eine Lösung, aber es ist etwas aufwändiger, und manchmal muß man viel Zeit investieren für ein kleines, übersetztes Wort mehr...


Zuerst muß man die .properties Datei in dem "locale" Ordner finden oder erstellen. Dann einfach einen  Variablennamen und den Satz oder das Wort in der eigenen Sprache einfügen.
Etwa so :

WrongPassMessage=Invalid  password
(wobei "Invalid password" die zu übersetzenden Zeichenkette ist)
Hinweis :
1. Ein einfaches = reicht aus
2. Das Konvertieren der Zeichen in utf-8 und Sonderzeichen in Hexadezimal  vor dem Speichern der Datei nicht vergessen..

Dann muß man der Erweiterung "mitteilen", daß diese properties Datei die benötigten Zeichenketten beinhaltet. Also fügt man folgende Zeilen in der xxxoverlay.xul des "content" Ordners ein :

<stringbundleset id="stringbundleset"> 
      <stringbundle id="extensionname-strings" src="chrome://extensionname/locale/extensionname.properties"/>
</stringbundleset>



Dieses definierte stringbundle (mit diesem ID-Namen) ist so etwas wie eine Verpackung, die alle Zeichenketten, die wir in der properties Datei erstellt haben, beinhaltet. Und natürlich müssen wir die Quelle angeben, also den  Pfad in der Erweiterung.
Und nun zu der  .js Datei. Wir nehmen mal an, daß wir alle zu übersetzenden Zeichenketten gefunden haben. Was jetzt folgt ist ganz einfach :
 Die Variablen müssen ersetzt werden.
Die Schlüsselzeile sieht dann z.B. so aus :


var wrongpassalert=document.getElementById('extensionname-strings').getString("WrongPassMessage");


var steht für Variable
wrongpassalert Nimmt den Wert von WrongPassMessage an , wie in der in der properties Datei definiert, und wird zur Anzeige verwendet
document.getElementById  Ist der Verweis für das Script, woher die entspechenden Elemente geholt werden,
  in diesem Fall aus "extensionname-strings".
getString Gibt an, welche Variable aus dem stringbundle verwendet wird
Nun kann die wrongpassalert Variable in der .js verwendet werden, wo sie benötigt wird : siehe Beispiel


if ( password == userPassword ) {
      oPrefs.setBoolPref("access.authenticated", true);   
   }
   else {
      alert (wrongpassalert);
      oPrefs.setBoolPref("access.authenticated", false)