Ajuda:Preinfotaules multilingües

De la Viquipèdia, l'enciclopèdia lliure
Multilanguage preinfoboxes

Les plantilles multilingües que utilitzen preinfotaules, consten de 6 pàgines: 1 plantilla que crida a un dels 3 mòduls i 2 plantilles. L'última plantilla crida al mòdul infobox.

Els administradors locals de la infotaula només hauríem de modificar el mòdul i18n.

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.

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

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

  • Canviar el format d'un paràmetre.
  • Que varis paràmetres (habitualment no-estàndard) passin el seu contingut a un paràmetre estàndard.

Això comporta tres passos en el final del mòdul principal/i18n:

  1. Definició de les claus pels paràmetres no-estàndard. Claus definides a local k.
  2. Definició de les variables no-estàndard. Variables definides en p.new_args.
  3. Establir com es gestionen les variables que donen un valor a una variable estàndard. A través de function p.local_func.

Definició de les claus pels paràmetres 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 (amb lletres de la "a" a la "z", "_" i xifres que no estiguin com a primer caràcter) 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ó dels noms pels paràmetres no-estàndard[modifica]

Per defecte:

p.new_args = {
    -- explicacions en anglès...
}

Llavors (i per exemple) per establir dos paràmetres cal definir-ne el seu nom. Suposem que tinguin de clau local_1 i local_2. Llavors, utilitzant el tipus dels paràmetres:

p.new_args = {
    -- explicacions en anglès...
    [k.local_1] = "local_1",
    [k.local_2] = "local_2",
}

O amb més d'una denominació:

p.new_args = {
    -- explicacions en anglès...
    [k.local_1] = {"local_1","Local 1"},
    [k.local_2] = "local_2",
}

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

Opcionalment es poden establir restriccions, amb la sintaxi ja explicada aquí. Per exemple, per a un enter positiu:

p.new_lims = {
    -- explicacions en anglès...
    [k.local_1] = "i+",
}

Establir com es gestionen les variables[modifica]

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 preinfotaula[modifica]

Introducció[modifica]

El paquet té dos parts diferenciades:

  • La preinfotaula o mòduls en lua, que enviarà els paràmetres i etiquetes a:
  • La plantilla en llenguatge wiki.

Aquesta situació és més laboriosa i l'execució de la infotaula és més lenta, però no cal saber programar en lua.

Afegir un nou element[modifica]

Si es vol afegir un nou element, que com la majoria d'elements, tindrà una etiqueta i prendrà un valor.

Per exemplificar-ho, es vol afegir "Element nou".

Cal seguir de forma acurada els següents passos:

