FANDOM


local language = {}
 
-- File di configurazione contenente due tabelle:
-- lg.alias: per normalizzare gli alias a un codice unico
-- lg.codici: che dato un codice restituisce un array contente
-- nome della lingua e collegamento all'articolo su it.wiki dedicato alla lingua
local lg = mw.loadData( 'Modulo:Linguaggi/Configurazione');
 
-- ritorna il nome della voce corrispondente a "code". Se "code" non corrisponde a nessuna
-- lingua inserita in tabella ritorna una stringa nulla
function language.get_voce(code)
    if code == nil then return '' end
    local code = mw.ustring.lower(code)
    if lg.alias[code] then code = lg.alias[code] end
    lingua = lg.codici[code]
    if lingua then
        return lingua[2]
    end
    return ''
end
 
-- ritorna vero se "code" corrisponde a un linguaggio, falso altrimenti
function language.esiste(code)
    if code == nil or code=='' then return false end
    if lg.alias[code] then code= lg.alias[code] end
    if lg.codici[code] then return true end
    return false
end
 
-- ritorna il nome standard della lingua corrispondente a "code"  e il codice normalizzato
--  a quella della tabella codici
-- Se "code" non corrisponde a nessuna lingua inserita in tabella ritorna la coppia valore di default
-- o stringa nulla se questo non è indicato e il codice richiesto. Se maiuscolo è vero il
-- nome viene ritornato con la prima lettera maiuscola
function language.get_nome(code, maiuscolo, default)
    local nome = default or ''
    if code ~= nil and code ~= '' then
        code = mw.ustring.lower(code)
        if lg.alias[code] then code = lg.alias[code] end
        local lingua = lg.codici[code]
        if lingua then nome = lingua[1] end
    end
    if maiuscolo then
        nome = mw.ustring.gsub(nome, '^%l', mw.ustring.upper)
    end
    return nome, code
end
 
-- funzione di interfaccia per template:Nomelingua/voce
function language.voce(frame)
    local code = frame.args[1]
    if code == nil or code == '' then
        return ''
    end
    return language.get_voce(code)
end
 
-- funzione di interfaccia per template:Nomelingua/nome
function language.nome(frame)
    local maiuscolo = false
    local code = frame.args[1] or ''
    local default = (frame.args[2] == 'v' and '') or code
    if frame.args['M']~=nil and frame.args['M']~='' then
        maiuscolo = true
    end
    return language.get_nome(code, maiuscolo, default), _
 
end
 
--funzione di interfaccia per template:Nomelingua
function language.nomecompleto(frame)
    local code = frame.args[1]
    if code == nil or code == '' then
        return ''
    end
    local maiuscolo = false
    if frame.args['M']~=nil and frame.args['M']~='' then
        maiuscolo = true
    end
    local voce = language.get_voce(code)
    local nome = language.get_nome(code, maiuscolo, code)
    if nome == "" and voce ~="" then
        if maiuscolo then
            nome = mw.ustring.gsub(voce, '^%l', mw.ustring.upper)
        else
            nome = voce
        end
    end
    if voce == "" then
        return nome
    else
        return table.concat({'[[', voce, "|", nome, "]]"})
    end
end
 
