Comment localiser aussi les chaînes d'un fichier .js german flag bandiera italiana spanish flag english flag

Il arrive assez souvent que dans une extension qui comporte des dossiers "locale" on trouve des mots et phrases qui ne sont pas localisés, et qu'on ne peut par transformer en "entities" comme les autres, parce qu'ils sont dans des fichiers .js (javascript)

Il existe une solution, qui prend un peu de temps, et parfois même beaucoup de temps pour localiser un mot ou deux seulement...


D'abord, vous devez créer un fichier .properties dans votre dossier de locale, s'il n'existe pas déjà. Vous écrivez ensuite un   nom de variable  et la phrase ou mot dans votre langue tel qu'il doit apparaître à l'utilisateur de l'extension.
Quelque chose comme  :

WrongPassMessage=Mot de passe invalide
(Mot de passe invalide est la chaîne traduite danscet exemple)
Notez :
1. Un simple signe = est suffisant
2. N'oubliez pas de convertir les chaînes avec des caractères accentués en "Unicode échappé" avant d'enregistrer le fichier. Voir comment faire sur l'excellent tutoriel de Jojaba

Ensuite vous devez "indiquer" à l'extension qu'il faut aller chercher dans ce fichier .properties la chaîne de caractères en question. vous devez donc écrire ce genre de ligne dans le ficheir xxxoverlay.xul du dossier content :

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



Le 'stringbundle' que vous définissez (avec son  nom) est une sorte de liste des chaînes de caractères que vosu avez inscrites dans le fichier  properties. Et bien sûr, vous ajoutez la source du fichier, son adresse dans l'extension.
Et maintenant vous pouvez aller dans le fichier .js, dans lequel se trouve la chaîne à localiser. Le point essentiel est tout simple :
 Vous devez remplacer une variable par une autre.
Vous allez utiliser une ligne de ce genre à insérer au bon endroit :


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


var signifie variable
wrongpassalert va prendre la valeur de la variable WrongPassMessage telle que définie dans le fichier properties, et sera ainsi utilisée dans l'interface utilisateur
document.getElementById  donne au script l'indication d'aller chercher dans la série de chaînes identifiée comme "nomdelextension-strings"
getString  indique quelle variable doit être extraite du stringbundle
Vous pouvez maintenant ustiliser la variable  wrongpassalert dans le fichier .js là où c'est nécessaire : voyez l'exemple ci-dessous :


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