A "Principal/items":[modifica]

  • Afegir una clau identificativa per a "Element nou" i que s'utilitzarà en tots els mòduls. Si el nom fos "new_item".
  • Escriure enmig de la llista (i al lloc que toqui, per facilitar-ne la cerca, per ordre d'aparició en la infotaula, i només per aquest motiu):
p.k = {
    ...
    new_item = "new_item ",
    ...
}
  • Escriure (en el lloc que toqui) en la llista:
p.idx = {
    ...
    {"al", p.k.new_item},
    ...
}

El primer element és segons el tipus d'etiqueta-paràmetre.

A "Principal"[modifica]

Suposem que s'ha definit "Principal/items" com a "Pi", apareixerà al principi del mòdul com:

local Pi = require "Module:Principal/items"

  • Escriure (en el lloc que toqui) en la llista de paràmetres:
local items = {
    [MLMT.k.Args] = {
        ...
        [Prei.k.new_item] = {"new_item", "",},
        ...

Si es vol que prengui el valor de la propietat P12345678, escriure:

local items = {
    [MLMT.k.Args] = {
        ...
        [Prei.k.new_item] = {"new_item", "_P12345678",},
        ...

Observeu que la propietat va precedida del guió baix.

Si depengués de dos valors possibles, P12345678 i P87654321, escriure "_P12345678-P87654321"

  • Escriure (en el lloc que toqui) en la llista d'etiquetes:
local items = {
    [MLMT.k.Labels] = {
        ...
        [Prei.k.new_item] = "New item",
        ...

Així, per defecte, l'etiqueta a presentar serà "New item". Ja la canviarem.

A "Principal/i18n"[modifica]

Suposem que s'ha definit "Principal/items" com a "Prei", apareixerà al principi de tot del mòdul com:

local Prei = require "Module:Pre/items"


Afegir la traducció:

  • Escriure (en el lloc que toqui) en la llista de paràmetres:
local items = {
    [MLMT.k.Args] = {
        ...
        [Prei.k.new_item] = "nou_element",
        ...

D'aquesta forma, l'editor de l'article pot utilitzar Prei.k.new_item des de |nou_element= o |new_item=.

Si no s'hagués escrit en aquesta secció o senzillament s'hagués anotat:

local items = {
    [MLMT.k.Args] = {
        ...
        [Prei.k.new_item] = "",
        ...

El valor només seria cridat per |new_item=.

Si es vulgués més d'una forma d'entrada en la forma localitzada, per exemple "nova_entrada", s'hauria d'escriure:

local items = {
    [MLMT.k.Args] = {
        ...
        [Prei.k.new_item] = {"nou_element","nova_entrada"},
        ...


  • Escriure (en el lloc que toqui) en la llista d'etiquetes:
local items = {
    ....
    [MLMT.k.Labels] = {
        ...
        [Prei.k.new_item] = "Nou element",
        ...

Aquest "Nou element" substituirà a "New item" definit a "Prei".

Verificacions dels paràmetres[modifica]

Per a assignar un tipus de paràmetres als paràmetres s'anotarà a Principal/items la següent taula cal escriure (si no existeix) el nom d'arg_lims. Si es vol que el nou element només pugui ser un número, cal escriure:

p.arg_lims = {
    ...
    {p.k.new_item', 'i'},
    ...
}

Generalment ja existirà a Principal/items la taula p.arg_lims, en cas contrari hi ha escrit en el codi del mòdul:

  • i18n = GIBT.SetAttribToArgs (i18n, {}) -- per les llistes
  • i18nM = GIBT.SetAttribToArgs (i18nM, {}) -- pel funcionament de la plantilla.

Llavors s'haurà de canviar a:

  • i18n = GIBT.SetAttribToArgs (i18n, Pi.arg_lims) -- per les llistes
  • i18nM = GIBT.SetAttribToArgs (i18nM, Pi.arg_lims) -- pel funcionament de la plantilla.

No s'haurà de fer cap altra canvi a menys que es vulgui que la captura del paràmetre hagi de tenir un comportament no usual.

Assignació de valors per defecte als paràmetres[modifica]

Un exemple podria ser l'entrada d'un enter, que en el cas de que no s'assigni manualment per l'editor de l'article, s'assigni un valor per defecte. En aquests casos, i sempre en el mòdul principal, s'haurà de posar abans de la funció GIBT.std_lab_arg_to_tab (funció que efectua la captura dels paràmetres assignats manualment).

Per exemple, si es vol donar un valor predeterminat de 160 a l'amplada, que correspon a la clau Prei.k.width. Llavors s'hauria d'afegir la funció: GIBT.arg_of_key (args, i18nM, Prei.k.width, 160, true).

Si en aquest mateix exemple l'amplada tingués també d'una etiqueta llavors s'hauria d'afegir la funció: GIBT.arg_label_of_key (args, i18nM, Prei.k.width, 160).

Modificacions a la plantilla[modifica]

La plantilla rebrà els següents valors del mòdul {{{val_new_item|}}} i {{{lbl_new_item|}}}

Afegir un encapçalament[modifica]

Es tracta de repetir els passos anteriors com si el header fos una etiqueta, i lògicament fer els passos només per a l'etiqueta ([MLMT.k.Labels]). És bona costum afegir com a clau el prefix hd_ al nom de la clau, apareixerà en negreta el nom de la clau en les llistes.