--funzione di interfaccia per template:Lingue, se viene passato anche il parametro
--usa_codice (qualunque sia il suo valore), allora il testo mostrato tra parentesi
--viene normalizzato a quello standard della lingua, piuttosto che essere quello
--passato
--In aggiunta può ricevere se il paremtro return_error è vero ritorna in caso di
--codici lingua non ritrovati in tabella una tabella aggiuntiva con i codici errati
--return_error viene controllato solo se la funzione è richiamata da un modulo Lua
--se è richiamata da un template è sempre falsa
function language.lingue(frame)
    local lingue_list = { }
    -- Se chiamata mediante  #invoke, usa gli argomenti passati al template invocante.
    -- Altrimenti a scopo di test assume che gli argomenti siano passati direttamente
    local args
    local return_error = false
    local error_list = {}
    if frame == mw.getCurrentFrame() then
        args = frame:getParent().args
    else
        args = frame
        return_error = args['return_error'] or False
    end
    local usa_codice = false
    local lingua, codice_normalizzato, code_to_show
    local usa_codice = (args['usacodice'] ~= nil)
 
 
    for _,code in ipairs(args) do
        lingua, codice_normalizzato = language.get_nome(code)
        code_to_show = mw.ustring.upper((usa_codice and codice_normalizzato) or code)
        if lingua ~= "" then
            lingue_list[#lingue_list+1] = '<abbr title="' .. lingua .. '">' ..code_to_show .. "</abbr>"
        else
            lingue_list[#lingue_list+1] = code
            if return_error then error_list[#error_list+1] = code end
        end
    end
    local reply
    if #lingue_list > 0 then
        reply = '(<span style="font-weight:bolder; font-size:80%">' .. table.concat(lingue_list, ",&nbsp;") .. "</span>)"
    else
        reply = ''
    end
    reply = reply
    if #error_list>0 then
        return reply, error_list
    else
        return reply
    end
end
 
-- Restituisce una tabella con tutti i codici riconosciuti dal modulo
function language.tabella(frame)
 
    -- genera una tabella codici -> lista alias e una di codici per ordinarla
    local alias_table = {}
    local codici_sorted = {}
    for code, _ in pairs(lg.codici) do
        alias_table[code] = {"'''" .. code .. "'''"}
        codici_sorted[#codici_sorted+1] = code
    end
    for alias, code in pairs(lg.alias) do
        if alias_table[code] then table.insert(alias_table[code], alias) end
    end
    table.sort(codici_sorted)
 
    local root = mw.html.create('table')
    root
        :addClass('wikitable sortable')
        :tag('tr')
            :tag('th'):wikitext('Codici'):done()
            :tag('th'):wikitext('[[template:Nomelingua/nome]]'):done()
            :tag('th'):wikitext('[[template:Nomelingua/voce]]'):done()
            :tag('th'):wikitext('[[template:Lingue]]')
 
    for _,code in ipairs(codici_sorted) do
        local code_string = table.concat(alias_table[code], ", ")
        local nome, voce = language.get_nome(code), language.get_voce(code)
        if voce ~= '' then voce = '[[' .. voce .. ']]' end
        root
            :tag('tr')
                :tag('td'):wikitext(code_string):done()
                :tag('td'):wikitext(nome):done()
                :tag('td'):wikitext(voce):done()
                :tag('td'):css('text-align', 'center'):wikitext(language.lingue({code}))
    end
    return tostring(root)
end
 
-- Restituisce una tabella degli alias in formato alias;codice
function language.tabella_alias(frame)
 
    local root = mw.html.create('table')
    root
        :addClass('wikitable sortable')
        :tag('tr')
            :tag('th'):wikitext('Alias'):done()
            :tag('th'):wikitext('codice'):done()
    for alias, code in pairs(lg.alias) do
        root
            :tag('tr')
                :tag('td'):wikitext(alias):done()
                :tag('td'):wikitext(code)
    end
    return tostring(root)
end
 
-- Restituisce una tabella dei codici in formato codice;nome;voce
function language.tabella_codici(frame)
 
    local root = mw.html.create('table')
    root
        :addClass('wikitable sortable')
        :tag('tr')
            :tag('th'):wikitext('Codice'):done()
            :tag('th'):wikitext('Nome'):done()
            :tag('th'):wikitext('Voce'):done()
    for code, valore in pairs(lg.codici) do
        root
            :tag('tr')
                :tag('td'):wikitext(code):done()
                :tag('td'):wikitext(valore[1]):done()
                :tag('td'):wikitext(valore[2])
    end
    return tostring(root)
end
 
-- ritorna una whitelist di tutti i codici riconosciuti ad uso bot in python
function language.whitelist(frame)
    local rows = { 'WHITELIST_LINGUE = set( [' }
    -- genera una tabella codici -> lista alias e una di codici per ordinarla
    local codici = {}
    for code, _ in pairs(lg.codici) do
        codici[#codici+1] = code
    end
    for alias, _ in pairs(lg.alias) do
        codici[#alias+1] = alias
    end
    table.sort(codici)
    for _, codice in ipairs(codici) do
        rows[#rows+1] = "    '" .. codice .."',"
    end
    rows[#rows+1] = "])"
    return table.concat(rows, '\n')
end
 
return language

Ad blocker interference detected!


Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.

Inoltre su FANDOM

Wiki casuale