Aller au contenu

Module:Utilisateur:SyntaxTerror/2

Une page de Wikipédia, l'encyclopédie libre.
Ceci est une version archivée de cette page, en date du 21 août 2013 à 14:21 et modifiée en dernier par SyntaxTerror (discuter | contributions) (+ verification si le code langue est bien celui d'un wiki (oldid invalide merde encore)). Elle peut contenir des erreurs, des inexactitudes ou des contenus vandalisés non présents dans la version actuelle.

 Documentation[voir] [modifier] [historique] [purger]
local TraductionReference= { }

-- Chargement du de la base de données des langues avec gestion d'erreur.
local dataLangue
local success, resultat = pcall (mw.loadData, 'Module:Utilisateur:SyntaxTerror/Data' )
if success then
    dataLangue = resultat
    
else
    -- Base de données à minima en cas de bug sur le Module:Langue/Data
    
    dataLangue = { en = { code = 'en', nom = anglais }, 
        de = { code = 'de', nom = 'allemand' }, 
        it = { code = 'it', nom = 'italien' }, 
        es = { code = 'es', nom = 'espagnol' }, }
    dataLangue.anglais = dataLangue.en
    dataLangue.allemand = dataLangue.de
    dataLangue.italien = dataLangue.it
    dataLangue.espagnol = dataLangue.es
end

-- fonction principale : traductionReference

function TraductionReference.traductionReference(frame)
    local args = frame:getParent().args
    
-- nettoyage et mise en minuscules de lang1 et lang2

    local lang1 = args[1] or args["lang"] or args["Lang"] or args["lang1"] or args["Lang1"] or '' 
    lang1 = mw.ustring.lower( mw.text.trim( lang1 ) )
    local lang2 = args[4] or args["lang2"] or args["Lang2"] or ''
    lang2 = mw.ustring.lower( mw.text.trim( lang2 ) )
        
-- teste si les codes de langues sont des codes de wikipédias existants

    local art2 = args[5] or args["art2"] or args["Art2"] or ''
    art2 = mw.text.trim( mw.uri.encode( art2 , "WIKI" ) )

local wikilist = { 'en' , 'nl' , 'de' , 'sv' , 'it' , 'es' , 'ru' , 'pl' , 'ja' , 'vi' , 'pt' , 'zh' , 'ceb' , 'war' , 'uk' , 'ca' , 'no' , 'fi' , 'fa' , 'cs' , 'ko' , 'hu' , 'ar' , 'ro' , 'ms' , 'sr' , 'tr' , 'id' , 'kk' , 'aa' , 'ab' , 'ace' , 'af' , 'ak' , 'als' , 'am' , 'an' , 'ang' , 'arc' , 'arz' , 'as' , 'ast' , 'av' , 'ay' , 'az' , 'ba' , 'bar' , 'bat-smg' , 'bcl' , 'be' , 'ne-x-old' , 'bg' , 'bh' , 'bi' , 'bjn' , 'bm' , 'bn' , 'bo' , 'bpy' , 'br' , 'bs' , 'bug' , 'bxr' , 'bck-zam' , 'cdo' , 'ce' , 'ch' , 'cho' , 'chr' , 'chy' , 'ckb' , 'co' , 'cr' , 'crh' , 'csb' , 'cu' , 'cv' , 'da' , 'diq' , 'dsb' , 'dv' , 'dz' , 'ee' , 'el' , 'eml' , 'eo' , 'et' , 'eu' , 'ext' , 'ff' , 'fiu-vro' , 'fj' , 'fo' , 'fr' , 'frp' , 'frr' , 'fur' , 'fy' , 'ga' , 'gag' , 'gan' , 'gd' , 'gl' , 'glk' , 'gn' , 'got' , 'gu' , 'gv' , 'ha' , 'hak' , 'haw' , 'he' , 'hi' , 'hif' , 'ho' , 'hr' , 'hsb' , 'ht' , 'hy' , 'hz' , 'ia' , 'ie' , 'ig' , 'ii' , 'ik' , 'ilo' , 'io' , 'is' , 'iu' , 'jbo' , 'jv' , 'ka' , 'kaa' , 'kab' , 'kbd' , 'kg' , 'ki' , 'kj' , 'kl' , 'km' , 'kn' , 'koi' , 'kr' , 'krc' , 'ks' , 'ksh' , 'ku' , 'kv' , 'kw' , 'ky' , 'la' , 'lad' , 'lb' , 'lbe' , 'lez' , 'lg' , 'li' , 'lij' , 'lmo' , 'ln' , 'lo' , 'lt' , 'ltg' , 'lv' , 'map-bms' , 'mdf' , 'mg' , 'mh' , 'mhr' , 'mi' , 'min' , 'mk' , 'ml' , 'mn' , 'mo' , 'mr' , 'mrj' , 'mt' , 'mus' , 'mwl' , 'my' , 'myv' , 'mzn' , 'na' , 'nah' , 'nap' , 'nds' , 'nds-nl' , 'ne' , 'new' , 'ng' , 'nn' , 'nov' , 'nrm' , 'nso' , 'nv' , 'ny' , 'oc' , 'om' , 'or' , 'os' , 'pa' , 'pag' , 'pam' , 'pap' , 'pcd' , 'pdc' , 'pfl' , 'pi' , 'pih' , 'pms' , 'pnb' , 'pnt' , 'ps' , 'qu' , 'rm' , 'rmy' , 'rn' , 'roa-rup' , 'roa-tara' , 'rue' , 'rw' , 'sa' , 'sah' , 'sc' , 'scn' , 'sco' , 'sd' , 'se' , 'sg' , 'sh' , 'si' , 'simple' , 'sk' , 'sl' , 'sm' , 'sn' , 'so' , 'sq' , 'srn' , 'ss' , 'st' , 'stq' , 'su' , 'sw' , 'szl' , ' ta' , 'te' , 'tet' , 'tg' , 'th' , 'ti' , 'tk' , 'tl' , 'tn' , 'to' , 'tpi' , 'ts' , 'tt' , 'tum' , 'tw' , 'ty' , 'tyv' , 'udm' , 'ug' , 'ur' , 'uz' , 've' , 'vec' , 'vep' , 'vls' , 'vo' , 'wa' , 'wo' , 'wuu' , 'xal' , 'xh' , 'xmf' , 'yi' , 'yo' , 'za' , 'zea' , 'zh-classical' , 'zh-min-nan' , 'zh-yue' , 'zu' }

    local langinvalide1 = '* <span style="color:red">Erreur dans {{Traduction/Référence}} : le code de langue ' .. lang1 .. ' ne correspond à aucun Wikipédia.</span>'
    local langinvalide2 = '* <span style="color:red">Erreur dans {{Traduction/Référence}} : le code de langue ' .. lang2 .. ' ne correspond à aucun Wikipédia.</span>'
 
    local x = 0
    repeat       -- teste toutes les clefs valides de la liste
        x = x+1
        if lang1 == wikilist [ x ] then
            langinvalide1 = ''
        end
        if lang2 == wikilist [ x ] or art2 == '' then
            langinvalide2 = ''
        end
    until wikilist [ x ] == nil
    if langinvalide1 ~='' or langinvalide2 ~= '' then
        return langinvalide1 .. '\n' .. langinvalide2
    end
        
-- 1re langue
 
-- mise de lang1 dans wiki1 dans la cas où il ne correspond pas au code de langue IETF correct

    local wiki1 = lang1
    
-- correction du code dans deux cas car il utilise celui d'une autre langue,
-- si le code est juste incorrect, il sera corrigé par les alias de Module:Langue/Data

    if lang1 == 'als' then
        lang1 = 'gws'
    end
    if lang1 == 'nrm' then
        lang1 = 'fra-nor'
    end

-- définition du nom de la langue et du code IETF correct

    local tabLangue1 = dataLangue[ lang1 ]
    local nom1
 
    if tabLangue1 then
        lang1 = tabLangue1.nom                              -- lang1 devient le nom de la langue
        code1 = tabLangue1.code                             -- code1 devient le code IETF correct pour la langue
        if type( tabLangue1.page ) == 'string' then
            nom1 = tabLangue1.page .. '|' .. tabLangue1.nom -- lang1 devient le nom de la langue lié à son article si celui-ci n'a pas le même nom
        else
            nom1 = tabLangue1.nom                           -- sinon, nom1 devient le nom de la langue
        end
    else
        return '<span style="color:red;"> Erreur dans {{Traduction/Référence}} : langue non reconnue : '
        .. lang1 .. ' </span>[[Catégorie:Page avec code de langue invalide]]'
    end    

-- catégorisation dans « Page avec un oldid invalide » (invisible) s'il n'y a pas d'oldid ou s'il n'est pas un nombre

    local id1 = args[3] or args["id1"] or args["Id1"] or args["oldid"] or args["Oldid"] or args["oldid1"] or args["Oldid1"] or ''
    id1 = mw.text.trim( id1 )
    local erreurid = ''
    if id1 == '' or tonumber( id1 ) ~= 'number' then
        id1 = '[[Catégorie:Page avec un oldid invalide|Reference]]'
        erreurid = '<span style="color:red;"> oldid invalide.</span>'
    end
    
-- paramètre "type" existe?
    
    local debut = '* '
    local fin = ''
    local typ = args["type"] or args["note"] or ''
    typ = mw.text.trim( typ )
    if typ ~= '' then
        debut = '<span style="padding-left: 1.2em;">'
        fin = '</span>'
    end
    
-- paramètre "projet" ou "projet1" rogné si existant, sinon = 'wikipedia'
    
    local projet1 = args["projet"] or args["Projet"] or args["projet1"] or args["Projet1"] or 'wikipedia'
    projet1 = mw.text.trim( projet1 )
    
-- création du texte à renvoyer

    local art1 = args[2] or args["art"] or args["Art"] or args["art1"] or args["Art1"] or ''
    art1 = mw.text.trim( art1 )
    
    local wikitext = debut .. '<span class="indicateur-langue">(<abbr class="abbr" title="Langue : '
    .. lang1 .. '">'
    .. code1 .. '</abbr>)</span> Cet article est issu partiellement ou en totalité de l’article de Wikipédia en [['
    .. nom1 .. ']] intitulé « <span class="plainlinks" lang="'
    .. code1 .. '">[http://'
    .. wiki1 .. '.'
    .. projet1 .. '.org/wiki/'
    .. mw.uri.encode( art1 , "WIKI" ) .. '?oldid='
    .. id1 .. ' '
    .. art1 .. ']</span> » <small>(<span class="plainlinks">[http://'
    .. wiki1 .. '.wikipedia.org/wiki/'
    .. mw.uri.encode( art1 , "WIKI" ) .. '?action=history voir la liste des auteurs]</span>)</small>'
    .. fin .. erreurid

-- <span class="plainlinks" lang="{{{1}}}">

-- 2e langue (si existante)    

    if art2 ~= '' then
         
-- message d'erreur si la langue n'est pas indiquée
 
        if lang2 == '' then
            return '<span style="color:red"> Erreur dans {{Traduction/Référence}} :'
            .. 'langue non précisée. </span> [[Catégorie:Page avec code de langue invalide]]' 
        end
 
-- mise de lang1 dans wiki1 dans la cas où il ne correspond pas au code de langue IETF correct

        local wiki2 = lang2
    
-- correction du code dans deux cas car il utilise celui d'une autre langue,
-- si le code est juste incorrect, il sera corrigé par les alias de Module:Langue/Data

        if lang2 == 'als' then
            lang2 = 'gws'
        end
        if lang2 == 'nrm' then
            lang2 = 'fra-nor'
        end

-- définition du nom de la langue et du code IETF correct

        local tabLangue2 = dataLangue[ lang2 ]
        local nom2
     
        if tabLangue2 then
            lang2 = tabLangue2.nom                              -- lang1 devient le nom de la langue
            code2 = tabLangue2.code                             -- code1 devient le code IETF correct pour la langue
            if type( tabLangue2.page ) == 'string' then
                nom2 = tabLangue2.page .. '|' .. tabLangue2.nom -- lang1 devient le nom de la langue lié à son article si celui-ci n'a pas le même nom
            else
                nom2 = tabLangue2.nom                           -- sinon, nom1 devient le nom de la langue
            end
        else
            return '<span style="color:red;"> Erreur dans {{Traduction/Référence}} : langue non reconnue : '
            .. lang2 .. ' </span>[[Catégorie:Page avec code de langue invalide]]'
        end    
            
        
-- catégorisation dans « Page avec un oldid invalide » (invisible) s'il n'y a pas d'oldid ou s'il n'est pas un nombre

        local id2 = args[6] or args["id2"] or args["Id2"] or args["oldid2"] or args["Oldid2"] or ''
            id2 = mw.text.trim( id2 )
        if id2 == '' or tonumber( id2 ) ~= 'number' then
            id2 = '[[Catégorie:Page avec un oldid invalide|Reference]]'
            erreurid = '<span style="color:red;"> oldid invalide.</span>'
        end
        
-- paramètre "projet2" rogné si existant, sinon = 'wikipedia'
    
        local projet2 = args["projet2"] or 'wikipedia'
        projet2 = mw.text.trim( projet2 )
        
-- création du texte à renvoyer (replacement du texte pour un seul article car la syntaxe est différente)   
        
        wikitext = debut .. '<span class="indicateur-langue">(<abbr class="abbr" title="Langue : '
        .. lang1 .. '">'
        .. code1 .. '</abbr>)/(<abbr class="abbr" title="Langue : '
        .. lang2 .. '">'
        .. code2 .. '</abbr>)</span> Cet article est issu partiellement ou en totalité des articles de Wikipédia intitulés en [['
        .. nom1 .. ']] « <span class="plainlinks" lang="'
        .. code1 .. '">[http://'
        .. wiki1 .. '.'
        .. projet1 .. '.org/wiki/'
        .. art1 .. '?oldid='
        .. id1 .. ' '
        .. mw.uri.decode( art1 , "WIKI" ) .. ']</span> » <small>(<span class="plainlinks">[http://'
        .. wiki1 .. '.wikipedia.org/wiki/'
        .. art1 .. '?action=history voir la liste des auteurs]</span>)</small> et en [['
        .. nom2 .. ']] « <span class="plainlinks" lang="'
        .. code2 .. '">[http://'
        .. wiki2 .. '.'
        .. projet2 .. '.org/wiki/'
        .. art2 .. '?oldid='
        .. id2 .. ' '
        .. mw.uri.decode( art2 , "WIKI" ) .. ']</span> » <small>(<span class="plainlinks">[http://'
        .. wiki2 .. '.wikipedia.org/wiki/'
        .. art2 .. '?action=history voir la liste des auteurs]</span>)</small>'
        .. fin .. erreurid
    end

-- renvoi du texte

    return wikitext
    
end
    
return TraductionReference