Ajuda:Infotaules multilingües sols-lua

De la Viquipèdia, l'enciclopèdia lliure
Multilanguage infoboxes only-lua

Les plantilles multilingües que utilitzen el mode sols-lua, consten de 4 pàgines: 1 plantilla que crida a un dels 3 mòduls i un d'aquests crida al mòdul infobox.

Tipus d'etiqueta-paràmetre[modifica]

Tipus Funció
a Per l'argument (o paràmetre)
l o L Per etiqueta (o label en anglès, sense posar o posant el primer caràcter del text de l'etiqueta en majúscules).
al Si s'assigna un argument i una etiqueta alhora. És la forma més habitual.
cl Igual a al, però mostrarà l’etiqueta com a encapçalament i el text en mode col·lapsat.
a- Igual a a, però la infotaula el mostrarà (el text ocuparà tota l'amplada de la infotaula).

Creació de paràmetres i etiquetes no-estàndard a i18n[modifica]

Els paràmetres estàndard i etiquetes són els subministrats amb el paquet de la infotaula. Ocasionalment es pot voler:

  • Afegir nous paràmetres-etiquetes.
  • Canviar l'ordre dels paràmetres-etiquetes.
  • Eliminar paràmetres-etiquetes.
  • Que varis paràmetres, que no estan en el paquet subministrat, passin el seu contingut a un paràmetre estàndard.

Definició de les claus pels paràmetres i etiquetes no-estàndard[modifica]

Per defecte:

local k = {
    -- explicacions en anglès...
}

Si es volen utilitzar dues variables, s'ha d'escollir un nom per la clau (tenint en compte les seves característiques) o key en anglès.

Per exemple per a local_1 i local_2:

local k = {
    -- explicacions en anglès...
    local_1 = "local_1",
    local_2 = "local_2",
}

Observeu que el nom de la clau i el seu valor com a cadena són iguals. Això no té a veure amb el nom en que l'editor de l'article l'utilitzarà, i que s'explica més avall.

Aquesta repetició és una exigència del llenguatge lua i assegura un correcte ús posterior.

Definició de paràmetres no-estàndard[modifica]

Cal assignar-ho a la taula p.new_items, que per defecte és:

p.new_items = {
    [MLMT.k.Args] = {
        -- explicacions en anglès...
    },	
    [MLMT.k.Labels] = {
        -- explicacions en anglès...
    },
}

Pels paràmetres ("Args")[modifica]

Cada element consta de:

[clau] = {"nom/s_parametre/s_manual/s", "crida a WD"},

On:

  • "nom/s_parametre/s_manual/s" pot ser "nom" o {"nom_1","nom2"}
  • "crida a WD", pot ser:
    • senzilla, per ex. "_P123456789"
    • complexa, per ex. {property="P123456789", formatting='[http:/web/$1 $1]", ...}
S'admet més d'una crida a WD.

Es pot ometre el primer o el segon sub-element. Ometre un sub-element vol dir deixar-lo entre "".

Per les etiquetes ("Labels")[modifica]

Cada element consta de:

[clau] = "etiqueta",

"etiqueta" ha de ser:

  • un text o
  • una crida a WD, per exemple "_P123456789"

Exemple[modifica]

Per establir dos paràmetres (característiques de l'argument i etiqueta), i que tinguin de clau local_1 i local_2.

p.new_items = {
    [MLMT.k.Args] = {
        [k.local_1] = {"local_1", ""},
        [k.local_2] = {"local_2", ""},
    },	
    [MLMT.k.Labels] = {
        [k.local_1] = "Local 1",
        [k.local_2] = "Local 2",
    },
}

Si es vulgués que els segon nou paràmetre podés ser cridat amb dos noms diferents, llavors:

p.new_items = {
    [MLMT.k.Args] = {
        [k.local_1] = {"local_1", ""},
        [k.local_2] = {{"local_2","numero"}, ""},
    ...
}

Si es vulgués que el primer paràmetre prengués el valor de WD en cas de no haver estat entrat manualment, llavors, per un suposada propietat Editorial (P123):

p.new_items = {
    [MLMT.k.Args] = {
        [k.local_1] = {"local_1", "_P123"},
    ...
}

Si local_2 hagués de ser un número enter i positiu, cal afegir a p.arg_lims la clau i el tipus dels paràmetres:

p.arg_lims = {
    -- explicacions en anglès...
    {k.local_2, "i+"},
}

Ordre d'aparició dels paràmetres[modifica]

És per:

  • Modificar l'ordre en que es mostren a la infotaula.
  • Afegir al lloc requerit els paràmetres no-estàndard.

Per a fer-ho cal:

  1. Obrir "Principal/items" i copiar-ne tota la taula p.idx
  2. Copiar-ne el seu contingut a "Principal/i18n" que és el mòdul que es modificarà.
  3. Caldrà canviar la denominació de les variables d'aquesta taula de nom "p.k..." per "Abrev.k...", Abrev per definida a l'inici d'aquest mòdul i que seguint l'exemple seria IPi.
  4. Finalment:
  • Modificar l'ordre dels elements d'aquesta taula segons convingui i/o
  • Col·locar el nou o nous elements a on sigui requerit. Cal seguir l'estructura establerta per als altres elements.

Gestió de les variables[modifica]

Ocasionalment pot ser necessari modificar els valors entrats manualment o recuperats automàticament de WD.

Al final del i18n hi ha la funció:

function p.local_func (frame, args)
    vals = {}
    -- explicacions en anglès...
    return vals
end

Que retorna cap (opció per defecte) o vàries assignacions a paràmetres.

Els paràmetres de la funció que s'hi passen són:

  • frame: de vegades és necessari per a una funció (expandTemplate, a veure més avall).
  • args: és una funció que retorna el valor d'un paràmetre o una cadena buida.
  • vals: és una taula que no contindrà cap element a diversos elements. On cada element conté el nom del paràmetre estàndard de destinació i les instruccions que li envien un valor.

Cada resultat s'associarà un paràmetre on es vol que es mostri el resultat:

  • Així si result_for_this_param conté el valor d'un element, gràcies a unes operacions que s'expliquen en la següent subsecció.
  • Amb table.insert (vals, {target_param_name, result_for_this_param}) s'anotarà a la taula vals l'element. Cal definir a quin paràmetre estàndard (target_param_name) es vol enviar el resultat de l'operació que s'ha efectuat amb els paràmetres (habitualment) no-estàndard.

Operacions amb les variables[modifica]

El que segueix precedit per una línia result_for_this_param=, per tal d'emmagatzemar el valor en aquesta variable.

Saben programar mínimament amb lua:

  • per exemple. per a dues línies: args(k.param_1)..'</br>'..args(k.param_2)


O una crida a un mòdul: require("Module:Module_name_to_call").called_function (parameter_list)

On:

  • parameter_list és la llista dels paràmetres separats per comes entre {}:
per exemple: {separator='<br>', args(k.param_1), args(k.param_2)}


Amb una plantilla, si no sabeu com programar en lua o una plantilla és una millor solució:

frame:expandTemplate { -- ← clau inicial
    title = "template_name", 
    args = {the_args}
} -- ← clau final

On:

  • template_name és el nom de la plantilla a utilitzar; s'ha d'escriure entre "".
  • the_args són els paràmetres a passar a la plantilla a utilitzar.
per exemple: {args(k.param_1), args(k.param_2)}, on k.param_1 i k.param_2 són les claus dels dos paràmetres no-estàndard.
També podeu llegir: callParserFunction and expandTemplate per a més detalls i exemples de com escriure els paràmetres a passar.

Establir la posició dels paràmetres no-estàndard[modifica]

Ens nous paràmetres creats es posicionaran en les llistes que generen les infotaules (d'arguments i etiquetes, o sols d'arguments) i en el codi pel TemplateData.

Alternativament es pot dir on es volen posar, per això hi ha la taula p.new_pos. Aquesta taula consta d'una llista d'elements en que cada element consta de dos claus:

  • La clau del paràmetre no-estàndard.
  • La clau del paràmetre anterior al no-estàndard. Si hi ha varis paràmetres no-estàndard, el paràmetre anterior pot ser un paràmetre no-estàndard sempre que ja s'hagi posicionat en un element previ.

Exemple:

p.new_pos = {
    {k.local_1, IPi.k.prior},
    {k.local_2, k.local_1},
}

Si s'utilitza el posicionament, s'ha d'utilitzar per a tots els nous paràmetres.

Modificació/construcció d'una infotaula[modifica]

És quan tota la infotaula es programarà en lua.

A més:

  • S'omet la necessitat de numerar el label i data, ja que ho fa automàticament.
  • La presència o no dels encapçalaments d'un grup d'elements queda facilitada.

Per afegir un nou element cal seguir els passos similars a la #Construcció d'una preinfotaula, si be els noms de les funcions canvien, així load_arg_of_key i label_of_key estan substituïdes per una única load_show_key, funció encarregada d'enviar a infobox l'etiqueta i el valor corresponent a la clau, si troba un valor per la clau.

Per fer una crida senzilla a una propietat de WD cal escriure-la tal com s'ha assenyalat amb l'ús de la preinfotaula.

Amb més facilitats, admet

  • Crides complexes a WD, per exemple es pot escriure:
local items = {
    [MLMT.k.Args] = {
        ...
        [Prei.k.new_item] = {"new_item", {"P12345678 OR P87654321",
                                          formatting='[http://www.aweb.org/?id=$1 $1]',
                                          list='firstrank',},
                                          },
        ...
  • Admet diverses crides a WD, en l'exemple si falla la primera crida, el módul efectua la segona crida:
local items = {
    [MLMT.k.Args] = {
        ...
        [Prei.k.new_item] = {"new_item", {"P12345678 OR P87654321",
                                          formatting='[http://www.aweb.org/?id=$1 $1]',},
                                         {"P123456789",
                                          formatting='[http://www.otherweb.org/?id=$1 $1',},  
                                          },
        ...
  • Admet la formatació per a un paràmetre que s'entri només manualment, així:
local items = {
    [MLMT.k.Args] = {
        ...
        [Prei.k.new_item] = {"new_item", {formatting='[http://www.unaweb.org/?id=$1 $1]'}},
        ...
  • Admet crear un paràmetre el valor del qual només sigui obtingut de WD, així:
local items = {
    [MLMT.k.Args] = {
        ...
        [Prei.k.new_item] = {"", "P12345678",},
        ...

però en aquest cas s'hauria de modificar la funció que comprova precisament que no hi hagi una petició del paràmetre sense nom assignat:

    function arg_names_types_from_key (key)
	return SA.CheckIsStrOrTab (itemsM[MLMT.k.Args][key][1], key), MLMT.IT.s
    end

per una funció semblant a:

    function arg_names_types_from_key (key)
        if key == Prei.k.new_item then
            return nil
        else
	    return SA.CheckIsStrOrTab (itemsM[MLMT.k.Args][key][1], key), MLMT.IT.s
        end
    end