Amṣada:traduction

Seg Wikasegzawal
Ce module a pour but de fournir des fonctions pour écrire les modèles Tamudemt:modèle, et les différents Tamudemt:modèle, Tamudemt:modèle, Tamudemt:modèle, Tamudemt:modèle.
T(frame[ code_langue ])
Cette fonction s'utilise directement en invoke et renvoie le nom de la langue correspondant au code langue fourni si elle existe, plus des catégories (traductions en cette langue, code langue manquant ou traduction à trier avec un second paramètre 2="trier").
trad(frame)
utilisé dans les modèles de type Tamudemt:M en y précisant le paramètre statut="inconnu" (trad), "existe" (trad+), "absent" (trad-) ou "nowiki" (trad--). Voir la liste des paramètres pris en compte dans chacun des modèles.

info Documentation du Amṣada:traduction : v · d · m · h.

Catégorie:Modules Lua documentés


b = require('Module:bases')
lang = require('Module:langues')

local p = {}

local cats = {}
-- Activer pour voir les catégories générées
-- Seulement pour déboguer avec l’aperçu : désactiver en sauvegardant
local isdebug = false

function _categorie_section(nom_cat, clef, ecrit)
    if isdebug then
    	if clef then
        	return b.fait_categorie(nom_cat, nil, true) .. '(' .. clef .. ')'
        else
        	return b.fait_categorie(nom_cat, nil, true)
        end
    else
        return b.fait_categorie_contenu(nom_cat, clef, ecrit)
    end
end

function _fait_span_trad(texte, code)
    if (texte ~= nil and code ~= nil) then
        return '<span class="trad-' .. code .. '">' .. texte .. '</span>'
    else
        return ''
    end
end

-- Fonction pour écrire l’équivalent du modèle T
function p.T(frame)
    -- Récupération des variables nécessaires à la création du titre
    local args = frame:getParent().args
    args = b.trim_parametres(args)
    local code  = args[1]
    local trier = false
    if (args[2] == 'trier') then trier = true end
    local article = mw.title.getCurrentTitle()
    
    -- Pas de code de langue, indispensable
    if code == nil or code == '' then
    	table.insert(cats, _categorie_section('Wiktionnaire:Traductions T sans langue précisée'))
        return '[[WT:Liste des langues|Langue à préciser]]' .. table.concat(cats)
    end
    
    -- A-t-on une langue correspondant au code ?
    local langue = lang.get_nom(code)
    local textet = {}
    
    -- Oui : écrit le texte
    if (langue ~= nil and langue ~= '') then
        table.insert(textet, b.ucfirst(langue))
        
        -- Catégories
        local newcattext = trier and 'Wiktionnaire:Traductions à trier en ' or 'Anemeḵ s '
        table.insert(cats, _categorie_section(newcattext .. langue))
    
    -- Langue sans code ! Catégorisée pour la retrouver
    else
        table.insert(textet, '<i><span style="color:red;">' .. code .. '</span></i>[[WT:Liste des langues|*]]')
        
        table.insert(cats, _categorie_section('Wiktionnaire:Traductions T avec code langue non défini', code))
    end
    
    texte = _fait_span_trad(table.concat(textet), code)
    
    return texte .. table.concat(cats)
end

---------------------------------------------------------------------------------------------------------
-- Fonctions pour créer les éléments de trad_defaut
function _fait_lien_local(code_langue, mot, dif)
    local texte_lien
    if dif ~= nil and dif ~= '' then
        texte_lien = dif
    else
        texte_lien = mot
    end
    
    local texte_final =  '[[' .. mot .. '#' .. code_langue .. '|' .. '<span lang="' .. code_langue .. '" class="lang-' .. code_langue .. '">' .. texte_lien .. '</span>' .. ']]'
    return texte_final
    -- Manque dif, et un <span lang="XX" class="lang-XX">, à faire par une fonction de base
end

function _fait_asterisque(code_langue, mot, statut)
    -- Dessine l’astérisque selon le statut de l’article dans le Wiktionnaire correspondant
    local asterisque = ''
    
    -- Destination du lien
    -- Corriger le lien pour les wikis spéciaux
    local code_langue_wikt =  lang.get_lien_Wikimedia(code_langue) or code_langue
    mot = mw.ustring.gsub(mot, "’", "'") -- apostrophe dactylographique
    local destination = ':' .. code_langue_wikt .. ':' .. mot
    
    -- Pas de statut, ou statut du Wiki inconnu ? Ne rien afficher
    if (statut == '' or statut == nil) then
        asterisque = ''
        destination = nil
        
    -- Pas de Wiki ?
    elseif (statut == 'nowikt') then
        asterisque = '<span class="trad-nowikt">(*)</span>'
        destination = 'Wiktionnaire:Pas de wiktionnaire dans cette langue'
    elseif (statut == 'existe') then
        asterisque = '<span class="trad-existe">(' .. code_langue_wikt .. ')</span>'
    elseif (statut == 'inconnu') then
        asterisque = '<span class="trad-inconnu">(' .. code_langue_wikt .. ')</span>'
    elseif (statut == 'absent') then
        asterisque = '<span class="trad-absent">('  .. code_langue_wikt .. ')</span>'
    end
    
    local texte_final = destination and '<span class="trad-exposant">[[' .. destination .. '|' ..  asterisque .. ']]</span>' or ''
    return texte_final
end

