Utilisateur:Dr Brains/LiveRC/ProposeTranslationExtension.js

Une page de Wikipédia, l'encyclopédie libre.
Note : après avoir enregistré la page, vous devrez forcer le rechargement complet du cache de votre navigateur pour voir les changements.

Mozilla / Firefox / Konqueror / Safari : maintenez la touche Majuscule (Shift) en cliquant sur le bouton Actualiser (Reload) ou pressez Maj-Ctrl-R (Cmd-R sur Apple Mac) ;

Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5.
/* 
 --------------------------------------------------------------------------------------
 ---------LLLL---------III--------------------------RRRRRRRRRR--------CCCCC------------
 ---------LLLL---------III--------------------------RRRRRRRRRRRR----CCCCCCCCC----------
 ---------LLLL--------------------------------------RRR------RRR---CCC-----CCC---------
 ---------LLLL---------III--VV-----VV--EEEEEEEEE----RRR------RRR--CCC------------------
 ---------LLLL---------III---VV---VV---EEE----------RRRRRRRRRRR---CCC------------------
 ---------LLLL---------III---VV---VV---EEEEEE-------RRRRRRRRRR----CCC------------------
 ---------LLLL---------III----VV-VV----EEEEEE-------RRR-----RRR----CCC-----CCC---------
 ---------LLLLLLLLLLL--III----VVVVV----EEE----------RRR------RRR----CCCCCCCCC----------
 ---------LLLLLLLLLLL--III-----VVV-----EEEEEEEEE----RRR-------RRR-----CCCCC------------
 --------------------------------------------------------------------------------------
 
'''Extension de LiveRC'''
 
Ajoute un bouton pour proposer une traduction complète de l'interface dans une nouvelle langue
 
* Licence : ...?
* Documentation :
* Auteur : [[:fr:User:Dr Brains]]
* Développement et maintenance :
 
 
{{Catégorisation JS|LiveRC}}
 
<source lang=javascript> */
if(typeof(LiveRC_AddHook)!="undefined") { // DÉBUT IF

lrcParams["DefaultTargetPage"] = "MediaWiki:Gadget-LiveRC.js/i18n/$LANG$.js";


lrcIcons["ProposeTranslationExtensionIcon"] = {"type":0,
          "src":"thumb/0/02/Translation_-_Noun_project_987.svg/32px-Translation_-_Noun_project_987.svg.png",
          "width":32,
          "height":32
}

lrcTexts["ProposeTranslationExtensionIcon_Title"]   = "Afficher/masquer le formulaire de traduction";
lrcTexts["ProposeTranslationMenuTitle"]             = "Proposer une traduction";
lrcTexts["ProposeTranslationMenuDefaultLangSelectorTitle"] = "Langue de référence"
lrcTexts["ProposeTranslationMenuLangSelectorTitle"] = "Langue traduite";
lrcTexts["ProposeTranslationMenuSandboxTitle"]      = "Page de sauvegarde";
lrcTexts["ProposeTranslationHideTranslatedLabel"]   = "N’afficher que les traductions manquantes";
lrcTexts["ProposeTranslationSaveAllParams"]         = "Sauvegarder la totalité de la langue sélectionnée";
lrcTexts["NotJavascriptPage"]                       = "La page $1 n’est pas une page javascript. Une telle page doit se terminer par <code>.js</code>";
lrcTexts["NeedRightToEdit"]                         = "Vous n’avez pas le droit $1 nécessaire pour éditer la page $2";
lrcTexts["ThisIsGlobalTranslation"]                 = "ATTENTION !<br />Toute modification sur la page $1 impactera la totalité des utilisateurs utilisant la langue $2.<br />Continuer ?";

UnTranslatedTexts["ProposeTranslationResume"] = "Mise à jour traductions (langue = $1)";


lrcParamDesc["DescDefaultTargetPage"]                              = "[ProposeTranslation] Page de sauvegarde par défaut";
lrcParamDesc["DescProposeTranslationExtensionIcon"]                = "[ProposeTranslation] Bouton d’affichage/masquage du formulaire de traduction";
lrcParamDesc["DescProposeTranslationExtensionIcon_Title"]          = "[ProposeTranslation] Infobulle du bouton d’affichage/masquage du formulaire de traduction";
lrcParamDesc["DescProposeTranslationMenuTitle"]                    = "[ProposeTranslation] Titre de la fenêtre pour proposer une traduction";
lrcParamDesc["DescProposeTranslationMenuLangSelectorTitle"]        = "[ProposeTranslation] Label du sélecteur de langue";
lrcParamDesc["DescProposeTranslationMenuSandboxTitle"]             = "[ProposeTranslation] Label du sélecteur de la page de brouillon";
lrcParamDesc["DescProposeTranslationHideTranslatedLabel"]          = "[ProposeTranslation] Label de la case pour masquer les traductions déjà disponibles";
lrcParamDesc["DescProposeTranslationSaveAllParams"]                = "[ProposeTranslation] Label de la case pour sauvegarder la totalité des valeurs pour une langue";
lrcParamDesc["DescProposeTranslationMenuDefaultLangSelectorTitle"] = "[ProposeTranslation] Label du sélecteur de langue de référence";
lrcParamDesc["DescNotJavascriptPage"]                              = "[ProposeTranslation] Avertissement \"Page non .js\"";
lrcParamDesc["DescNeedRightToEdit"]                                = "[ProposeTranslation] Avertissement \"Droit utilisateur manquant\"";
lrcParamDesc["DescThisIsGlobalTranslation"]                        = "[ProposeTranslation] Avertissement \"Page de traduction globale\"";
lrcParamDesc["DescProposeTranslationResume"]                       = "[ProposeTranslation] Résumé de modification";


// Auto generated translations
var ProposeTranslationExtension_NoNeedTranslationList = new Array(/^DescNS_/, /^DescLog_/);

  importStylesheetURI('//fr.wikipedia.org/w/index.php?title=MediaWiki:Gadget-LiveRC.js/Extensions/ProposeTranslationExtension.css&action=raw&ctype=text/css');
 
function ProposeTranslationExtension_AddButton(){
  var Buttons = document.getElementById("LiveRCButtons");
  if(!Buttons) return;
  var Span = document.createElement('span');
  Span.id = "TranslationIcon";  
  var OnSpan = document.createElement("span");
  $(OnSpan).addClass("OnButton");
  OnSpan.innerHTML = lrcMakeIcon("ProposeTranslationExtensionIcon");
  OnSpan.style.display = "none";
  var OffSpan = document.createElement('span');
  $(OffSpan).addClass("OffButton");
  OffSpan.innerHTML = lrcMakeIcon("ProposeTranslationExtensionIcon");
  var Link = document.createElement('a');
  Link.href = "javascript:ProposeTranslationExtension_ToggleMenu();";
  Link.appendChild(OnSpan);
  Link.appendChild(OffSpan);
  Span.appendChild(Link);
  Buttons.insertBefore(document.createTextNode(" "), Buttons.firstChild);
  Buttons.insertBefore(Span, Buttons.firstChild);
}
LiveRC_AddHook("AfterOptions", ProposeTranslationExtension_AddButton);

function ProposeTranslationExtension_ToggleMenu(){
  var Button = document.getElementById("TranslationIcon");
  if(!Button) return;
  var Spans = Button.getElementsByTagName("span");
  var OnSpan = Spans[0];
  var OffSpan = Spans[1];
  if(OnSpan.style.display == "none" ){
    OnSpan.style.display = "";
    OffSpan.style.display = "none";
    ProposeTranslationExtension_CreateMenu("ProposeTranslationExtension_Menu");
    LiveRC_ManageParams_CloseMenu();
    lrcCloseAll()
  }else{
    OnSpan.style.display = "none";
    OffSpan.style.display = "";
    var Menu = document.getElementById("ProposeTranslationExtension_Menu");
    if(Menu) Menu.parentNode.removeChild(Menu);
    $(document.body).removeClass("LiveRCTranslationgDisplayed");
  }
}

function ProposeTranslationExtension_TextTranslationFill(OptionArray, ArrayName, onlytext){
    LiveRC_Config["ProposeTextTranslation"][ArrayName] = new Array();
    var WhiteList = ProposeTranslationExtension_NoNeedTranslationList;
    for(var ParamName in OptionArray){
        var inwhitelist = false;
        for(var a=0,l=WhiteList.length;a<l;a++){ if(ParamName.match(WhiteList[a])!=null){ inwhitelist = true; } }
        if(inwhitelist) continue;
        if(ParamName.match(/^DescNS_/)!=null) continue;
        var ParamDefValue = OptionArray[ParamName];
        var TextsinDefValue = new Array();
        var Name;
        if(!onlytext){
            Name = ParamDefValue["name"];
            if(!Name) Name = ParamDefValue["target"];
            for(var T in ParamDefValue){
                if(T.indexOf("desc")!=-1) TextsinDefValue[T] = ParamDefValue[T];
            }
        }else{
            Name = ParamName;
            TextsinDefValue = ParamDefValue;
        }
        LiveRC_Config["ProposeTextTranslation"][ArrayName][Name] = TextsinDefValue;
    }
}

function ProposeTranslationExtension_CreateMenu(id){
    var TargetDiv = document.getElementById("OutFixedBottomPanel");
    if(!TargetDiv) return;

    lrcCloseAll();
    $(document.body).addClass("LiveRCTranslationgDisplayed");

    LiveRC_Config["ProposeTextTranslation"] = new Array();
    ProposeTranslationExtension_TextTranslationFill(lrcTranslatedTexts, "lrcTranslatedTexts", true);
    ProposeTranslationExtension_TextTranslationFill(lrcTranslatedParamDesc, "lrcTranslatedParamDesc", true);
    ProposeTranslationExtension_TextTranslationFill(lrcExtensions, "lrcExtensions");
    ProposeTranslationExtension_TextTranslationFill(lrcCSSstyles, "lrcCSSstyles");

    var Menu = document.createElement('div');
    Menu.id = id;
    var MenuAnchor = document.createElement('div');
    MenuAnchor.id = id + "_Anchor";
    MenuAnchor.innerHTML = lrcMakeText("ProposeTranslationMenuTitle");
    Menu.appendChild(MenuAnchor);
    var MenuContent = document.createElement('div');
    MenuContent.id = id + "_Content";
    $(MenuContent).addClass("LiveRC_MenuContent");
    Menu.appendChild(MenuContent);
    MenuContent.appendChild(ProposeTranslationExtension_CreateOptionButtons());
    var ToggleButtons = document.createElement('p');
    ToggleButtons.id = id+"_ToggleButtons";
    MenuContent.appendChild(ToggleButtons); 
    var Form = document.createElement('form');
    Form.id = id + "_Form";
    MenuContent.appendChild(Form); 
    TargetDiv.appendChild(Menu);
    for(var ArrayName in LiveRC_Config["ProposeTextTranslation"]){
        var ThisArray = LiveRC_Config["ProposeTextTranslation"][ArrayName]; 
        var VariableFieldset = document.createElement('fieldset');
        VariableFieldset.id = "LiveRC_TranslationContent_"+ArrayName;
        VariableFieldset.setAttribute("style", "text-align:left;");
        Form.appendChild(VariableFieldset); 
        var VariableLegend = document.createElement('legend');
        VariableLegend.appendChild(document.createTextNode(lrcMakeParamDescription(ArrayName)));
        VariableFieldset.appendChild(VariableLegend);
        VariableFieldset.appendChild(ProposeTranslationExtension_CreateActionButtons());
        var VariableDiv = document.createElement('div');
        VariableDiv.className = "LiveRC_TranslationMenuPart";
        VariableDiv.setAttribute("style", "height:350px;overflow-y:auto;");
        VariableFieldset.appendChild(VariableDiv);
        var VariableUl = document.createElement('ul');
        VariableUl.id = "LiveRC_TranslationContentUL_"+ArrayName;
        VariableUl.className = "LiveRC_TranslationContentUL";
        // VariableUl.setAttribute("style", "-moz-column-count:2;-webkit-column-count:2;column-count:2;");
        VariableDiv.appendChild(VariableUl);
    }
    ProposeTranslationExtension_FillTextLists(lrcMakeParam("Language"));
    ProposeTranslationExtension_CreateToggleButtons(id);
    ProposeTranslationExtension_HighlightMissingTranslations();
    LiveRC_SetVerticalResizeZone(MenuAnchor, $(Menu).find("div.LiveRC_TranslationMenuPart").toArray(), Menu);
}

function ProposeTranslationExtension_FillTextLists(DefaultLang){
    for(var ArrayName in LiveRC_Config["ProposeTextTranslation"]){
        var ThisArray = LiveRC_Config["ProposeTextTranslation"][ArrayName]; 
        var VariableUl = document.getElementById("LiveRC_TranslationContentUL_"+ArrayName);
        if(!VariableUl) continue;  
        while(VariableUl.firstChild){ VariableUl.removeChild(VariableUl.firstChild); };
        for(var ThisParamName in ThisArray){
            var ThisParam = ThisArray[ThisParamName];
            var P = document.createElement('li');
            $(P).addClass("ParamMenuLi");
            VariableUl.appendChild(P);
            var HiddenInput = document.createElement('input');
            HiddenInput.type = "hidden";
            HiddenInput.name = "variable_index";
            HiddenInput.value = ThisParamName;
            P.appendChild(HiddenInput);
            var Label = document.createElement('label');
            Label.setAttribute('for', ThisParamName);
            Label.innerHTML = ThisParamName;
            P.appendChild(Label);
            P.appendChild(document.createElement("br"));
            var Oldtranslations = document.createElement('span');
            $(Oldtranslations).addClass('translations');
            var TranslationsText = new Array();
            for(var VarIndex in ThisParam){
                if(VarIndex === "desc") continue;
                TranslationsText.push(ProposeTranslationExtension_FillTextList(VarIndex, ThisParam, DefaultLang));
            }
            if(TranslationsText.length===0) 
                TranslationsText.push(ProposeTranslationExtension_FillTextList("desc", ThisParam, DefaultLang));
            Oldtranslations.innerHTML = TranslationsText.join("");
            P.appendChild(Oldtranslations);
            var Input = document.createElement('input');
            Input.name = ThisParamName;
            Input.type = "text";
            Input.size = 120;
            Input.setAttribute("style", "padding:2px;margin:0");
            Input.value = "";
            P.appendChild(Input);
        }
    }
}

function ProposeTranslationExtension_FillTextList(VarIndex, ThisParam, DefaultLang){
    if(!ThisParam[VarIndex]) return "";
    var Default = " defaultlang";
    var Lang = VarIndex;
    if(Lang.indexOf("desc-")!=-1) Lang = Lang.split("desc-").join("");
    if(Lang != DefaultLang) Default = "";
    var ThisTranslation = '* <code><span class="lang'+Default+'">'+Lang+'</span></code>'
                        + ' : '
                        + '<span class="trad">'+ThisParam[VarIndex].htmlize()+'</span><br />';
    return ('<span class="translation">' + ThisTranslation + '</span>');
}

function ProposeTranslationExtension_CreateActionButtons(){
    var ActionP = document.createElement('p');
    var OKInput = document.createElement('input');
    OKInput.type = "button";
    OKInput.value = lrcMakeText("OK");
    OKInput.onclick = function(){ ProposeTranslationExtension_CheckTargetPage(); return false;}
    OKInput.onselect = function(){ ProposeTranslationExtension_CheckTargetPage(); return false;}
    ActionP.appendChild(OKInput);
    var CancelInput = document.createElement('input');
    CancelInput.type = "button";
    CancelInput.value = lrcMakeText("Cancel");
    CancelInput.onclick = function(){ ProposeTranslationExtension_ToggleMenu(this); return false;}
    CancelInput.onselect = function(){ ProposeTranslationExtension_ToggleMenu(this); return false;}
    ActionP.appendChild(CancelInput);
    return ActionP;
}

function ProposeTranslationExtension_CreateToggleButtons(id){
    var Form = document.getElementById(id + "_Form");
    var P = document.getElementById(id + "_ToggleButtons");
    var Fieldsets = Form.getElementsByTagName('fieldset');
    for(var a=0,l=Fieldsets.length;a<l;a++){
        var Id = ""+Fieldsets[a].id.split("LiveRC_TranslationContent_").join("");
        var Input = document.createElement('input');
        Input.id = "LiveRC_TranslationContentInput_"+Id;
        Input.type = "button";
        Input.setAttribute("style", "padding:0;");
        Input.value = lrcMakeParamDescription(Id+"_short");
        Input.title = lrcMakeParamDescription(Id);
        Input.onclick = function(){ ProposeTranslationExtension_ToggleMenuContent(this); return false;};
        Input.onselect = function(){ ProposeTranslationExtension_ToggleMenuContent(this); return false;};
        P.appendChild(Input);
    }
    ProposeTranslationExtension_ToggleMenuContent();
    LiveRC_Config["Timeout"]["TranslationMenu"] = setTimeout("ProposeTranslationExtension_SetMenuHeights()", 500);
}

function ProposeTranslationExtension_ToggleMenuContent(Input){
    var Id = false;
    if(Input) Id = Input.id.split("LiveRC_TranslationContentInput_").join("LiveRC_TranslationContent_");
    var Form = document.getElementById("ProposeTranslationExtension_Menu_Form");
    var Onglets = document.getElementById("ProposeTranslationExtension_Menu_ToggleButtons").getElementsByTagName('input');
    var Fieldsets = Form.getElementsByTagName('fieldset');
    for(var a=0,l=Fieldsets.length;a<l;a++){
        if(Id){
            Onglets[a].setAttribute("style", ((Id == Fieldsets[a].id)? "font-weight:bold;padding:0;" : "padding:0;") );
            Fieldsets[a].style.display = ((Id == Fieldsets[a].id)? "" : "none");
        }else{
            Onglets[a].setAttribute("style", ((a==0)? "font-weight:bold;padding:0;" : "padding:0;") );
            Fieldsets[a].style.display = ((a==0)? "" : "none");
        }
    }
}

function ProposeTranslationExtension_SetMenuHeights(){
  var Menu = document.getElementById("ProposeTranslationExtension_Menu");
  if(!Menu) return;
  var HeightFound = false;
  var FieldSets = Menu.getElementsByTagName('fieldset');
  for(var b=0,m=FieldSets.length;b<m;b++){
    if(FieldSets[b].style.display == "none") continue;
    var MenuPart = $(FieldSets[b]).find("div.LiveRC_TranslationMenuPart")[0];
    if(!MenuPart) continue;
    var StyleHeight = MenuPart.style.height;
    if(StyleHeight) HeightFound = StyleHeight;
  }
  if(HeightFound){
    $(Menu).find("div.LiveRC_TranslationMenuPart").css("height", HeightFound);
  }
  clearTimeout(LiveRC_Config["Timeout"]["TranslationMenu"]);
  LiveRC_Config["Timeout"]["TranslationMenu"] = setTimeout("ProposeTranslationExtension_SetMenuHeights()", 500);
}

function ProposeTranslationExtension_CreateOptionButtons(){
  var Span = document.createElement("p");
  Span.id = "ProposeTranslationExtension_SelectorsSpan";

  var DefaultLangSelect = ProposeTranslationExtension_CreateLangSelector({
            selectedopt:lrcMakeParam("Language"),
            label:lrcMakeText("ProposeTranslationMenuDefaultLangSelectorTitle"),
            id:"ProposeTranslationExtension_DefaultLangSelector",
            onchangefunc:ProposeTranslationExtension_OnLangSelectorChange
  });
  Span.appendChild(DefaultLangSelect);

  Span.appendChild(document.createTextNode(" • "));

  var EmptyOpt = document.createElement('option');
  EmptyOpt.value = "";
  EmptyOpt.innerHTML = "";
  var LangSelect = ProposeTranslationExtension_CreateLangSelector({
            selectedopt:lrcMakeParam("Language"),
            label:lrcMakeText("ProposeTranslationMenuLangSelectorTitle"),
            id:"ProposeTranslationExtension_LangSelector",
            onchangefunc:ProposeTranslationExtension_OnLangSelectorChange
  });
  Span.appendChild(LangSelect);

  Span.appendChild(document.createTextNode(" • "));

  var PageLabel = document.createElement('label');
  PageLabel.setAttribute('for', "ProposeTranslationExtension_PageSelector");
  PageLabel.innerHTML = lrcMakeText("ProposeTranslationMenuSandboxTitle");
  Span.appendChild(PageLabel);
  var PageInput = document.createElement('input');
  PageInput.name = "ProposeTranslationExtension_PageSelector";
  PageInput.id = "ProposeTranslationExtension_PageSelector";
  PageInput.type = "text";
  PageInput.size = 45;
  PageInput.value = lrcMakeParam("DefaultTargetPage");
  Span.appendChild(PageInput);

  Span.appendChild(document.createElement("br"));

  var SaveAllLabel = document.createElement('label');
  SaveAllLabel.setAttribute("for","SaveAllParams");
  SaveAllLabel.innerHTML = lrcMakeText("ProposeTranslationSaveAllParams");
  var SaveAllInput = document.createElement('input');
  SaveAllInput.type = "checkbox";
  SaveAllInput.id = "SaveAllParams";
  SaveAllInput.checked = "checked";
  SaveAllInput.name = "SaveAllParams";

  Span.appendChild(SaveAllLabel);
  Span.appendChild(SaveAllInput);

  Span.appendChild(document.createTextNode(" • "));

  var HideTranslatedLabel = document.createElement('label');
  HideTranslatedLabel.setAttribute('for', "HideTranslatedSelector");
  HideTranslatedLabel.innerHTML = lrcMakeText("ProposeTranslationHideTranslatedLabel");
  var HideTranslatedInput = document.createElement('input');
  HideTranslatedInput.id = "HideTranslatedSelector";
  HideTranslatedInput.name = "HideTranslatedSelector";
  HideTranslatedInput.type = "checkbox";
  HideTranslatedInput.onclick = ProposeTranslationExtension_HideTranslatedTexts;

  Span.appendChild(HideTranslatedLabel);
  Span.appendChild(HideTranslatedInput);

  return Span;
}

function ProposeTranslationExtension_CreateLangSelector(Args){
  var Span = document.createElement('span');
  var LangLabel = document.createElement('label');
  LangLabel.setAttribute('for', "ProposeTranslationExtension_LangSelector");
  LangLabel.innerHTML = Args.label;
  var LangSelect = document.createElement("select");
  if(Args.id) LangSelect.id = Args.id;
  if(Args.firstopt) LangSelect.appendChild(Args.firstopt);
  for(var langcode in LiveRC_Config["MediawikiLanguages"]){
    var ThisLang = LiveRC_Config["MediawikiLanguages"][langcode];
    var opt = document.createElement('option');
    opt.value = langcode;
    opt.innerHTML = "("+langcode+") "+ThisLang;
    if(LiveRC_Config["SupportedLanguages"].indexOf(langcode)!=-1) opt.style.fontWeight = "bold";
    if(Args.selectedopt === langcode) opt.selected = "selected";
    LangSelect.appendChild(opt);
  }
  if(typeof(Args.onchangefunc)==="function") LangSelect.onchange = Args.onchangefunc;
  Span.appendChild(LangLabel);
  Span.appendChild(LangSelect);
  return Span;
}

function ProposeTranslationExtension_OnLangSelectorChange(){
  var LangSelector = document.getElementById("ProposeTranslationExtension_LangSelector");
  var DefaultLangSelector = document.getElementById("ProposeTranslationExtension_DefaultLangSelector");
  if( !DefaultLangSelector || !LangSelector ) return;
  var Lang = LangSelector.value;
  var DefaultLang = LangSelector.value;
  var LangsToLoad = new Array();
  if(!LiveRC_Config["LoadedLanguages"][Lang]){
    LangsToLoad.push(Lang);
  }
  if(!LiveRC_Config["LoadedLanguages"][DefaultLang]){
    LangsToLoad.push(DefaultLang);
  }
  if(LangsToLoad.length>0){
    var LoadLaunched = false;
    for(var a=0,l=LangsToLoad.length;a<l;a++){
      var ThisLang = LangsToLoad[a];
      if(LiveRC_Config["LoadedLanguages"][ThisLang]) continue;
      if(LiveRC_Config["AvailableLanguages"].indexOf(ThisLang)!=-1) continue;
      if(LiveRC_Config["SupportedLanguages"].indexOf(ThisLang)==-1) continue;
      LiveRC_Config["AvailableLanguages"].push(ThisLang);
      LoadLaunched = true;
      lrcDisplayDebug("Load translations: " + ThisLang );
      mw.loader.load('//fr.wikipedia.org/w/index.php?title='
                 + 'MediaWiki:Gadget-LiveRC.js/i18n/'+ThisLang+'.js'
                 + '&action=raw&ctype=text/javascript');
    }
  }
  if(LoadLaunched){
    var EndFunc = {functions:new Array(ProposeTranslationExtension_UpdateTextLis)};
    LiveRC_Config["LaunchProcess"].push(EndFunc);
    LiveRC_Config["Timeout"]["CheckIfTranslationsLoaded"] = setTimeout("LiveRC_CheckIfTranslationsLoaded();", 500);
    LiveRC_Config["Timeout"]["LanguageMissing"] = setTimeout("LiveRC_Alert_TranslationsNotLoaded();", (25*1000));
  }else{
    ProposeTranslationExtension_UpdateTextLis();
  }
}

function ProposeTranslationExtension_UpdateTextLis(){
  var DefaultLangSelector = document.getElementById("ProposeTranslationExtension_DefaultLangSelector");
  if(!DefaultLangSelector) return;
  var DefaultLang = DefaultLangSelector.value;

  LiveRC_Config["ProposeTextTranslation"] = new Array();
  ProposeTranslationExtension_TextTranslationFill(lrcTranslatedTexts, "lrcTranslatedTexts", true);
  ProposeTranslationExtension_TextTranslationFill(lrcTranslatedParamDesc, "lrcTranslatedParamDesc", true);
  ProposeTranslationExtension_TextTranslationFill(lrcExtensions, "lrcExtensions");
  ProposeTranslationExtension_TextTranslationFill(lrcCSSstyles, "lrcCSSstyles");
  ProposeTranslationExtension_FillTextLists(DefaultLang);
  ProposeTranslationExtension_ToggleMenuContent();
  ProposeTranslationExtension_HighlightMissingTranslations();
}

function ProposeTranslationExtension_HighlightMissingTranslations(){
  var Form = document.getElementById("ProposeTranslationExtension_Menu_Form");
  var LangSelector = document.getElementById("ProposeTranslationExtension_LangSelector");
  if( !Form || !LangSelector) return;
  var SelectedLang = LangSelector.value;
  if(!SelectedLang) return;
  var AllLis = Form.getElementsByTagName('li');
  for(var a=0,l=AllLis.length;a<l;a++){
    var Li = AllLis[a];
    var Trad = ProposeTranslationExtension_GetTrad(Li, SelectedLang);
    if(Trad === false){
      $(Li).addClass("NotranslationParamLi");
    }else{
      $(Li).removeClass("NotranslationParamLi");
    }
  }
  ProposeTranslationExtension_HideTranslatedTexts();
}


function ProposeTranslationExtension_HideTranslatedTexts(){
  var Form = document.getElementById("ProposeTranslationExtension_Menu_Form");
  var Input = document.getElementById("HideTranslatedSelector");
  var LangSelector = document.getElementById("ProposeTranslationExtension_LangSelector");
  if( !Form || !Input || !LangSelector ) return;
  var SelectedLang = LangSelector.value;
  if(!SelectedLang){
    $(Form).removeClass("HideTranslated");
    return;
  }
  if(Input.checked){
    $(Form).addClass("HideTranslated");
  }else{
    $(Form).removeClass("HideTranslated");
  }
}



function ProposeTranslationExtension_GetTrad(Li, SelectedLang){
    var foundtranslation = false;
    var Translations = $(Li).find("span.translation");
    for(var b=0,m=Translations.length;b<m;b++){
      if(foundtranslation) continue;
      var Lang = $(Translations[b]).find("span.lang")[0].innerHTML;
      var Trad = $(Translations[b]).find("span.trad")[0].innerHTML;
      if(Lang == SelectedLang) foundtranslation = true;
    }
    if(foundtranslation) return Trad;
    return false;
}

function ProposeTranslationExtension_CheckTargetPage(){
  var LangSelector = document.getElementById("ProposeTranslationExtension_LangSelector");
  var PageSelector = document.getElementById("ProposeTranslationExtension_PageSelector");
  if( !LangSelector || !PageSelector ) return;
  var Lang = LangSelector.value;
  if(!Lang) return;
  var Page = PageSelector.value;
  if(!Page) return;
  var RealPageTarget = Page.split("$LANG$").join(Lang);
  var FunctionToLaunch = function(){
    ProposeTranslationExtension_CheckMenu(Lang, Page);
  }
  var Message = "";
  if(Page.match(/\.js$/)==null){
    Message = lrcMakeText("NotJavascriptPage").split("$1").join(RealPageTarget)
    LiveRC_alert(Message);
    return
  }
  Message = lrcMakeText("NeedRightToEdit")
  var PageNamespace = getNamespaceInfoFromPage(Page);
  if(PageNamespace==8 && !lrcUserHasRight("editinterface")){
    Message = Message.split("$1").join("<code>editinterface</code>").split("$2").join("<code>"+RealPageTarget+"</code>");
    LiveRC_alert(Message);
    return
  }
  if(PageNamespace==2 && !(Page.indexOf(mw.config.get('wgUserName'))==-1) && !lrcUserHasRight("edituserjs")){
    Message = Message.split("$1").join("<code>edituserjs</code>").split("$2").join("<code>"+RealPageTarget+"</code>")
    LiveRC_alert(Message);
    return
  }
  if(Page==lrcParams["DefaultTargetPage"]){
    var TheLang = LiveRC_Config["MediawikiLanguages"][Lang];
    Message = lrcMakeText("ThisIsGlobalTranslation").split("$1").join("<code>"+RealPageTarget+"</code>").split("$2").join(TheLang);
    LiveRC_confirm(Message, FunctionToLaunch);
    return;
  }else{
    FunctionToLaunch();
  }
}

function ProposeTranslationExtension_CheckMenu(Lang, Page){
  var Form = document.getElementById("ProposeTranslationExtension_Menu_Form");
  if( !Form ) return;
  Page = Page.split("$LANG$").join(Lang);
  var SaveAllParams = false;
  var SaveAllParamsInput = document.getElementById('SaveAllParams');
  if(SaveAllParamsInput){
    SaveAllParams = SaveAllParamsInput.checked;
  }
  var AllLines = new Array();
  var AddFunctions = {"lrcTranslatedTexts"     : "addTradToTranslatedTexts",
                      "lrcTranslatedParamDesc" : "addTradToTranslatedParamDesc",
                      "lrcExtensions"          : "addTradToExtensions",
                      "lrcCSSstyles"           : "addTradToCSSstyles"
  };  
  var Fieldsets = Form.getElementsByTagName('fieldset'); 
  for(var a=0,l=Fieldsets.length;a<l;a++){
    var Fieldset = Fieldsets[a];
    var ArrayName = Fieldset.id.split("LiveRC_TranslationContent_").join("");
    var FunctionName = AddFunctions[ArrayName];
    var Lis = Fieldset.getElementsByTagName('li');
    for(var b=0,m=Lis.length;b<m;b++){
      var Li = Lis[b];
      var Inputs = Li.getElementsByTagName('input')
      var Label = Inputs[0].value;
      var Translation = Inputs[1].value;
      if(!Translation && SaveAllParams){
        Translation = ProposeTranslationExtension_GetTrad(Li, Lang);
      }
      if(Translation){
        var ThisLineText = "  " + FunctionName + "("
                         + lrcEscapeStrHTML(Label) 
                         + "," 
                         + lrcEscapeStrHTML(Lang) 
                         + "," 
                         + lrcEscapeStrHTML(Translation).unhtmlize()
                         + ");"
        AllLines.push(ThisLineText);
      }
    }
    AllLines.push("\n");
  }
  AllLines.push("");
  var NewTranslationTemplate = "/*\n"
                             + "    ******************* $1 translations for LiveRC *******************\n"
                             + "\n"
                             + "\n"
                             + "{{Catégorisation JS|LiveRC}}\n"
                             + "*/\n"
                             + "\n"
                             + "LiveRC_Config['LoadFunctions']['$2'] = function(){  // =============== START TRANSLATION\n"
                             + "\n" 
                             + "  LiveRC_Config['LoadedLanguages']['$2'] = true;\n"
                             + "  lrcDisplayDebug('Translations loaded: $2');\n"
                             + "\n"
                             + "$3\n"
                             + "} // =============== END TRANSLATION\n"

  var NewTranslationText = NewTranslationTemplate;
  NewTranslationText = NewTranslationText.split("$1").join(Lang.toUpperCase());
  NewTranslationText = NewTranslationText.split("$2").join(Lang);
  NewTranslationText = NewTranslationText.split("$3").join(AllLines.join("\n"));
  
  var P = document.getElementById("LiveRC_ParamMenuRunning");
  if(!P){
    P = document.createElement('p');
    P.id = "LiveRC_ParamMenuRunning";
    Form.insertBefore(P,Form.firstChild);
  }
  if(P) P.innerHTML = lrcMakeText("EditRunning").split("$1").join(Page);

  var URL = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=xml&action=query&prop=info&intoken=edit&inprop=protection&titles='+encodeURIComponent(Page);
  // alert(URL);
  wpajax.http({ url: URL,
                onSuccess: ProposeTranslationExtension_EditSandBox,
                page: Page,
                message: NewTranslationText,
                lang: Lang
  });
}

function ProposeTranslationExtension_EditSandBox(Req, data){
  var Page=data.page;
  var message=data.message;
  var Lang = data.lang;
  var EditParam = new Array();
  var ObjetXML = Req.responseXML;
  var Isprotected = false;
  var PR = ObjetXML.getElementsByTagName("pr");
  for(var a=0,l=PR.length;a<l;a++){
    var Type = PR[a].getAttribute("type");
    var Level = PR[a].getAttribute("level");
    if(Type=="edit" && mw.config.get('wgUserGroups').indexOf(Level)==-1) Isprotected = true;
  }
  if(Isprotected){
    alert('Page protégée');
    return;
  }
  var page = ObjetXML.getElementsByTagName("page")[0];
  EditParam["token"] = encodeURIComponent(page.getAttribute("edittoken"));
  EditParam["text"] = encodeURIComponent(message);
  EditParam["summary"] = lrcMakeText("RESUMESTART")+lrcMakeText("ProposeTranslationResume").split("$1").join(Lang);
  EditParam["title"] = encodeURIComponent(Page);
  EditParam["watchlist"] = "preferences";
  if(lrcMakeParam("BypassWatchdefault")) EditParam["watchlist"] = "nochange";
  var Params = new Array();
  for(var Param in EditParam){
    Params.push(Param+"="+EditParam[Param]);
  }
  Params = Params.join("&");
  var headers = new Array();
  headers['Content-Type'] = 'application/x-www-form-urlencoded';

  var P = document.getElementById("LiveRC_ParamMenuRunning");
  if(!P){
    var Form = document.getElementById("ProposeTranslationExtension_Menu_Form");
    P = document.createElement('p');
    P.id = "LiveRC_ParamMenuRunning";
    Form.insertBefore(P,Form.firstChild);
  }
  if(P) P.innerHTML += "<br />" + lrcMakeText("SaveRunning").split("$1").join(Page);
  wpajax.http({ url: mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?action=edit',
                method: "POST", headers: headers,
                onSuccess: ProposeTranslationExtension_EditSandBoxDone,
                page: Page,
                data: Params});
}

function ProposeTranslationExtension_EditSandBoxDone(Req, data){
  var Page=data.page;
  var P = document.getElementById("LiveRC_ParamMenuRunning");
  if(!P){
    var Form = document.getElementById("ProposeTranslationExtension_Menu_Form");
    P = document.createElement('p');
    P.id = "LiveRC_ParamMenuRunning";
    Form.insertBefore(P,Form.firstChild);
  }
    RefreshText = lrcMakeText("SaveDone").split("$1").join(Page)
                  + "<br/>" 
                  + lrcMakeText("SaveRefresh")
                  + '<sup>'
                   +  '<a class="LiveRC_ManageParams_SaveParamsRefresh" '
                    +  'href="javascript:;" onclick="LiveRC_ManageParams_SaveParamsRefresh();" '
                    +  'title="'+lrcMakeText("HideRefreshP_TIP")+'" >'
                     + lrcMakeText("HideRefreshP_SHORT")
                   +  '</a>'
                  +  '</sup>'; 
    if(P) P.innerHTML = RefreshText;
}

} // FIN IF
 
//</source>