Modulo:Lingue
Versione del 17 apr 2022 alle 14:48 di wikipedia>Sakretsu (non tutti gli alias sono scritti in minuscolo, vedi segnalazione)
La documentazione per questo modulo può essere creata in Modulo:Lingue/man
Errore script: Errore Lua: errore interno - l'interprete è uscito con stato 1.
local language = {} local getArgs = require('Module:Arguments').getArgs -- 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:Lingue/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 local lingua = lg.codici[code] if lingua then return lingua[2] end return '' end -- ritorna vero se "code" corrisponde a una lingua, 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 -- Restituisce 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, restituisce il valore di default -- o stringa nulla se questo non è indicato e il codice richiesto. Se maiuscolo è vero il -- nome viene restituito con la prima lettera maiuscola. function language.get_nome(code, maiuscolo, default) local nome = default or '' if code ~= nil and code ~= '' then -- prova a cercare la lingua fra gli alias if lg.alias[code] then code = lg.alias[code] -- altrimenti converte il testo in minuscolo e prova sia a ricercare -- fra gli alias sia a estrarre la prima parte di codici come it-IT else code = mw.ustring.lower(code) code = lg.alias[code] or mw.ustring.gsub(code, '(%l+)%-.*', '%1') 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 parametro 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 lingua, codice_normalizzato, code_to_show local yet_processed = {} for _,code in ipairs(args) do lingua, codice_normalizzato = language.get_nome(code) codice_normalizzato = mw.ustring.upper(codice_normalizzato) if not yet_processed[ codice_normalizzato ] then if lingua ~= "" then lingue_list[#lingue_list+1] = '<abbr title="' .. lingua .. '">' ..codice_normalizzato .. "</abbr>" yet_processed[ codice_normalizzato ] = true else lingue_list[#lingue_list+1] = code if return_error then error_list[#error_list+1] = code end end end end local reply if #lingue_list > 0 then reply = '(<span style="font-weight:bolder; font-size:80%">' .. table.concat(lingue_list, ", ") .. "</span>)" else reply = '' end reply = reply if #error_list>0 then return reply, error_list else return reply end end -- ======================================================== -- Ritorna la stringa txt inserita in un tag <span> con indicato -- il codice lingua del testo (language_code) e il senso -- di lettura (sinistro o destro). -- Il parametro "corsivo" permette di indicare se il testo -- deve essere messo in corsivo, ha tre valori: -- -- d: consulta le tabelle di configurazione per la lingua -- -- s: forza corsivo attivo -- -- n: forza corsivo disattivo (è il valore di default) -- ======================================================== function language._lang_testo(args) local txt = args.txt or args[2] if not txt then return '' end local language_code = args.lang or args[1] local direction = "ltr" if language_code then language_code = mw.ustring.lower(language_code) language_code = lg.alias[language_code] or language_code local writing = lg.scrittura[language_code] if writing then direction = writing[1] if #writing > 1 then language_code = writing[2] end end end local set_italic = args.corsivo or "n" if set_italic ~= "n" then local italic = false if set_italic:lower() == 's' then italic = true elseif language_code and lg.codici[language_code] then italic = not lg.codici[language_code][3] else italic = true end if italic then if txt[1]=="'" then txt = "<nowiki />" .. txt end if txt[#txt] =="'" then txt = txt .. "<nowiwiki />" end txt = mw.ustring.format("''%s''", txt) end end local span = mw.html.create('span'):wikitext(txt):addClass(args.class) if lg.codici[language_code] then span :attr('dir', direction) :attr('lang', language_code) :attr('xml:lang', language_code) end return tostring(span) end -- ======================================================== -- Funzione di interfaccia per _lang_testo -- richiamabile nei template -- ======================================================== function language.lang_testo(frame) local args = getArgs(frame) return language._lang_testo(args) 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