function _fait_ecrit_traditionnel(code_langue, tradi)
    if (tradi == nil or tradi == '') then return nil end
    
    local destination = tradi .. '#' .. code_langue
    local affichage = ''
     -- le chinois traditionnel s’affiche mieux dans les navigateurs avec le code zh-Hant
    if code_langue == 'zh' then
        affichage = b.balise_langue(tradi, 'zh-Hant')
    else
        affichage = b.balise_langue(tradi, code_langue)
    end
    -- signaler l’écriture traditionnelle comme telle pour les gadgets
    affichage = '<span class="ecrit_tradi">' .. affichage .. '</span>'
    local texte_final = '[[' .. destination .. '|' .. affichage .. ']]'
    return texte_final
end

function _fait_transcrit(code_langue, transc, code_lang_R)
    if (transc == nil or transc == '' or code_langue == nil) then return nil end
    
    local lang = code_lang_R or code_langue .. '-Latn'
    local texte_final = '<span lang="' .. lang .. '" class="lang-' .. lang .. '">' .. transc .. '</span>'
    return texte_final
end

-- Genre : seulement les genres définis (sinon on invoque n’importe quel modèle, voire un modèle inexistant)
function _fait_genre(genre)
	if genre == nil or genre == '' then return nil end
	
	-- Liste des genres (et nombres) autorisés
	local listeg = {}
	listeg['m'] = 'masculin'
	listeg['f'] = 'féminin'
	listeg['n'] = 'neutre'
	listeg['c'] = 'commun'
	listeg['s'] = 'singulier'
	listeg['p'] = 'pluriel'
	listeg['d'] = 'duel'
	listeg['mf'] = 'masculin et féminin identiques'
	listeg['mp'] = 'masculin pluriel'
	listeg['fp'] = 'féminin pluriel'
    listeg['np'] = 'neutre pluriel'
	listeg['ma'] = 'masculin animé'
	listeg['mi'] = 'masculin inanimé'
	listeg['fa'] = 'féminin animé'
	listeg['fi'] = 'féminin inanimé'
	
	if listeg[genre] then
		return "''" .. listeg[genre] .. "''"
	else
		table.insert(cats, _categorie_section("Wiktionnaire:Traductions avec genre inexistant", genre))
		return ''
	end
end

-- Fonction pour écrire l’équivalent de trad/défaut
function p.trad_defaut(frame)
    -- Récupération des variables
    local args = frame.args
    local argsnum = b.trim_parametres(args) -- trim les paramètres numériques
    
    local code_langue = argsnum[1]                  -- Code langue
    local code_lang_s = args['lang-s']              -- Code langue plus précis (rare) PAS UTILISÉ ?
    local code_lang_R = args['lang-R'] or args['lang-tr']    -- Code langue du terme traditionnel (chinois et coréen)
    
    local mot = argsnum[2]                          -- Le terme traduit
    local dif = args['dif']                         -- Affichage alternatif du terme traduit (rare)
    local tradi = args['tradi']                     -- Terme traditionnel (chinois et coréen)
    local transc = args['R'] or args['tr']          -- Transcription du terme traduit
    
    local statut = args['statut']                   -- Remplace "color", voir les statuts possibles dans _fait_asterisque
    local nocat = (args['nocat'] and true or false) -- Pas catégorisé (vraiment utile ?)
    local genre = argsnum[3]
    local erreur = argsnum[4]

    -- Vérification des paramètres
    if code_langue == nil or code_langue == '' then
        table.insert(cats, _categorie_section("Wiktionnaire:Traductions sans langue précisée"))
        return '[[WT:Liste des langues|<span style="color:red;">Langue à préciser</span>]] <span style="color:red;">(paramètre 1)</span>'
    elseif lang.get_nom(code_langue) == nil then
        table.insert(cats, _categorie_section('Wiktionnaire:Traductions trad avec code langue non défini', code))
    end
    
    -- Préparation du texte à afficher
    local lien_local = ''
    local asterisque = ''
    
    -- Pas de mot par défaut : si absent, c’est une erreur
    if mot == nil or mot =='' then
        table.insert(cats, _categorie_section("Wiktionnaire:Traductions sans traduction précisée"))
        lien_local = '<span style="color:red;">pas de traduction précisée (paramètre 2)</span>'
    else
    	lien_local = _fait_lien_local(code_langue, mot, dif)
    	asterisque = _fait_asterisque(code_langue, mot, statut)
    end
    
    local ecrit_traditionnel = tradi and _fait_ecrit_traditionnel(code_langue, tradi) or nil
    local transcrit = transc and _fait_transcrit(code_langue, transc, code_lang_R) or nil
    local texte_genre = _fait_genre(genre)
    
    -- Création du texte à afficher
    local textet_final = {lien_local}
    if (asterisque) then table.insert(textet_final, ' ' .. asterisque) end
    if (ecrit_traditionnel) then table.insert(textet_final, ' (' .. ecrit_traditionnel .. ')') end
    if (transcrit) then table.insert(textet_final, ' (' .. transcrit .. ')') end
    if (texte_genre) then table.insert(textet_final, ' ' .. texte_genre) end
    if erreur ~= nil then table.insert(cats, _categorie_section("Wiktionnaire:Traductions avec paramètre en trop", erreur)) end
    return table.concat(textet_final)
end

-- Interface à utiliser dans les modèles trad, trad+, trad-, trad--
function p.trad(frame)
    -- Récupère les arguments du modèle
    local par_model = frame:getParent()
    
    -- Ajoute le statut
    par_model.args['statut'] = frame.args['statut']
    return p.trad_defaut(par_model) .. table.concat(cats)
end

return p