From 8f74299a99027a9c1859a8748ad6139a2090fa06 Mon Sep 17 00:00:00 2001 From: Ludovic CHEVALIER Date: Wed, 19 Jun 2013 08:32:40 +0200 Subject: [PATCH] [PLUGINS] +multilangue --- www/plugins/multilang/alire.txt | 71 ++ .../formulaires/configurer_multilang.html | 72 ++ .../configurer_multilang_fonctions.php | 16 + www/plugins/multilang/images/background.png | Bin 0 -> 7909 bytes .../multilang/images/multi_forbidden.png | Bin 0 -> 357 bytes .../multilang/images/multi_undefined.png | Bin 0 -> 340 bytes www/plugins/multilang/images/multilang-16.png | Bin 0 -> 2034 bytes www/plugins/multilang/images/multilang-24.png | Bin 0 -> 1392 bytes www/plugins/multilang/images/multilang-32.png | Bin 0 -> 1784 bytes www/plugins/multilang/images/multilang-48.png | Bin 0 -> 2479 bytes www/plugins/multilang/javascript/multilang.js | 646 ++++++++++++++++++ .../javascript/multilang_init.js.html | 3 + .../multilang_init.js_fonctions.php | 92 +++ .../javascript/multilang_lang.js.html | 12 + www/plugins/multilang/lang/multilang.xml | 16 + www/plugins/multilang/lang/multilang_en.php | 47 ++ www/plugins/multilang/lang/multilang_es.php | 47 ++ www/plugins/multilang/lang/multilang_fa.php | 48 ++ www/plugins/multilang/lang/multilang_fr.php | 45 ++ www/plugins/multilang/lang/multilang_sk.php | 47 ++ .../multilang/lang/paquet-multilang.xml | 14 + .../multilang/lang/paquet-multilang_en.php | 15 + .../multilang/lang/paquet-multilang_es.php | 15 + .../multilang/lang/paquet-multilang_fr.php | 13 + .../multilang/lang/paquet-multilang_it.php | 15 + .../multilang/lang/paquet-multilang_ru.php | 15 + .../multilang/lang/paquet-multilang_sk.php | 15 + www/plugins/multilang/multilang.css.html | 56 ++ www/plugins/multilang/multilang.js.html | 6 + .../multilang/multilang_administrations.php | 56 ++ www/plugins/multilang/multilang_pipelines.php | 141 ++++ www/plugins/multilang/paquet.xml | 29 + .../contenu/configurer_multilang.html | 5 + .../contenu/configurer_multilangue.html | 1 + .../prive/style_prive_plugin_multilang.html | 66 ++ .../prive/themes/spip/images/multilang-16.png | Bin 0 -> 1268 bytes .../prive/themes/spip/images/multilang-24.png | Bin 0 -> 1392 bytes www/plugins/multilang/svn.revision | 10 + 38 files changed, 1634 insertions(+) create mode 100644 www/plugins/multilang/alire.txt create mode 100644 www/plugins/multilang/formulaires/configurer_multilang.html create mode 100644 www/plugins/multilang/formulaires/configurer_multilang_fonctions.php create mode 100644 www/plugins/multilang/images/background.png create mode 100644 www/plugins/multilang/images/multi_forbidden.png create mode 100644 www/plugins/multilang/images/multi_undefined.png create mode 100644 www/plugins/multilang/images/multilang-16.png create mode 100644 www/plugins/multilang/images/multilang-24.png create mode 100644 www/plugins/multilang/images/multilang-32.png create mode 100644 www/plugins/multilang/images/multilang-48.png create mode 100644 www/plugins/multilang/javascript/multilang.js create mode 100644 www/plugins/multilang/javascript/multilang_init.js.html create mode 100644 www/plugins/multilang/javascript/multilang_init.js_fonctions.php create mode 100644 www/plugins/multilang/javascript/multilang_lang.js.html create mode 100644 www/plugins/multilang/lang/multilang.xml create mode 100644 www/plugins/multilang/lang/multilang_en.php create mode 100644 www/plugins/multilang/lang/multilang_es.php create mode 100644 www/plugins/multilang/lang/multilang_fa.php create mode 100644 www/plugins/multilang/lang/multilang_fr.php create mode 100644 www/plugins/multilang/lang/multilang_sk.php create mode 100644 www/plugins/multilang/lang/paquet-multilang.xml create mode 100644 www/plugins/multilang/lang/paquet-multilang_en.php create mode 100644 www/plugins/multilang/lang/paquet-multilang_es.php create mode 100644 www/plugins/multilang/lang/paquet-multilang_fr.php create mode 100644 www/plugins/multilang/lang/paquet-multilang_it.php create mode 100644 www/plugins/multilang/lang/paquet-multilang_ru.php create mode 100644 www/plugins/multilang/lang/paquet-multilang_sk.php create mode 100644 www/plugins/multilang/multilang.css.html create mode 100644 www/plugins/multilang/multilang.js.html create mode 100644 www/plugins/multilang/multilang_administrations.php create mode 100644 www/plugins/multilang/multilang_pipelines.php create mode 100644 www/plugins/multilang/paquet.xml create mode 100644 www/plugins/multilang/prive/squelettes/contenu/configurer_multilang.html create mode 100644 www/plugins/multilang/prive/squelettes/contenu/configurer_multilangue.html create mode 100644 www/plugins/multilang/prive/style_prive_plugin_multilang.html create mode 100644 www/plugins/multilang/prive/themes/spip/images/multilang-16.png create mode 100644 www/plugins/multilang/prive/themes/spip/images/multilang-24.png create mode 100644 www/plugins/multilang/svn.revision diff --git a/www/plugins/multilang/alire.txt b/www/plugins/multilang/alire.txt new file mode 100644 index 0000000..05e8bb7 --- /dev/null +++ b/www/plugins/multilang/alire.txt @@ -0,0 +1,71 @@ + +Tous les champs input:text et textarea sauf ceux des forms .form_upload et .form_upload_icon sont traites dans : +- articles +- rubriques +- configuration du site +- auteurs (interessant uniquement pour le champs BIO) +- documents dans les colonnes de gauche des pages d'edition d'articles et de rubriques +- documents dans les parties basses des pages de presentation des articles et rubriques +- groupe de mots cles +- mots cles +- sites +- Breves + + +A faire : +- F&T : pb de doublon avec forms_lang.js +- Integration avec Porte-Plume : quand on change de langue, la previsu "Voir" ne bascule pas + +- Suggestion de RastaPopoulos : J'avais une idée supplémentaire pour que ce soit extensible : activer également ce système sur tous les champs ayant une classe "multilang". Fait, a tester avec class "multilang" + +Trucs a regler : +1.------------- +Avec Mediatheque, l'init est rappelee grace au onAjaxLoad. Et affiche bien le menu lang dans la modale. Mais un 2e menu est aussi rajoute dans le doc principal sous la modale de mediatheque... De meme quand on ferme la modale, on repasse par l'init... Et on se retrouve avec un 3e menu. J'ai donc interdit la creation d'un menu s'il en existe deja un dans la div : +fct forms_init_multi : + if(!container.find('.menu_lang').size()) + container.prepend(""); + $.each(multilang_avail_langs,function() { + var title = 'multilang_lang.title_lien_multi_'+this; + multilang_menu_lang.append($("").html("["+this+"]")); + }); + multilang_menu_lang.append($("").html("["+multilang_lang.lien_desactiver+"]")); + + //init fields + multilang_fields_selector = options.fields; + multilang_fields_selector_opt = options.fields_opt; + + //store all the internationalized forms + multilang_forms_selector = options.forms || "form"; + + if(init_done){ + multilang_forms_toadd = $(multilang_forms_selector,multilang_jq_root).not($(multilang_forms)); + } + multilang_forms = $(multilang_forms_selector,multilang_jq_root); + if(!init_done) + multilang_forms_toadd = multilang_forms; + + //create menu lang for the global form + if(multilang_containers.size()) + multilang_make_menu_lang(multilang_containers); + multilang_menu_selector = options.form_menu; + + multilang_init = true; + + // Modif Yffic : On va pas plus loin s'il n'y a pas de form + if(multilang_forms_toadd.size()) multilang_init_multi(); + +} + +/** + * Initialisation des champs multi sur les formulaires + * + * @param options + * @return + */ +function multilang_init_multi(options) { + var target = options ? options.target : null; + var init_forms; + //Update the list of form if this is an update + if(target) { + //Verify the target is really a form to be internationalized (in case of an ajax request fired by onAjaxLoad) + if(target==document) return; + init_forms = $(target).find('form').in_set($(multilang_forms_selector,multilang_jq_root)); + if(!init_forms.length) return; + multilang_forms.add(init_forms.each(multilang_attach_submit).get()); + } else { + //attach multi processing to submit event + init_forms = multilang_forms_toadd; + multilang_forms_toadd.each(multilang_attach_submit); + } + + multilang_forms_fields = {}; + multilang_forms_fields["undefined"] = $(multilang_fields_selector,multilang_forms); + //init the value of the field to current lang + //add a container for the language menu inside the form + init_forms.each(function() { + /* + * Je ne sais pas à quoi cela sert particulièrement, désactivé pour l'instant + */ + //$(this).find('input[type=submit],button').click(function(){ + //multilang_multi_submit.apply($(this).parents('form').get(0)); + //$(this).parents('form').submit(); + //return false; + //}); + this.isfull = false; + this.form_lang = multilang_def_lang; + var container = multilang_menu_selector ? $(multilang_menu_selector,this) : $(this); + // Pas de rajout s'il y en deja un + if(!container.find('.menu_multilang').size()) + container.prepend(""); + }); + + /** + * Initialisation de chaque input ou textarea + * On vérifie si on est dans un formulaire optionnel (dans ce cas on ne prend que + * les éléments qui on la class optionnelle) sinon on prend tous les champs qui + * matchent + */ + $(multilang_fields_selector,init_forms).each(function(){ + var me = $(this); + if(me.closest(multilang_root_opt).length){ + if(me.is(multilang_fields_selector_opt)) + multilang_init_field(this,this.form.form_lang); + }else{ + multilang_init_field(this,this.form.form_lang); + } + }); + //create menu for each form. The menu is just before the form + $("div.menu_multilang",init_forms).empty().each(function() { + //store all form containers to allow menu lang update on each container + //when it is triggered by global menu + multilang_containers.add(this); + multilang_make_menu_lang($(this),$(this).parents("form")); + }); +} + +/** + * Création du menu de langue + * Liste les langues disponibles et ajoute un lien pour désactiver multilang + * + * @param container + * @param target + * @return + */ +function multilang_make_menu_lang(container,target) { + target = target || multilang_forms; + $(multilang_menu_lang).clone().find("a").click(function() { + if($(this).is('.change_lang') && !$(this).is('.on')){ + $(this).parents('form > .menu_multilang').find('a.on').removeClass('on'); + $(this).parents('form > .menu_multilang').find('.multilang_message').detach(); + $(this).parents('form').find('li.editer_titre_numero,div.editer_titre_numero').show(); + $(this).addClass('on'); + multilang_change_lang(this,container,target); + }else if(!$(this).is('.on') && $(this).is('.recover_lang')){ + $(this).parents('form > .menu_multilang').find('a.on').removeClass('on'); + $(this).parents('form > .menu_multilang').append('

