Mòdul:llengua

De Viccionari
Salta a la navegació Salta a la cerca
Icona de documentació de mòdul Documentació del mòdul[mostra] [modifica] [refresca]

A continuació es mostra la documentació transclosa de la subpàgina /ús. [salta a la caixa de codi]


Aquest mòdul proporciona definicions d'una llengua a partir del seu codi. Treu els valors proporcionats pel MediaWiki, o valors per defecte, complementats amb la taula auxiliar Module:llengua/taula.

Funcions:

nom

Retorna el nom de la llengua a partir del seu <codi>. Sintaxi:

{{#invoke:llengua|nom|<codi>}}
del_nom

Retorna "del nom" o "de l'nom" segons les regles d'apostrofació en català. Sintaxi:

{{#invoke:llengua|del_nom|<codi>}}
al_nom

Retorna "al nom" o "a l'nom" segons les regles d'apostrofació en català. Sintaxi:

{{#invoke:llengua|al_nom|<codi>}}
script

Retorna el codi ISO 15924 del sistema d'escriptura, per defecte Latn. Sintaxi:

{{#invoke:llengua|script|<codi>}}
dir

Retorna la direcció del sistema d'escriptura corresponent al codi de llengua, segons la propietat dir en CSS: ltr (esquerra a dreta, per defecte) o rtl (dreta a esquerra). Sintaxi:

{{#invoke:llengua|dir|<codi>}}
wikimedia

Retorna el codi de llengua corresponent al subdomini de Wikimedia o "" (buit) si no existeix. Sintaxi:

{{#invoke:llengua|wikimedia|<codi>}}

En general es correspon amb el mateix <codi> ISO de llengua, amb algunes excepcions.

local llengua = {}

local taula = mw.loadData("Module:llengua/taula")

-- Cerca el nom de llengua definit a /taula o en la llibreria de MediaWiki
function llengua.nom(codi)
    if type(codi) == "table" then codi = codi.args[1] end -- des de plantilles via invoke o des de mòduls via require
    if codi == nil then
        return 'Cap codi'
    end
    local llenguaTaula = taula[codi]
    local nom = nil
    if llenguaTaula then
        nom = llenguaTaula.nom
    end
    if nom == nil then
        nom = mw.language.fetchLanguageName(codi, 'ca') -- ca = nom en català
    end
    if nom == nil or nom == "" then
        return codi
    end
    return nom
end

-- Retorna la direcció d'escriptura, ltr o rtl
function llengua.dir(codi)
    if type(codi) == "table" then codi = codi.args[1] end -- des de plantilles via invoke o des de mòduls via require
    if codi == nil then
        return 'Cap codi'
    end
	local scriptRtl = {["Arab"]=true, ["fa-Arab"]=true, ["ks-Arab"]=true, ["ota-Arab"]=true, 
		["ps-Arab"]=true, ["ug-Arab"]=true, ["ur-Arab"]=true, ["Avst"]=true, ["Hebr"]=true, 
		["Nkoo"]=true, ["Phli"]=true, ["Phnx"]=true, ["Syrc"]=true, ["Thaa"]=true}
    local alfabet = llengua.script(codi)
    if scriptRtl[alfabet] then
        return 'rtl'
    end
    local dir = mw.getLanguage(codi):getDir()
    if (dir ~= nil and dir ~= '') then
        return dir
    end
    return 'ltr'
end

-- Retorna el sistema d'escriptura, Latn per defecte
function llengua.script(codi)
    if type(codi) == "table" then codi = codi.args[1] end -- des de plantilles via invoke o des de mòduls via require
    if codi == nil then
        return 'Cap codi'
    end
    local llenguaTaula = taula[codi]
    local script = nil
    if llenguaTaula then
        script = llenguaTaula.script
    end
    if script ~= nil then
        return script
    end
    return 'Latn'
end

-- Retorna el subdomini Wikimedia o "" (buit) si no existeix
function llengua.wikimedia(codi)
    if type(codi) == "table" then codi = codi.args[1] end -- des de plantilles via invoke o des de mòduls via require
    if codi == nil then
        return 'Cap codi'
    end
    local llenguaTaula = taula[codi]
    local codiWM = nil
    if llenguaTaula then
        codiWM = llenguaTaula.wikimedia
    end
    if codiWM ~= nil then
        return codiWM
    elseif mw.language.isSupportedLanguage(codi) then
        return codi
    end
    return ''
end

-- Existeix el codi?
function llengua.existeix(codi)
    --if taula[codi] or mw.language.isSupportedLanguage(codi) then
    --    return true
    --end
    
    -- Comprovació alternativa, les llengües suportades pel Mediawiki són limitades
    if type(codi) == "table" then codi = codi.args[1] end -- des de plantilles via invoke o des de mòduls via require
    if llengua.nom(codi) == codi then
    	return false
    end
    return true
end

--[=[ 
Funció auxiliar per l’apostrofació de l’article masculí, retorna true o false
Limitacions, en general no necessàries per noms de llengua:
    els casos previstos de h consonant són limitats
    no analitza el cas l’s+consonant
    no preveu si hi ha caràcters de puntuació inicial (l’«apòstrof», l’[[enllaç]])
    no apostrofa davant números (l’1, l’11) ni sigles (l’FMI)
--]=]

local apostrofa = {
	["hakk"]=false, -- h consonant (hakka)
    ["hawa"]=false, -- h consonant (hawaià)
    ["hia"]=false, ["hie"]=false, ["hio"]=false, ["hui"]=false, -- vocal consonant
    ["uix"]=true, -- excepció per u vocal
    ["ha"]=true, ["he"]=true, ["hi"]=true, ["hí"]=true, ["ho"]=true, ["hu"]=true, ["hy"]=true, -- excepte anteriors
    ["ia"]=false, ["ià"]=false, ["ie"]=false, ["io"]=false, ["iu"]=false, -- i consonant
    ["ua"]=false, ["ue"]=false, ["ui"]=false, ["uí"]=false, ["uï"]=false, ["uo"]=false, -- u consonant
    ["ya"]=false, ["ye"]=false, ["yi"]=false, ["yo"]=false, ["yu"]=false, -- y consonant
    ["a"]=true, ["à"]=true, ["e"]=true, ["è"]=true, ["é"]=true,
    ["i"]=true, ["í"]=true, ["ï"]=true, ["y"]=true,
    ["o"]=true, ["ò"]=true, ["ó"]=true, ["u"]=true, ["ú"]=true, ["ü"]=true -- excepte anteriors
    }

local function sapostrofa(text)
    local elText = mw.ustring.lower(text)
    for i=4,1,-1 do
        lletres = mw.ustring.sub(elText, 1, i)
        apo = apostrofa[lletres]
        if apo ~= nil then
            return apo
        end
    end
    return false
end

-- Retorna "del nom" o "de l'nom"
function llengua.del_nom(frame)
	local nom = llengua.nom(frame)
	if nom == "preromà" then
		return "d'un preromà"
	end
	if sapostrofa(nom) then
		return "de l'" .. nom
	end
	return "del " .. nom
end

-- Retorna "al nom" o "a l'nom"
function llengua.al_nom(frame)
    local nom = llengua.nom(frame)
    if sapostrofa(nom) then
        return "a l'" .. nom
    end
    return "al " .. nom
end

-- Retorna "el nom" o "l'nom"
-- TODO: unificar funcions d'apostrofació en base a paràmetre de partícula
function llengua.el_nom(codi)
    local nom = llengua.nom(codi)
    if sapostrofa(nom) then
        return "l'" .. nom
    end
    return "el " .. nom
end

-- transcripció, si existeix el mòdul per la llengua amb la funció tr
function llengua.trans(lang, text)
	local trans
	if lang and text then
		local m_trans = taula[lang]
		if m_trans and m_trans.trans_module then
			trans = require("Module:" .. m_trans.trans_module).tr(text)
		end
	end
	return trans
end

return llengua