Module:traduction table

La documentation pour ce module peut être créée à Module:traduction table/Documentation

b = require('Module:bases')
lang = require('Module:langues')
wikt_lang = require('Module:langues/data_wikt')
tradmod = require('Module:traduction')

local p = {}

function p.lang_sort(lang1, lang2)
	nom1 = lang.get_nom(lang1) or lang1
	nom2 = lang.get_nom(lang2) or lang2
	return nom1 < nom2
end

function _index_table_par_valeur(tab)
    local index = {}
    for key, val in pairs(tab) do
        table.insert(index, key)
    end
    table.sort(index, p.lang_sort)
    return index
end

function _trad_format(texte, lang)
    if (texte == nil or texte == '' or lang == nil or lang == '') then return nil end
    
    -- D'abord on sépare les termes
    --local termes = mw.text.split(texte, " ?[,;] ")
    --local texte_final = table.concat(termes, ", ") -- , ou <br /> ?
    
    -- Pour chaque terme (=boucle quand on pourra utiliser split)
    local texte_final = ''
    if mw.ustring.find(texte, "%[%[") then
        -- On ne fait qu'adapter le lien préexistant, si c'est un lien simple
        if wikt_lang[lang] then
        	texte_final = mw.ustring.gsub(texte, "%[%[([^:#]+)%]%]", "[[%1#" ..lang .. "|%1]] <span class=\"trad-exposant\">[[:" .. lang .. ":%1|(" .. lang .. ")]]</span>")
        else
        	texte_final = mw.ustring.gsub(texte, "%[%[([^:#]+)%]%]", "[[%1#" ..lang .. "|%1]]")
        end
    end
    
    return texte_final
end

function _trad_table(frame)
    local trads = frame.args
    local article = mw.title.getCurrentTitle()
    
    -- D'abord on récupère la liste des langues correspondantes
    tab_langue = {}
    for code, trad in pairs(trads) do
        if (type(code)=="string") then
            local nom_langue = lang.get_nom(code)
            
            if nom_langue ~= nil and nom_langue ~= '' then
                tab_langue[code] = nom_langue
                
                if article.namespace == 0 then
                    tab_langue[code] =  tab_langue[code] .. b.fait_categorie_contenu('Traductions en ' .. nom_langue)
                end
            else
                tab_langue[code] = "''" .. code .. "*''" .. b.fait_categorie_contenu('Wiktionnaire:Langues sans code', code)
            end
        end
    end
    
    -- Ensuite on tri les codes langues dans l'ordre alphabétique des langues
    local ordre = _index_table_par_valeur(tab_langue)
    
    -- Enfin, on écrit chaque ligne de traduction dans cet ordre
    --local textet_final = {'{| class="wikitable sortable"\r\n! Langue !! Traductions'} -- Version tableau
    local textet_final = {}
    
    if (trads[1]) then
        table.insert(textet_final, frame:preprocess("{{trad-début|" .. trads[1] .. "}}"))
    end
    
    for i in ipairs(ordre) do
        code = ordre[i]
        local trad = _trad_format(trads[code], code) or 'Pas de traduction donnée ?'
        local langue = tab_langue[code] or "''"..code.."''"
        table.insert(textet_final, '* ' .. b.ucfirst(langue) .. ' : ' .. trad)
        --table.insert(textet_final, '|-\r\n| ' .. langue .. ' || ' .. trad) -- Version tableau
    end
    table.insert(textet_final, frame:preprocess('{{trad-fin}}'))
    --table.insert(textet_final, '|}') -- Version tableau
    
    return table.concat(textet_final, "\r\n")
end

function p.tableau_de_traductions(frame)
    return _trad_table(frame)
end

return p