Прејди на содржината

Модул:Translation

Од Викиречник

Документацијата за овој модул можете да ја создадете на Модул:Translation/док

-- Module:traduction
-- Imported from fr.wiktionary
-- 2016-10-29 -- V1 -- last modified by DenisWasRight
-- Extended version for mk.wiktionary

b = require('Модул:Bases')
lang = require('Модул:Languages')

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 _category_section(name_cat, key, writing)
    if isdebug then
        if key then
            return b.done_category(name_cat, nil, true) .. '(' .. key .. ')'
        else
            return b.done_category(name_cat, nil, true)
        end
    else
        return b.done_category_content(name_cat, key, writing)
    end
end

function _done_span_trans(text, code)
    if (text ~= nil and code ~= nil) then
        return '<span class="trans-' .. code .. '">' .. text .. '</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_parameters(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, _category_section('Wiktionnaire:Traductions T sans langue précisée'))
        return '[[ВР:Јазици|внесете јазик]]' .. table.concat(cats)
    end
    
    -- A-t-on une langue correspondant au code ?
    local language = lang.get_name(code)
    local texts = {}
    
    -- Oui : écrit le texte
    if (language ~= nil and language ~= '') then
        table.insert(texts, b.ucfirst(language))
        
        -- Catégories
        local newcattext = trier and 'Wiktionnaire:Traductions à trier en ' or 'Преводи '
        table.insert(cats, _category_section(newcattext .. '(' .. language ..')'))
    
    -- Langue sans code! Catégorisée pour la retrouver
    else
        table.insert(texts, '<i><font color="red">' .. code .. '</font></i>[[ВР:Јазици|*]]')
        
        table.insert(cats, _category_section('Страници со шаблони со грешен јазичен код/Translations', code))
    end
    
    text = _done_span_trans(table.concat(texts), code)
    
    return text .. table.concat(cats)
end

---------------------------------------------------------------------------------------------------------
-- Fonctions pour créer les éléments de trad_defaut
function _done_link_local(code_language, word, dif)
    local text_link
    if dif ~= nil and dif ~= '' then
        text_link = dif
    else
        text_link = word
    end
    
    local text_final =  '[[' .. word .. '#' .. code_language .. '|' .. '<span lang="' .. code_language .. '">' .. text_link .. '</span>' .. ']]'
    return text_final
-- Manque dif, et un <span lang="">, à faire par une fonction de base
end

function _done_asterisk(code_language, word, status)
    -- Dessine l'astérisque selon le statut de l'article dans le Wiktionnaire correspondant
    local asterisk = ''
    
    -- Destination du lien
    -- Corriger le lien pour les wikis spéciaux
    local code_language_wikt =  lang.get_link_Wikimedia(code_language) or code_language
    word = mw.ustring.gsub(word, "’", "'") -- apostrophe dactylographique
    local destination = ':' .. code_language_wikt .. ':' .. word
    
    -- Pas de statut, ou statut du Wiki inconnu ? Ne rien afficher
    if (status == '' or status == nil) then
        asterisk = ''
        destination = nil
        
    -- Pas de Wiki ?
    elseif (status == 'nowikt') then
        asterisk = '<span class="trans-nowikt">(*)</span>'
        destination = 'Wiktionnaire:Pas de wiktionnaire dans cette langue'
    elseif (status == 'exists') then
        asterisk = '<span class="trans-exists">(' .. code_language_wikt .. ')</span>'
    elseif (status == 'unknown') then
        asterisk = '<span class="trans-unknown">(' .. code_language_wikt .. ')</span>'
    elseif (status == 'absent') then
        asterisk = '<span class="trans-absent">('  .. code_language_wikt .. ')</span>'
    end
    
    local text_final = destination and '<span class="trans-exponent">[[' .. destination .. '|' ..  asterisk .. ']]</span>' or ''
    return text_final
end

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

function _done_transcrit(code_language, transc, code_lang_R)
    if (transc == nil or transc == '' or code_language == nil) then return nil end
    
    local lang = code_lang_R or code_language .. '-Latn'
    local text_final = '<span lang="' .. lang .. '">' .. transc .. '</span>'
    return text_final
end

-- Genre : seulement les genres définis (sinon on invoque n'importe quel modèle, voire un modèle inexistant)
function _done_gender(gender)
    if gender == nil or gender == '' then return nil end
	
    -- Liste des genres autorisés
    local listeg = {}
    listeg['m'] = 'м'
    listeg['f'] = 'ж'
    listeg['n'] = 'ср'
    listeg['c'] = 'општ'
    listeg['s'] = 'еднина'
    listeg['p'] = 'множина'
    listeg['d'] = 'дуален'
    listeg['mf'] = 'м и ж'
	
    if listeg[gender] then
        return "''" .. listeg[gender] .. "''"
    else
        table.insert(cats, _category_section("Страници со преводи со непостоечки род", gender))
        return ''
    end
end

-- Fonction pour écrire l'équivalent de trad/défaut
function p.trans_default(frame)
    -- Récupération des variables
    local args = frame.args
    local argsnum = b.trim_parameters(args) -- trim les paramètres numériques
    
    local code_language = 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 word = 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 status = args['status']                   -- Remplace "color", voir les statuts possibles dans _fait_asterisque
    local nocat = (args['nocat'] and true or false) -- Pas catégorisé (vraiment utile ?)
    local gender = argsnum[3]
    local error = argsnum[4]

    -- Vérification des paramètres
    if code_language == nil or code_language == '' then
        table.insert(cats, _category_section("Страници со шаблони со грешен јазичен код/Translations"))
        return '[[WT:Liste des langues|<span style="color:red;">грешен јазичен код</span>]] <span style="color:red;">(параметар 1)</span>'
    elseif lang.get_name(code_language) == nil then
        table.insert(cats, _category_section('Страници со шаблони со грешен јазичен код/Translations ', code))
    end
    
    -- Préparation du texte à afficher
    local link_local = ''
    local asterisk = ''
    
    -- Pas de mot par défaut : si absent, c'est une erreur
    if word == nil or word =='' then
        table.insert(cats, _category_section("Страници со шаблони со грешен јазичен код/Translations"))
        link_local = '<span style="color:red;">не е одреден превод (параметар 2)</span>'
    else
        link_local = _done_link_local(code_language, word, dif)
        asterisk = _done_asterisk(code_language, word, status)
    end
    
    local writing_traditional = tradi and _done_writing_traditional(code_language, tradi) or nil
    local transcrit = transc and _done_transcrit(code_language, transc, code_lang_R) or nil
    local text_gender = _done_gender(gender)
    
    -- Création du texte à afficher
    local texts_final = {link_local}
    if (asterisk) then table.insert(texts_final, ' ' .. asterisk) end
    if (writing_traditional) then table.insert(texts_final, ' (' .. writing_traditional .. ')') end
    if (transcrit) then table.insert(texts_final, ' (' .. transcrit .. ')') end
    if (text_gender) then table.insert(texts_final, ' ' .. text_gender) end
    if error ~= nil then table.insert(cats, _category_section("Страници со повеќе од еден преводи", error)) end
    return table.concat(texts_final)
end

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

return p