'+multilang_lang.champs_readonly+'<\/p><\/div>'); + $(this).parents('form').find('li.editer_titre_numero,div.editer_titre_numero').hide(); + $(this).addClass('on'); + multilang_multi_recover(this,container,target,'submit'); + } + return false; + }).end().appendTo(container); + $(target).find('.menu_multilang .langues a').eq(0).addClass('on'); + + var target_id = multilang_init_target_id(target); + multilang_forms_fields[target_id].each(function(){ + multilang_save_lang(this,this.form.form_lang); + }); + // Maj du menu de langues + multilang_mark_empty_langs(container,target); +} + +/** + * Initialise target_id + * + * @param target Le formulaire + * @return + */ +function multilang_init_target_id(target){ + var target_id = target != multilang_forms ? jQuery.data(target[0]) : "undefined"; + multilang_forms_fields[target_id] = $(multilang_fields_selector,target); + return(target_id); +} + +/** + * Affiche le contenu complet du champ + * Utilisé lors de la désactivation de multilang et de la validation des formulaires + * + * @param el Le lien de désactivation + * @param container Le container du formulaire + * @param target Le formulaire + * @return + */ +function multilang_multi_recover(el,container,target,event){ + if(target[0].isfull){ + return true; + } + if(event == 'submit'){ + lang = 'full'; + var target_id = multilang_init_target_id(target); + target[0].isfull = true; + multilang_forms_fields[target_id].each(function(){ + if(!this.totreat) return ; + //save data before submit + multilang_save_lang(this,this.form.form_lang); + //build the string value + multilang_field_set_background(this,lang); + if(container && target){ + multilang_mark_empty_langs(container,target); + } + var def_value = this.field_lang[multilang_def_lang]; + if(!this.multi) + this.value = (def_value==undefined?"":def_value); + else { + var value="",count=0; + $.each(this.field_lang,function(name){ + if((name != 'full') && (this.length > 0)){ + //save default lang value and other lang values if different from the default one + if(name == multilang_def_lang){ + value = "["+name+"]"+this+value; + count++; + }else if(this!=def_value) { + value += "["+name+"]"+this; + count++; + } + } + }); + this.value = (count > 1 ? ""+value+"":value.replace(/^\[[a-z_]+\]/,'')); + } + // Add the title number to the final value + if(multilang_is_title(this) && ($('#'+this.id+'_numero').val() != '')) + this.value= $('#'+this.id+'_numero').val().replace(/\.|\s+/,'') + ". " + this.value; + }); + return true; + } +} + +/** + * Défini si un id de champ correspond a un champ "numerotable" + * + * @param id chaine correspondant a l'id du champ + */ +function multilang_is_title(el) { + return (el.id=='titre' || el.id=='champ_titre' || (el.id=='nom_site' && ($(el).parents('#configurer-accueil,.formulaire_configurer_identite,.formulaire_editer_auteur').size() < 1)) || el.id.match(/^titre_document[0-9]+/)!=null || el.name.match(/^content_[a-z0-9_]+_titre/)!=null || el.name.match(/^content_[a-z0-9_-]+nom_/)!=null) +} + +/** + * Initialisation du script sur un champ + * + * Récupère les données suivantes + * - Le contenu de l'élément du champ + * - Le booléen (true/false) multi (est ce un champs déjà multi) + * - Les différentes chaines de langue dans un objet : + * {fr="texte fr",en="texte en",full="[fr]texte fr[en]texte en"} + * Si le champ est déjà initialisé, fait un simple return + * + * @param el Le champ a initialiser + * @param lang La langue + * + */ +function multilang_init_field(el,lang,force) { + if(el.field_lang && !force) return; + var langs; + + // On enlève les espaces, retours à la ligne et tabulations de début et de fin de chaine + el.value.replace(/(?:^\s+|\s+$)/g, ""); + + // Modif Yffic : ne pas considerer comme multi les champs qui contiennent du texte + // en dehors des multi sauf un numero (\d+\.\s+) + var m = el.value.match(/(\d+\.\s+)?((?:.|\n|\s)*?)<\/multi>(.|\n*)/); + el.field_lang = {}; + el.field_pre_lang = ""; //this is the 01. part of the string, the will be put outside the + el.titre_el = $("#titre_"+el.id); + + // Init the elements to treat + if(m!=null) { + if( m.index || (m[3]!=undefined && m[3]!="")){ + $(el).addClass('multi_lang_broken'); + el.totreat=false; + } + else + el.totreat=true; + if(el.totreat) { + el.field_pre_lang = m[1] || ""; + // Suppress point and spaces + el.field_pre_lang = el.field_pre_lang.replace(/\.|\s+/,'') ; + el.multi = true; + multilang_match_multi.lastIndex=0; + el.field_lang['full'] = el.value; + while((langs=multilang_match_multi.exec(m[2]))!=null) { + var text = langs[2].match(/^(\d+\.\s+)((?:.|\n|\s)*)/), value; + // Suppression du numero uniquement pour les titres + if(multilang_is_title(el) && text!=null) { + value = text[2]; + // Suppress point and spaces + el.field_pre_lang = text[1].replace(/\.|\s+/,'') || ""; + } else { + value = langs[2]; + } + el.field_lang[langs[1]||multilang_def_lang] = value; + } + } + } else { + el.multi = false; + el.totreat=true; + + // Suppression du numero uniquement pour les titres + if(multilang_is_title(el)) { + var n = el.value.match(/(\d+\.\s+)?(.*)/); + el.field_pre_lang = n[1] || ""; + el.field_pre_lang = el.field_pre_lang.replace(/\.|\s+/,'') ; + el.field_lang[multilang_def_lang] = n[2]; + } else + el.field_lang[multilang_def_lang] = el.value; + } + + // Put the current lang string only in the field + multilang_set_lang(el,lang); + + /** + * Si le champ est un titre, on ajoute un champ facultatif "numéro" au formulaire permettant + * de traiter le cas où l'on utilise les numéros pour trier les objets + * Ajout d'Yffic le 30/03/2010 + */ + if(!force && multilang_is_title(el)){ + numid=el.id+'_numero'; + /** + * Cas des crayons qui n'ont pas toujours de formalisme en ul > li + */ + if(el.name.match(/^content_[a-z0-9_]+_titre/)){ + if($(el).parent().is('li')) + $(el).parent() + .before('

  • '); + else + $(el) + .before('


    '); + }else + $(el).parent() + .before('
  • '); + $('#'+numid).totreat = false; + } +} + +/** + * Action au click sur une langue du menu de langue + * + * @param el Le lien cliqué sur le menu + * @param container Le conteneur du formulaire + * @param target Le formulaire lui même + * + */ +function multilang_change_lang(el,container,target) { + var added_lang=""; + var target_id = multilang_init_target_id(target); + var lang = el.innerHTML; + + lang = lang.slice(1,-1); + + if(target[0].isfull){ + // Maj du menu de langues avant multilang_init_field + multilang_forms_fields[target_id].each(function(){ + var me = $(this); + if(me.parents(multilang_root_opt).size()>0){ + if(me.is(multilang_fields_selector_opt)) + multilang_init_field(this,lang,true); + }else + multilang_init_field(this,lang,true); + }); + target[0].isfull = false; + }else{ + //store the fields inputs for later use (usefull for select) + //save the current values + multilang_forms_fields[target_id].each(function(){ + multilang_save_lang(this,this.form.form_lang); + }); + // Maj du menu de langues apres multilang_save_lang + } + + //change current lang + target.each(function(){this.form_lang = lang}); + + //reinit fields to current lang + multilang_forms_fields[target_id].each(function(){ + multilang_set_lang(this,lang); + }); + + multilang_mark_empty_langs(container,target); +} + +/** + * Marquer dans le menu des langues, celles pour lesquelles + * au moins un champ multi du formulaire n'est pas renseigne + * + * @param container Le conteneur du formulaire + * + */ +function multilang_mark_empty_langs(container,target) { + var langs_empty = []; + var target_id = multilang_init_target_id(target); + + multilang_forms_fields[target_id].each(function(){ + var field_langs = []; + // Mise sous forme de tableau + if(typeof(this.field_lang) != 'undefined'){ + $.each(this.field_lang,function(name,value){ + if(value) + field_langs.push(name); + }); + } + // Trouver les elements non communs entre le tableau des langues availables et pour chaque champ, + // celui des langues renseignees, si ce champ est multi + // Si la langue d'origine n'est pas remplie (champ texte par exemple, on ne considère donc pas empty) + if(this.multi) { + // Comparaison des tableaux + $.each(multilang_avail_langs,function(i,name){ + if ((jQuery.inArray(name, field_langs) == -1) && (jQuery.inArray(name, langs_empty) == -1) && (jQuery.inArray(multilang_def_lang, field_langs) != -1)) + langs_empty.push(name); + }); + }else{ + // Comparaison des tableaux + $.each(multilang_avail_langs,function(i,name){ + if ((jQuery.inArray(name, field_langs) == -1) && (jQuery.inArray(name, langs_empty) == -1) && (jQuery.inArray(multilang_def_lang, field_langs) != -1)) + langs_empty.push(name); + }); + } + }); + + // On indique dans le menu de langue, celles qui ont au moins un champ non renseigne + if(container!='') { + $.each(multilang_avail_langs,function(i,name){ + if((jQuery.inArray(name, langs_empty) == -1)){ + var title = 'multilang_lang.title_lien_multi_'+name; + container.find('a[class~='+name+']').removeClass('empty').attr('title',eval(title)); + }else{ + var title = 'multilang_lang.title_lien_multi_sans_'+name; + container.find('a[class~='+name+']').addClass('empty').attr('title',eval(title)); + } + }); + } +} + +/** + * Action au changement de la langue + * Lorsque l'on clique sur une le menu de langue + * On affiche pour le champ "el" son contenu dans la langue "lang" + * + * @param el Un champ du formulaire (input ou textarea) + * @param lang La langue correspondante souhaitée + * @return + */ +function multilang_set_lang(el,lang) { + + if(!el.totreat) return; + + //if current lang is not setted use default lang value + if(el.field_lang[lang]==undefined) { + el.field_lang[lang] = el.field_lang[multilang_def_lang]; + } + + el.value = (el.field_lang[lang] == undefined ? "" : el.field_lang[lang]); + + el.titre_el.html(el.value); + + multilang_field_set_background(el,lang); +} + +/** + * Change la class multi_lang_* d'un champ pour indiquer la présence ou non de multis + * - multi_lang_(lang) si une langue particulière est disponible + * - multi_lang_no_multi si pas de multis pour le champ + * + * @param el + * @param lang + * @return + */ +function multilang_field_set_background(el,lang) { + if(lang != 'full'){ + if(el.totreat){ + $(el).removeAttr('readonly').removeClass('multilang_readonly'); + if(typeof($(el).attr('class')) != 'undefined'){ + $($(el).attr('class').split(' ')).each(function(){ + var m = this.match(/^multi_lang_*/); + if(m!=null) + $(el).removeClass(m.input).addClass('multi_lang_'+lang); + }); + } + $(el).addClass('multi_lang_'+(el.multi?lang:'no_multi')); + } + else{ + if(typeof($(el).attr('class')) != 'undefined'){ + $($(el).attr('class').split(' ')).each(function(){ + var m = this.match(/^multi_lang_*/); + if(m!=null) + $(el).removeClass(m.input); + }); + } + $(el).css({"background":"url("+multilang_dir_plugin+"/images/multi_forbidden.png) no-repeat right top"}); + } + }else{ + $(el).attr('readonly','readonly').addClass('multilang_readonly'); + if(typeof($(el).attr('class')) != 'undefined'){ + $($(el).attr('class').split(' ')).each(function(){ + var m = this.match(/^multi_lang_*/); + if(m!=null) + $(el).removeClass(m.input); + }); + } + } +} + +/** + * Garde en mémoire dans l'array de langues du champs la valeur de la langue + * sélectionnée + * + * @param el Le champ du formulaire concerné + * @param lang La langue actuelle + * @return + */ +function multilang_save_lang(el,lang) { + + if(!el.totreat) return ; + + // Suppression du numero uniquement pour les titres + if(multilang_is_title(el)) { + var m = el.value.match(/^(\d+\.\s+)((?:.|\n|\s)*)/); + if(m!=null) { + // Suppress point and spaces + el.field_pre_lang = m[1].replace(/\.|\s+/,''); + el.value = m[2]; + } + } + + //if the lang value is equal to the def lang do nothing + //else save value but if the field is not empty, delete lang value + if(el.field_lang[multilang_def_lang]!= el.value) { + if(!el.value) { + delete el.field_lang[lang]; + return; + } + el.multi = true; + el.field_lang[lang] = el.value; + }else{ + el.field_lang[lang] = el.field_lang[multilang_def_lang]; + $.each(el.field_lang,function(index, value){ + if((index != multilang_def_lang) && (value == el.field_lang[multilang_def_lang])){ + delete el.field_lang[index]; + } + }); + } +} + +//This func receives the form that is going to be submitted +function multilang_multi_submit(params) { + if(multilang_avail_langs.length<=1) return; + var form = $(this); + //remove the current form from the list of forms + multilang_forms.not(this); + //remove the current menu lang container from the list + multilang_containers.not("div.menu_multilang",$(this)); + //build the input values + multilang_multi_recover('','',form,'submit'); + //save back the params + if(params) $.extend(params,$(form).formToArray(false)); +} + +/** + * On attache nos évènements pour la validation du formulaire + * - sur le submit pour tous les formulaires + * - sur l'évènement 'form-pre-serialize' d'ajaxForms au cas où nous sommes dans + * un formulaire ajax + * + * @return + */ +function multilang_attach_submit() { + if($(this).parents('.ajax').size() && $(this).find('input[name=var_ajax]')){ + $(this).bind('form-pre-serialize',multilang_multi_submit); + }else if($(this).is('.formulaire_crayon')){ + cQuery(this).bind('form-pre-serialize',function(){multilang_multi_submit.apply(this);}); + }else{ + var oldsubmit = this.onsubmit; + this.onsubmit = ""; + if(oldsubmit && oldsubmit != ""){ + $(this).submit(function(){multilang_multi_submit.apply(this);return oldsubmit.apply(this);}); + } + else if(oldsubmit != "") + $(this).submit(multilang_multi_submit); + } +} + +(function($) { + $.extend($.fn, { + in_set: function(set) { + var elements = this.get(); + var result = $.grep(set,function(i){ + var found = false; + $.each(elements,function(){ + if(this==i) found=true; + }) + return found; + }); + return jQuery(result); + } + }); +})(jQuery); \ No newline at end of file diff --git a/www/plugins/multilang/javascript/multilang_init.js.html b/www/plugins/multilang/javascript/multilang_init.js.html new file mode 100644 index 0000000..cea63c8 --- /dev/null +++ b/www/plugins/multilang/javascript/multilang_init.js.html @@ -0,0 +1,3 @@ +#CACHE{7*24*3600} +#HTTP_HEADER{Content-Type: text/javascript; charset=#CHARSET} +[(#REM|generer_multilang_init)] \ No newline at end of file diff --git a/www/plugins/multilang/javascript/multilang_init.js_fonctions.php b/www/plugins/multilang/javascript/multilang_init.js_fonctions.php new file mode 100644 index 0000000..00e7d84 --- /dev/null +++ b/www/plugins/multilang/javascript/multilang_init.js_fonctions.php @@ -0,0 +1,92 @@ + 1){ + include_spip('inc/config'); + $config = lire_config('multilang',array()); + $root = '' ; + if(isset($config['multilang_public'])) + unset($config['multilang_public']); + if(isset($config['multilang_crayons'])) + unset($config['multilang_crayons']); + if(isset($config['siteconfig']) && $config['siteconfig']){ + $root .= 'div#configurer-accueil,div.formulaire_configurer_identite' ; // Config Site + unset($config['siteconfig']); + } + + foreach($config as $conf => $val){ + if($val == 'on') { + if($conf == 'document') + $root .= ',div#portfolio_portfolio,div#portfolio_documents,div#liste_documents,div.formulaire_editer_document' ; + else + $root .= ',div.formulaire_editer_'.$conf; + unset($config[$conf]); + } + } + // Appel de multilang_init_lang si + // - document.ready + // - onAjaxLoad (cas des docs et de la configuration du site) + if(is_array($langues_config = lire_config('multilang/langues_utilisees','aucune')) && count($langues_config) > 0){ + $langues = implode(',',array_intersect($langues,$langues_config)); + }else{ + $langues = implode(',',$langues); + } + $data = ' + var multilang_avail_langs = "'.$langues.'".split(\',\'), + multilang_def_lang = "'.$GLOBALS["meta"]["langue_site"].'", + multilang_lang_courante = "'.$GLOBALS["spip_lang"].'", + multilang_dir_plugin = "'._DIR_PLUGIN_MULTILANG.'"; + + // On trie les langues. Langue de l environnement en premier, + // puis langue principale du site puis les autres en ordre alphabetique + // Un utilisateur de langue anglaise souhaite logiquement traduire en anglais + multilang_avail_langs = jQuery.grep(multilang_avail_langs, function(value) { + return (value != multilang_def_lang && value != multilang_lang_courante); + }); + multilang_avail_langs.sort(); + multilang_avail_langs.unshift(multilang_lang_courante); + if(multilang_lang_courante!=multilang_def_lang) multilang_avail_langs.unshift(multilang_def_lang); + + jQuery(document).ready(function(){ + function multilang_init(){ + var root = "'.$root.'"; + var fields_selector = "textarea:not(textarea#adresses_secondaires,textarea#repetitions),input:text:not(input#new_login,input#email,#titreparent,input.date,input.heure,input#largeur,input#hauteur,.ac_input,#url_syndic,#url_auto,#champ_geocoder,#champ_lat,#champ_lon,#champ_zoom,#places,*.nomulti),.multilang"; + // on exclue aussi les form d upload (Pour les vignettes de docs, logos...) + var forms_selector = "form[class!=\'form_upload\'][class!=\'form_upload_icon\']"; + // Les div qui ont un formulaire de classe multilang (pour accélérer la recherche dans le DOM, + // on passe le form et le parent sera trouvé dans lors de l\'init) + var root_opt = "form:has(.multilang)"; + var fields_selector_opt = ".multilang"; + multilang_init_lang({fields:fields_selector,fields_opt:fields_selector_opt,root:root,root_opt:root_opt,forms:forms_selector}); + + if($(".menu_multilang").length > 0){ + $(".menu_multilang").each(function(){ + var menu_lang = $(this); + $(window).scroll(function() { + var offset = menu_lang.parents("form").offset(); + var limite_multilang = offset.top; + var limite_bas = limite_multilang+menu_lang.parents("form").height()-menu_lang.parents("form").find(".boutons").height(); + var pos_bas = menu_lang.offset().top+menu_lang.height(); + if(($(window).scrollTop() >= limite_multilang) && (pos_bas <= limite_bas) && ($(window).scrollTop() < limite_bas)){ + if(!menu_lang.hasClass("menu_lang_flottant")) + menu_lang.addClass("menu_lang_flottant"); + var menu_lang_width = menu_lang.width(); + menu_lang.css({"position": "fixed", "top": 0, "width": menu_lang_width+"px","z-index":"999"}); + } + if(($(window).scrollTop() < limite_multilang)||(pos_bas > limite_bas) ) + menu_lang.removeClass("menu_lang_flottant").css({"position": "static", "width": "auto"}); + }); + }); + } + } + multilang_init(); + if(typeof onAjaxLoad == "function") onAjaxLoad(multilang_init); + }); +'; + } + return $data; +} +?> \ No newline at end of file diff --git a/www/plugins/multilang/javascript/multilang_lang.js.html b/www/plugins/multilang/javascript/multilang_lang.js.html new file mode 100644 index 0000000..35dc5de --- /dev/null +++ b/www/plugins/multilang/javascript/multilang_lang.js.html @@ -0,0 +1,12 @@ +#CACHE{7*24*3600} +#HTTP_HEADER{Content-Type: text/javascript; charset=#CHARSET} +#SET{langues,#EVAL{$GLOBALS["meta"]["langues_multilingue"]}} +var multilang_lang = { + champs_readonly : '<:multilang:message_champs_readonly|filtrer_entites|texte_script:>', + lien_desactiver : '<:multilang:lien_desactiver|filtrer_entites|texte_script:>', + [(#SET{lang,[(#VALEUR|traduire_nom_langue)]})][ + title_lien_multi_(#VALEUR) : '<:multilang:lien_multi_title{lang=#GET{lang}}|filtrer_entites|texte_script:>',][ + title_lien_multi_sans_(#VALEUR) : '<:multilang:lien_multi_title_sans{lang=#GET{lang}}|filtrer_entites|texte_script:>', + ] + numero : '<:multilang:champ_numero|html2unicode|unicode2charset:>' +}; diff --git a/www/plugins/multilang/lang/multilang.xml b/www/plugins/multilang/lang/multilang.xml new file mode 100644 index 0000000..f54ac3e --- /dev/null +++ b/www/plugins/multilang/lang/multilang.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/www/plugins/multilang/lang/multilang_en.php b/www/plugins/multilang/lang/multilang_en.php new file mode 100644 index 0000000..45c174c --- /dev/null +++ b/www/plugins/multilang/lang/multilang_en.php @@ -0,0 +1,47 @@ + 'Activate Multilang on the edit page:', + 'cfg_boite_multilang' => 'Configuration of the Multilang plugin', + 'cfg_descr_multilang' => 'Multilang: plugin to manage multi tags', + 'cfg_effacer' => 'Re-init', + 'cfg_explication_crayons' => 'Requires multilang to be activated in the public space of the site.', + 'cfg_langues' => 'Used languages', + 'cfg_lbl_article' => 'of the articles', + 'cfg_lbl_auteur' => 'of the authors', + 'cfg_lbl_breve' => 'of the news items', + 'cfg_lbl_crayons' => 'Use multilang in the pencils', + 'cfg_lbl_document' => 'of the documents', + 'cfg_lbl_espace_public' => 'Use multilang in the public space', + 'cfg_lbl_evenement' => 'of the events', + 'cfg_lbl_formstables' => 'of forms&tables', + 'cfg_lbl_gis' => 'geolocated points', + 'cfg_lbl_motcle' => 'of the keywords', + 'cfg_lbl_rubrique' => 'of the sections', + 'cfg_lbl_site' => 'of the websites', + 'cfg_lbl_siteconfig' => 'of the website configuration', + 'cfg_titre_multilang' => 'Multilang', + 'champ_numero' => 'Number', + 'configuration_multilang' => 'Multilang', + + // E + 'explication_langues_utilisees' => 'Select the languages to use in the multilang menu. Select none to use them all.', + + // L + 'label_langues_utilisees' => 'Used languages by multilang', + 'lien_desactiver' => 'All', + 'lien_multi_title' => 'Edit multilingual fields in «@lang@»', + 'lien_multi_title_sans' => 'Version "@lang@" is incomplete. Click to edit.', + + // M + 'message_champs_readonly' => 'The multilingual fields are in read only mode, choose a language to edit them' +); + +?> diff --git a/www/plugins/multilang/lang/multilang_es.php b/www/plugins/multilang/lang/multilang_es.php new file mode 100644 index 0000000..016c7d4 --- /dev/null +++ b/www/plugins/multilang/lang/multilang_es.php @@ -0,0 +1,47 @@ + 'Activar Multilang en la página de edición:', + 'cfg_boite_multilang' => 'Configuración del plugin Multilang', + 'cfg_descr_multilang' => 'Multilang: Plugin de gestión de las etiquetas "multi"', + 'cfg_effacer' => 'Reiniciar', + 'cfg_explication_crayons' => 'Se requiere activar Multilang en el espacio público del sitio.', + 'cfg_langues' => 'Idiomas utilizados', + 'cfg_lbl_article' => 'artículos', + 'cfg_lbl_auteur' => 'autores', + 'cfg_lbl_breve' => 'breves', + 'cfg_lbl_crayons' => 'Utilizar Multilang en los lápices', + 'cfg_lbl_document' => 'documentos', + 'cfg_lbl_espace_public' => 'Utilizar Multilang en el espacio público del sitio', + 'cfg_lbl_evenement' => 'Eventos', + 'cfg_lbl_formstables' => 'forms&tables', + 'cfg_lbl_gis' => 'puntos geolocalizados', + 'cfg_lbl_motcle' => 'palabaras clave', + 'cfg_lbl_rubrique' => 'secciones', + 'cfg_lbl_site' => 'sitios', + 'cfg_lbl_siteconfig' => 'de la configuración del sitio', + 'cfg_titre_multilang' => 'Multilang', + 'champ_numero' => 'Número', + 'configuration_multilang' => 'Multilang', + + // E + 'explication_langues_utilisees' => 'Seleccione los idiomas a utilizar para el menú de Multilang. No seleccione ninguna para utilizarlas todas.', + + // L + 'label_langues_utilisees' => 'Idiomas utilizados por Multilang', + 'lien_desactiver' => 'Todo', + 'lien_multi_title' => 'Editar los campos multilingües en «@lang@»', + 'lien_multi_title_sans' => 'La versión «@lang@» está incompleta. Haga clic para editar.', + + // M + 'message_champs_readonly' => 'Los campos multilingües son sólo de lectura, elija un idioma para modificarlos' +); + +?> diff --git a/www/plugins/multilang/lang/multilang_fa.php b/www/plugins/multilang/lang/multilang_fa.php new file mode 100644 index 0000000..0ff0f62 --- /dev/null +++ b/www/plugins/multilang/lang/multilang_fa.php @@ -0,0 +1,48 @@ + 'فعال سازي چندزبانگي در صفحه‌ي ويراستاري', + 'cfg_boite_multilang' => 'پيكربندي پلاگين چندزبانگي ', + 'cfg_descr_multilang' => 'چندزبانگي: پلاگين مديريت چند برچسب چندتايي', + 'cfg_effacer' => 'بازنصب', + 'cfg_explication_crayons' => 'لزوم فعال سازي چندزبانگي در فضاي همگاني سايت.', + 'cfg_langues' => 'زبان‌هاي مورد استفاده ', + 'cfg_lbl_article' => 'مقاله‌ها', + 'cfg_lbl_auteur' => 'نويسندگان', + 'cfg_lbl_breve' => 'خبرها', + 'cfg_lbl_crayons' => 'استفاده از چندزبانگي در مدادها', + 'cfg_lbl_document' => 'سندها', + 'cfg_lbl_espace_public' => 'استفاده از چندزبانگي در فضاي همگاني سايت', + 'cfg_lbl_evenement' => 'برنامه‌ها', + 'cfg_lbl_formstables' => 'فرم‌ها/جدول‌ها', + 'cfg_lbl_gis' => 'نقاط محلي‌سازي شده (geolocated) ', + 'cfg_lbl_motcle' => 'كليدواژه‌ها', + 'cfg_lbl_rubrique' => 'بخش‌ها', + 'cfg_lbl_site' => 'سايت‌ها', + 'cfg_lbl_siteconfig' => 'از پيكربندي سايت', + 'cfg_titre_multilang' => 'چندزبانگي', + 'champ_numero' => 'شماره ', + 'configuration_multilang' => 'چندزبانگي', + + // E + 'explication_langues_utilisees' => 'زبان‌هاي مورد استفاده براي منيوي چندزبانگي را انتخاب كنيد. براي استفاده‌ از تمام آن‌ها هيچ چيز انتخاب نكنيد.', + + // L + 'label_langues_utilisees' => 'زبان‌هاي مورد استفاده توسط چندزبانگي ', + 'lien_desactiver' => 'همه', + 'lien_multi_title' => 'ويرايش ميدان‌هاي چندزبانگي در زبان «@lang@» ', + 'lien_multi_title_sans' => 'نسخه‌ي «@lang@»كامل نيست. براي ويرايش كردن آن كليك كنيد. ', + + // M + 'message_champs_readonly' => 'ميدان‌هاي چندزبانگي در حالت فقط خواندني هستند، يك زبان را براي ويرايش كردن آن‌ها انتخاب كنيد +' +); + +?> diff --git a/www/plugins/multilang/lang/multilang_fr.php b/www/plugins/multilang/lang/multilang_fr.php new file mode 100644 index 0000000..02ed7bd --- /dev/null +++ b/www/plugins/multilang/lang/multilang_fr.php @@ -0,0 +1,45 @@ + 'Activer Multilang sur la page d\'édition :', + 'cfg_boite_multilang' => 'Configuration du plugin Multilang', + 'cfg_descr_multilang' => 'Multilang : Plugin de gestion des tags multi', + 'cfg_effacer' => 'Re-initialiser', + 'cfg_explication_crayons' => 'Nécessite que multilang soit activé dans l\'espace public du site.', + 'cfg_langues' => 'Langues utilisées', + 'cfg_lbl_article' => 'des articles', + 'cfg_lbl_auteur' => 'des auteurs', + 'cfg_lbl_breve' => 'des breves', + 'cfg_lbl_crayons' => 'Utiliser multilang dans les crayons', + 'cfg_lbl_document' => 'des documents', + 'cfg_lbl_espace_public' => 'Utiliser multilang dans l\'espace public du site', + 'cfg_lbl_evenement' => 'des évènements', + 'cfg_lbl_formstables' => 'des forms&tables', + 'cfg_lbl_gis' => 'des points géolocalisés', + 'cfg_lbl_motcle' => 'des mots clés', + 'cfg_lbl_rubrique' => 'des rubriques', + 'cfg_lbl_site' => 'des sites', + 'cfg_lbl_siteconfig' => 'de la configuration du site', + 'cfg_titre_multilang' => 'Multilang', + 'champ_numero' => 'Numéro', + 'configuration_multilang' => 'Multilang', + + // E + 'explication_langues_utilisees' => 'Sélectionnez les langues à utiliser pour le menu de multilang. N\'en sélectionnez aucune pour toutes les utiliser.', + + // L + 'label_langues_utilisees' => 'Langues utilisées par multilang', + 'lien_desactiver' => 'Tout', + 'lien_multi_title' => 'Éditer les champs multilingues en «@lang@»', + 'lien_multi_title_sans' => 'La version «@lang@» est incomplète. Cliquez pour l\'éditer.', + + // M + 'message_champs_readonly' => 'Les champs multilingues sont en lecture seule, choisissez une langue pour les modifier' +); + +?> diff --git a/www/plugins/multilang/lang/multilang_sk.php b/www/plugins/multilang/lang/multilang_sk.php new file mode 100644 index 0000000..14fa8da --- /dev/null +++ b/www/plugins/multilang/lang/multilang_sk.php @@ -0,0 +1,47 @@ + 'AktivovaÅ¥ Multilang na upravovacej stránke:', + 'cfg_boite_multilang' => 'Nastavenia zásuvného modulu Multilang', + 'cfg_descr_multilang' => 'Multilang: zásuvný modul na správu multitagov', + 'cfg_effacer' => 'Znova spustiÅ¥', + 'cfg_explication_crayons' => 'Treba aktivovaÅ¥ multilang na používanie na verejne prístupnej stránke.', + 'cfg_langues' => 'Používané jazyky', + 'cfg_lbl_article' => 'článkov', + 'cfg_lbl_auteur' => 'autorov', + 'cfg_lbl_breve' => 'noviniek', + 'cfg_lbl_crayons' => 'PoužívaÅ¥ multilang v module crayons', + 'cfg_lbl_document' => 'súborov', + 'cfg_lbl_espace_public' => 'PoužívaÅ¥ multilang na verejne prístupnej stránke', + 'cfg_lbl_evenement' => 'udalostí', + 'cfg_lbl_formstables' => 'formulárov a tabuliek', + 'cfg_lbl_gis' => 'geolokalizovaných bodov', + 'cfg_lbl_motcle' => 'kľúčových slov', + 'cfg_lbl_rubrique' => 'rubrík', + 'cfg_lbl_site' => 'stránok', + 'cfg_lbl_siteconfig' => 'nastavení stránky', + 'cfg_titre_multilang' => 'Multilang', + 'champ_numero' => 'Číslo', + 'configuration_multilang' => 'Multilang', + + // E + 'explication_langues_utilisees' => 'Vyberte jazyky, ktoré sa budú používaÅ¥ v menu multilangu. Ak chcete používaÅ¥ vÅ¡etky, nevyberte žiaden.', + + // L + 'label_langues_utilisees' => 'Jazyky, ktoré bude multilang používaÅ¥', + 'lien_desactiver' => 'VÅ¡etky', + 'lien_multi_title' => 'UpraviÅ¥ viacjazyčné polia v jazyku "@lang@"', + 'lien_multi_title_sans' => 'Verzia v jazyku "@lang@" je neúplná. Kliknite, ak ju chcete upraviÅ¥.', + + // M + 'message_champs_readonly' => 'Viacjazyčné polia sú iba na čítanie, ak ich chcete upraviÅ¥, vyberte si jazyk' +); + +?> diff --git a/www/plugins/multilang/lang/paquet-multilang.xml b/www/plugins/multilang/lang/paquet-multilang.xml new file mode 100644 index 0000000..a5954f5 --- /dev/null +++ b/www/plugins/multilang/lang/paquet-multilang.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/www/plugins/multilang/lang/paquet-multilang_en.php b/www/plugins/multilang/lang/paquet-multilang_en.php new file mode 100644 index 0000000..b0b4075 --- /dev/null +++ b/www/plugins/multilang/lang/paquet-multilang_en.php @@ -0,0 +1,15 @@ + 'This plugin adds a language menu like [fr] [en] [it] at the top of each form, depending on the language selected in the site configuration.', + 'multilang_slogan' => 'Control the display of the contents of multi tags with a language menu' +); + +?> diff --git a/www/plugins/multilang/lang/paquet-multilang_es.php b/www/plugins/multilang/lang/paquet-multilang_es.php new file mode 100644 index 0000000..80b8115 --- /dev/null +++ b/www/plugins/multilang/lang/paquet-multilang_es.php @@ -0,0 +1,15 @@ + 'Este plugin añade un menú de idiomas del tipo [fr] [en] [it] encima de cada formulario, en función de los idiomas activados en la configuración del sitio.', + 'multilang_slogan' => 'Administrar la muestra del contenido de las etiquetas multi con un menu' +); + +?> diff --git a/www/plugins/multilang/lang/paquet-multilang_fr.php b/www/plugins/multilang/lang/paquet-multilang_fr.php new file mode 100644 index 0000000..7bc8904 --- /dev/null +++ b/www/plugins/multilang/lang/paquet-multilang_fr.php @@ -0,0 +1,13 @@ + 'Ce plugin rajoute un menu de langues du type [fr] [en] [it] au-dessus de chaque formulaire, en fonction des langues activées dans la configuration du site.', + 'multilang_slogan' => 'Gérer l\'affichage du contenu des tags multi par un menu' +); + +?> diff --git a/www/plugins/multilang/lang/paquet-multilang_it.php b/www/plugins/multilang/lang/paquet-multilang_it.php new file mode 100644 index 0000000..74d8d3d --- /dev/null +++ b/www/plugins/multilang/lang/paquet-multilang_it.php @@ -0,0 +1,15 @@ + 'Questo plugin aggiunge un menu di linguaggi di tipo [fr] [it] [it] nella parte superiore di ogni modulo, a seconda della lingua selezionata nella configurazione del sito.', + 'multilang_slogan' => 'Gérer l\'affichage du contenu des tags multi par un menu' # NEW +); + +?> diff --git a/www/plugins/multilang/lang/paquet-multilang_ru.php b/www/plugins/multilang/lang/paquet-multilang_ru.php new file mode 100644 index 0000000..5fcec10 --- /dev/null +++ b/www/plugins/multilang/lang/paquet-multilang_ru.php @@ -0,0 +1,15 @@ + 'Этот плагин добавляет языковое меню, в виде [RU] [EN] [IT] в верхней части каждой формы, в зависимости от языка, выбранного в настройках сайта.', + 'multilang_slogan' => 'Управляет отображением содержимого нескольких тегов языкового меню' +); + +?> diff --git a/www/plugins/multilang/lang/paquet-multilang_sk.php b/www/plugins/multilang/lang/paquet-multilang_sk.php new file mode 100644 index 0000000..5b3da3c --- /dev/null +++ b/www/plugins/multilang/lang/paquet-multilang_sk.php @@ -0,0 +1,15 @@ + 'Tento zásuvný modul pridá jazykové menu [fr] [en] [it] do hornej časti každého formulára podľa aktivovaných jazykov v konfigurácii stránky.', + 'multilang_slogan' => 'RiadiÅ¥ zobrazenie obsahu kombinovaných tagov podľa menu' +); + +?> diff --git a/www/plugins/multilang/multilang.css.html b/www/plugins/multilang/multilang.css.html new file mode 100644 index 0000000..818a87c --- /dev/null +++ b/www/plugins/multilang/multilang.css.html @@ -0,0 +1,56 @@ +#CACHE{3600*100,cache-client} +#HTTP_HEADER{Content-Type: text/css; charset=iso-8859-15} +#HTTP_HEADER{Vary: Accept-Encoding} + +.menu_multilang { + background-color:transparent; + padding:5px; +} + +.menu_multilang .langues{ + overflow:auto; +} + +.menu_multilang .langues a{ + cursor:pointer; + font-weight:normal; + margin-right:2px; +} + +.menu_multilang .langues a.on{ + font-weight:bold; +} + +.menu_multilang .langues a.empty{ + background-color:#000000; +} + +.menu_multilang .multilang_message{ + clear:both; +} + +.menu_lang_flottant{ + border-bottom:3px solid #000; + background-color:rgb(255,255,255); + background-color:rgba(255,255,255,.8); +} + +#SET{langues,#EVAL{$GLOBALS["meta"]["langues_multilingue"]}} + +.multi_lang_#VALEUR { + background-position:98% 1px; + background-repeat:no-repeat; + background-image:url([(#VAL{Multi #VALEUR}|image_typo{taille=11,couleur=cccccc}|extraire_attribut{src}|url_absolue)]); +} + +.multi_lang_no_multi { + background-position:98% 1px; + background-repeat:no-repeat; + background-image:url([(#VAL{No multi}|image_typo{taille=11,couleur=cccccc}|extraire_attribut{src}|url_absolue)]); +} + +.multi_lang_broken { + background-position:98% 1px; + background-repeat:no-repeat; + background-image:url(#CHEMIN{images/multi_forbidden.png}); +} \ No newline at end of file diff --git a/www/plugins/multilang/multilang.js.html b/www/plugins/multilang/multilang.js.html new file mode 100644 index 0000000..a62d439 --- /dev/null +++ b/www/plugins/multilang/multilang.js.html @@ -0,0 +1,6 @@ +#CACHE{7*24*3600} +#HTTP_HEADER{Content-Type: text/javascript; charset=#CHARSET} +[(#INCLURE{fond=javascript/multilang_init.js})] +[(#INCLURE{fond=javascript/multilang_lang.js,lang})] +[(#INCLURE{javascript/multilang.js})] +#FILTRE{trim} \ No newline at end of file diff --git a/www/plugins/multilang/multilang_administrations.php b/www/plugins/multilang/multilang_administrations.php new file mode 100644 index 0000000..7d4660f --- /dev/null +++ b/www/plugins/multilang/multilang_administrations.php @@ -0,0 +1,56 @@ + 'on', + 'article' => '', + 'breve' => '', + 'rubrique' => 'on', + 'auteur' => 'on', + 'document' => 'on', + 'motcle' => '', + 'site' => '', + 'evenement' => '' + ), $config); + ecrire_meta('multilang', serialize($config_defaut)); +} +/** + * Fonction de desinstallation + * On efface uniquement la méta d'installation + * + * @param float $nom_meta_base_version + */ +function multilang_vider_tables($nom_meta_base_version) { + effacer_meta('multilang'); + effacer_meta($nom_meta_base_version); +} + +?> \ No newline at end of file diff --git a/www/plugins/multilang/multilang_pipelines.php b/www/plugins/multilang/multilang_pipelines.php new file mode 100644 index 0000000..85058c8 --- /dev/null +++ b/www/plugins/multilang/multilang_pipelines.php @@ -0,0 +1,141 @@ +'; + } + } + return $flux; +} + +/** + * Insertion dans le pipeline insert_head_prive (SPIP) + * Ajoute css et javascript dans le privé + * + * @param string $flux + * Le contenu du head + * @return string $flux + * Le contenu du head modifié + */ +function multilang_insert_head_prive($flux){ + if(!function_exists('lire_config')) + include_spip('inc/config'); + $config = lire_config('multilang',array()); + + $flux .= multilang_inserer_head($config); + + return $flux; +} + +/** + * Insertion dans le pipeline insert_head (SPIP) + * si on a configuré multilang pour s'insérer dans l'espace public + * + * @param string $flux + * Le contenu du head + * @return string $flux + * Le contenu du head modifié + */ +function multilang_insert_head($flux){ + if(!function_exists('lire_config')) + include_spip('inc/config'); + $config = lire_config('multilang',array()); + + if($config['multilang_public'] == 'on'){ + $flux .= multilang_insert_head_css(''); // au cas ou il n'est pas implemente + $flux .= multilang_inserer_head($config); + } + return $flux; +} + +/** + * La fonction de modification du $flux pour l'insertion dans le head qu'il + * soit privé ou public + * + * @param array $config La configuration du plugin + * @return string $data Le contenu textuel qui sera inséré dans le head + */ +function multilang_inserer_head($config=array()){ + /** + * N'activer multilang que si plus d'une langue dans le site + */ + if(count($langues = explode(',',$GLOBALS["meta"]["langues_multilingue"])) > 1){ + $data = ' + +'; + } + return $data; +} + +/** + * Insertion dans le pipeline affichage_final (SPIP) + * + * Sur la page crayons.js, on insère également notre javascript pour être utilisable + * dans les crayons + * + * @param string $flux Le contenu de la page + * @return string $flux Le contenu de la page modifiée + */ +function multilang_affichage_final($flux){ + if(isset($_REQUEST['page']) && $_REQUEST['page'] == 'crayons.js'){ + if(!function_exists('lire_config')) + include_spip('inc/config'); + $config = lire_config('multilang',array()); + + /** + * On n'utilise multilang que si l'espace public est activé ainsi que les crayons + */ + if(($config['multilang_public'] == 'on') && ($config['multilang_crayons'] == 'on')){ + unset($config['multilang_public']); + unset($config['multilang_crayons']); + $root = '' ; + + if(isset($config['siteconfig']) && $config['siteconfig']){ + $root .= ',input[type=hidden][name*=name_][value|=meta-valeur]'; + unset($config['siteconfig']); + } + + foreach($config as $conf => $val){ + if($val == 'on') { // Articles + $root .= ',input[type=hidden][name*=name_][value|='.$conf.']:not(input[value|='.$conf.'-logo])'; + unset($config[$conf]); + } + } + $texte = ' + var crayons_multilang_init = function(){ + var crayons_root = ".formulaire_spip:has('.$root.')"; + var fields_selector = "textarea,input:text:not(input.date,input.heure,*.nomulti)"; + var forms_selector = "form[class!=\'form_upload\'][class!=\'form_upload_icon\']"; + var root_opt = "form:has(.multilang)"; + var fields_selector_opt = ".multilang"; + multilang_init_lang({fields:fields_selector,fields_opt:fields_selector_opt,root:crayons_root,root_opt:root_opt,forms:forms_selector,init_done:false}); + } + + cQuery(document).ready(function(){ + if(typeof onAjaxLoad == "function") onAjaxLoad(crayons_multilang_init); + crayons_multilang_init(); + });'; + $flux .= $texte; + } + } + return $flux; +} +?> \ No newline at end of file diff --git a/www/plugins/multilang/paquet.xml b/www/plugins/multilang/paquet.xml new file mode 100644 index 0000000..239700c --- /dev/null +++ b/www/plugins/multilang/paquet.xml @@ -0,0 +1,29 @@ + + + Multilang + + + Renato Formato + kent1 + Yffic + + GPL 3 + + + + + + + + + + diff --git a/www/plugins/multilang/prive/squelettes/contenu/configurer_multilang.html b/www/plugins/multilang/prive/squelettes/contenu/configurer_multilang.html new file mode 100644 index 0000000..48dde44 --- /dev/null +++ b/www/plugins/multilang/prive/squelettes/contenu/configurer_multilang.html @@ -0,0 +1,5 @@ +[(#AUTORISER{configurer,multilang}|sinon_interdire_acces)] +

    <:multilang:configuration_multilang:>

    +
    + #FORMULAIRE_CONFIGURER_MULTILANG +
    \ No newline at end of file diff --git a/www/plugins/multilang/prive/squelettes/contenu/configurer_multilangue.html b/www/plugins/multilang/prive/squelettes/contenu/configurer_multilangue.html new file mode 100644 index 0000000..e931019 --- /dev/null +++ b/www/plugins/multilang/prive/squelettes/contenu/configurer_multilangue.html @@ -0,0 +1 @@ + diff --git a/www/plugins/multilang/prive/style_prive_plugin_multilang.html b/www/plugins/multilang/prive/style_prive_plugin_multilang.html new file mode 100644 index 0000000..6fe1d00 --- /dev/null +++ b/www/plugins/multilang/prive/style_prive_plugin_multilang.html @@ -0,0 +1,66 @@ +#CACHE{0*100,cache-client} +#HTTP_HEADER{Content-Type: text/css; charset=iso-8859-15} +#HTTP_HEADER{Vary: Accept-Encoding} + +#SET{claire,##ENV{couleur_claire,edf3fe}} +#SET{foncee,##ENV{couleur_foncee,3874b0}} +#SET{left,#ENV{ltr}|choixsiegal{left,left,right}} +#SET{right,#ENV{ltr}|choixsiegal{left,right,left}} + +.menu_multilang { + background-color:transparent; + padding:5px; +} + +.menu_multilang .langues{ + overflow:auto; +} + +.menu_multilang .langues a{ + cursor:pointer; + font-weight:normal; + margin-right:2px; + display:block; + float:left; +} + +.menu_multilang .langues a.on{ + font-weight:bold; +} + +.menu_multilang .langues a.empty{ + background-color:#GET{foncee}; + padding:2px; + color:#fff; +} + +.menu_multilang .multilang_message{ + clear:both; +} + +.menu_lang_flottant{ + border-bottom:3px solid #GET{foncee}; + background-color:[#(#GET{claire}|couleur_eclaircir)]; + opacity:.8; +} + +#SET{langues,#EVAL{$GLOBALS["meta"]["langues_multilingue"]}} + +.multi_lang_#VALEUR { + background-position:98% 1px; + background-repeat:no-repeat; + background-image:url([(#VAL{Multi #VALEUR}|image_typo{taille=11,couleur=cccccc}|extraire_attribut{src}|url_absolue)]); +} + + +.multi_lang_no_multi { + background-position:98% 1px; + background-repeat:no-repeat; + background-image:url([(#VAL{No multi}|image_typo{taille=11,couleur=cccccc}|extraire_attribut{src}|url_absolue)]); +} + +.multi_lang_broken { + background-position:98% 1px; + background-repeat:no-repeat; + background-image:url(#CHEMIN{images/multi_forbidden.png}); +} \ No newline at end of file diff --git a/www/plugins/multilang/prive/themes/spip/images/multilang-16.png b/www/plugins/multilang/prive/themes/spip/images/multilang-16.png new file mode 100644 index 0000000000000000000000000000000000000000..955defc29aa53aec4e5822030206fa1156ab9866 GIT binary patch literal 1268 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl4m>B|mLR^7d3IP)%6EhPtCp#A( z7r%s{q@uX8wyd6svblq%le?Z*fN|JAH1HP+{y@O*-@kwT0-+y2et!S{^Xu2|pFe;5 z`0?wzcVFJT{rvLfr{~XKK70E1*^@WVp1ywe^wsmHAD=$`_~gm6Cr>^+dHfEDo<4a2 z6nXsk>EkDlA3S<=|KY)O)WAKufxwR=Kzck`ys3C5lCH@8pR);cM!wcfaS z-sYw$TNijKLQ+liNt1FA9RTPv| z6q%OK+Eg}iL22Qpq6xc-3fC4DZYZ2^D!;%iZ|1$cqU(8un{)df<(53oEqa(+csHl= zVNU7eoWjl7z1y>Tu4dKT%C6d#*}XTj^HOHr{)~>J87;>%n$Ki3TBP@6rD~L>swbrC z*d%vlBx%Pc7+A+Q*u_>l#1^~6W_!oQ`ou;C#s-AOdWOfjM8?@g#aTziSwzR0MaP=N z#2PJ$iCG#GwJJJ%L3Bb*r1FA@#1#>No#BeJ!%}91rmhX~pB9upF)(LCfLDJ&UXOp_ zCO`Ks-_mxU@_O&;BJYMK@5(B#ngXxJQm^`4&xReI&ix)r*>3fFTfH4Arh18Z6V3*`TMePfvNPuEI%%yS~5-pjZ;*2h0;FfRUMvlTTFE)FG{M=7u9z zpMCuETIz>BPzhU!YeY#%W=T#e!-{v8)PW-GAQ8vXl8pQ!hL!8icmRcXKte95#mPmP z1tppJc?`mwipoH7E|9o$enDkXW_m^m!y5iGRxkrxb#oIla~NtlW?uygv49kY2Kg{l zEWXUoz`)4k>Eak7aXI+`8)Im3xW9X-!DPk`QCszx6KiMPdApQL@Isf}R(t#P{~ta} z4qTPc*mSnH+-&Z@0;9Fxoo0#!9MIPPb>`Zu|NqTfZFid~PMYnw)kJfD*0o2)jg79) znUwur8C#^!|NJdxS4nZq^QieJo=twoGw-6Iq46OxA8)T&dpA@yJLxq4zIl4{x|X$f zHYh%Rdic+b+pIi#?f-J>>>hreV>$C;|Gzy|&yFrIEe;QT-17PRHnr9tzmCi`P7nAp zb86(C!q@xd-*zv*JKr*RYGZWirJw(|>(9CSzry|0y4lARrq8-xSEOoM`e@Bb&B=Ea z=3UOeZ~61q&6|_?%Zpd9GHR%mzdd*Ut-G>|xkMNkoC8Yhmj2DS01PJvPgg&ebxsLQ E0QFQ$rT_o{ literal 0 HcmV?d00001 diff --git a/www/plugins/multilang/prive/themes/spip/images/multilang-24.png b/www/plugins/multilang/prive/themes/spip/images/multilang-24.png new file mode 100644 index 0000000000000000000000000000000000000000..11e6ed4d1840c01876ff22221302a5da574bb531 GIT binary patch literal 1392 zcmXw%3pA8z7{@>9f=ZMWC++A^D`n73j3T!g27NBWxFli>2IDgqW;EKQo!Z?p``S+bbKdWL&hx(KIq&!X{qy}`kIg#9IuHbH zCVILDfPLrc($WOqsru0ouxYYfiGf;LT2JPE=OAcJzn@PaUaeNAZuQ^4Cmx)u^K*WU z7a{z|Cz5!zsAbi%ccSFWVYwH>8Agfj0xMrV zw2rB%6*%&ZKkIML0L7*7P_&0A&c+Mn!W4(t+nHPCMjVve{{WgEHInA6hy;H#*mLK= zKyF{*c`$_SLlzd?~`7;wBN!h)HVOP9E)R5l&Gs2?6s!P&ZYhe>qbd6xr%MX_Y$5cKV z5wdty?B0A1`z8wCW^n2nf2?4`my`mbNRcA-s}dB7a~hA=;D8lR5gsB+pJIBc=y_$C zqK4FxW5spN85q3i0X^rcG9?~3Z&_nm#F3v#8yilBF=atFSTy7~;FfCFGvx<;$9 z7E&+Dyo2rsv}Yn2zGv^*;23w_MZoe-_(mrNrj+A3Nrb9sPKtbOX8ym|35(>-9%Nu~YfmExS{jP=oML%4D z2lKR3JVRL!q&u*>G?YkP3}_m%@gZzCCN+vpLy}Q}G&&Ws#-MF*XdCO+`4TN~W7p~p z5)#YiL@}w5OAHcCMGf=79C9d0R!0_*;DEGqBXFcpcGrYR@--XPu+4i8dGC`;|m{+*|Ic_r&^sOqAv z_l=LdT@}qWj?BrXccN{D^uDc)rT^M-4oKgfW)C&~GwkLuF`=12HzgQ3WjG=-?BAD2EpS+N5>=2Z~Mn2(Xzs9vuj#U6EZkBTzdh@FeD;0qzF+p44Jz+$DvK%& zc<}Hc`9g82rUuRFvVGYdDMoA9WiYp6&iHdqttk|**Fto*K+UbuS8ZAgLH($!6GxKq Qm4Giq#KZ1QuBQb50Z-6%=Kufz literal 0 HcmV?d00001 diff --git a/www/plugins/multilang/svn.revision b/www/plugins/multilang/svn.revision new file mode 100644 index 0000000..42c256c --- /dev/null +++ b/www/plugins/multilang/svn.revision @@ -0,0 +1,10 @@ + + +Origine: file:///home/svn/repository/spip-zone/_plugins_/multilang/trunk +Revision: 72466 +Dernier commit: 2013-04-30 12:00:50 +0200 + +file:///home/svn/repository/spip-zone/_plugins_/multilang/trunk +72466 +2013-04-30 12:00:50 +0200 + \ No newline at end of file -- 2.20.1