Modulo:Linguaggi
Quésto o l'é 'n mòdolo scrîto in Lua. E instruçioìn chi de sótta són contegnûe inta sotopàgina Modulo:Linguaggi/man (modìfica · stöia)
Sandbox: Modulo:Linguaggi/sandbox (modìfica · stöia) · Test: Modulo:Linguaggi/test (modìfica · stöia · ezegoi)
Mòdolo Lua pe inplementâ e fonçioîn di templates {{Nómmeléngoa}}, {{Léngoe}} e âtri a lô colegæ pe òfrî e mæxime fonçionalitæ de âtri mòdoli Lua sénsa dovéi dipénde da-o reciàmmo a-i templates.
Fonçioîn
Pe mòdoli Lua
Quésto mòdolo o rénde disponìbili çèrtidùn fonçioîn pe âtri mòdoli Lua; pe adêuviâ ste fonçioîn chi sèrve prìmma caregâ o mòdolo co l'instruçión:
local lg = require( "Modulo:Linguaggi" );
.
E fonçioîn saián disponìbili cómme lg.nómmefonçión
(lg l'è sôlo 'n nómme d'ezénpio, se puriéiva uzâ ascì local léngoe = require( "Modulo:Linguaggi" );
, inte quésto câxo e fonçioîn saián reciamæ cómme léngoa.nómmefonçión
).
exìste(code)
- restitoísce
true
se code o corispónde a 'na léngoa, sedóncafalse
. get_nome(code, maióscolo, default)
- restitoísce a cóbia de nómme da léngoa corispondénte a code e code normalizòu (prezénpio se code l'è "ingléize" o restitoísce (lingua ingléize, en)). Se maióscolo l'è vêo, a prìmma létia do nómme restitoîo a l'è maióscola. Se o no trœva 'na léngoa corispondénte a code, alôa o restitoísce o valô default se quésto o l'è definîo, âtriménti o restitoísce a strìnga vêua
''
e o valô de code pasòu pe prìmmo. get_voce(code)
- restitoísce o nómme da vôxe dedicâ a-a léngoa corispondénte a code. Se o mòdolo o no trœva a vôxe, alôa o restitoísce 'na strìnga vêua
''
. léngoe(lìsta_de_léngoe)
- restitoísce e léngoe corispondénti a lìsta_de_léngoe formæ cómme da template {{Léngoe}}. Se se dêve pasâ 'na strìnga ciufîto che 'na lìsta, bezéugna trasformâ quésta inte lìsta, prezénpio ciamando a fonçión inta strìnga tra paréntexi graffe:
lg.léngoe({strìnga})
.
Pe-i templates
O mòdolo o l'inclùdde ascì de fonçioîn pe inplementâ çèrtidùn templates, a-i quæ se rimanda pe-a scintàsci d'ûzo:
léngoe(frame)
- implementa o mòdolo {{Léngoe}} e lę u fa ascì da interfàccia pe âtri mòdoli Lua.
nómmeconplêto(frame)
- implementa le fonçionalitæ di {{Nómmeléngoa}}
nómme(frame)
- implementa e fonçionalitæ de {{Nómmeléngoa/nómme}}
vôxe(frame)
- implementa e fonçionalitæ de {{Nómmeléngoa/vôxe}}
In sciâ docomentaçión
tabélla
- ciamâta da 'na pàgina wiki co
{{#Invoke:Linguaggi|tabella}}
o restitoísce 'na tabélla di còdici, nómmi e colegaménti a-e pàgine di lengoàggi riconosciûi.
Nòtte tecniche
I dæti utilizæ sun pigiæ da-e dôe tabélle do mòdolo modulo:Linguaggi/Configurazione: a prìmma contegne i alias inpostæ pe ciaschedùnn-a léngoa e asocia a-i còdici riconosciûi pe 'na léngoa o seu còdice ISO 639-3. A segónda asocia a ciaschedùn còdice standard o nómme pe-a léngoa e a seu pàgina in sciâ lij.wiki (fonçionalitæ no ancón disponìbile).
Pe azónze 'n nêuvo alias pe 'na léngoa za riconosciûa da-o mòdolo bàsta inserî inta tabélla language_config.alias
'na rîga into formâto:
["alias"] = "còdice_standard"',
dónde alias l'è l'alias da inserî e codice_standard l'è o còdice standard za prezénte inta tabélla language_config.codici
.
Pe inserî 'na nêuva léngoa bàsta azónze a-a tabélla language_config.codici
'na rîga into formâto:
[ "còdice_standard"] = { "nómme_lengoa", "artìcolo" },
dónde còdice_standard l'è o còdice adêuviòu da-o progràmma, çernendu preferìbilménte o còdice ISO 639-1 (dôe létie) ò ISO 639-2 (træ létie), âtriménti adêuviâ 'n còdice a çèrnia, che no segge 'n còdice ISO 639-1 o ISO 639-2 dedicòu a 'n atra léngoa. nómme lengoa l'è o nómme da léngoa che saiâ vizoalizòu e artìcolo l'è invêce o nómme da pàgina de wikipedia dedicâ a quélla léngoa. Pe inserî còdici alternatîvi pe 'na léngoa véddi o paràgrafo precedénte.
Nòtta bén: i còdici e i alias de léngue dêvan êse inserîi con létie minóscole, âtriménti no saián riconosciûi.
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: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
local 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
-- 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
code = mw.ustring.lower(code)
if lg.alias[code] then code = lg.alias[code] end
-- toglie la seconda parte da codici del tipo it-IT
code = mw.ustring.gsub(code, '(%l+)%-.*', '%1')
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:Nómmeléngoa
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 linguaggio 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 il linguaggio
-- -- 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:Léngoe]]')
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