Différences entre les pages « Module:Wikidata/Outils » et « Module:Wikidata/I18n »

De Les Mots de l'agronomie
< Module:Wikidata(Différence entre les pages)
imported>Jacques Ducloy
m (1 révision importée)
 
imported>Jacques Ducloy
m (1 révision importée)
 
Ligne 1 : Ligne 1 :
--Fonctions élémentaires de gestion des snaks Wikidata
+
return {
local p = {}
+
-- Messages d'erreurs
p.i18n = require "Module:Wikidata/I18n"
+
["property-param-not-provided"] = "paramètre 'property' manquant",
local defaultlang = mw.getContentLanguage():getCode()
+
["qualifier-param-not-provided"] = "paramètre 'qualifier' manquant",
 
+
["entity-param-not-provided"] = "paramètre 'entity' manquant",
function p.translate(str, rep1, rep2)
+
["entity-not-found"] = "entité non trouvée",
str = p.i18n[str] or str
+
["unknown-claim-type"] = "type d'affirmation inconnu",
if rep1 then
+
["unknown-snak-typeg"] = "unknown snak type",
str = str:gsub('$1', rep1)
+
["unknown-datavalue-type"] = "unknown datavalue type.",
end
+
["unknown-entity-type"] = "unknown entity type",
if rep2 then
+
["invalid-id"] = "identifiant inconnu",
str = str:gsub('$2', rep2)
+
["invalid-datatype"] = "type de données inconnu",
end
+
["invalid-linktype"] = "type de lien inconnu",
return str
 
end
 
 
 
function p.snaktype(snak)
 
return snak.snaktype
 
end
 
 
 
function p.isSpecial(snak)
+
-- Autres messages
return (snak.snaktype ~= 'value')
+
["no-label"] = "pas de libellé",
end
+
['no description'] = "pas description",
 
+
["novalue"] = "-",
function p.isValue(snak)
+
["somevalue"] = "inconnu",
return (snak.snaktype == 'value')
+
["sometime"] = "date inconnue",
end
+
['to translate'] = 'Page utilisant des données de Wikidata à traduire',
 
+
["trackingcat"] = 'Page utilisant $1',
function p.getId(snak)
+
['see-wikidata-value'] = "Voir et modifier les données sur Wikidata", -- lien vers des valeurs sur une propriété Wikidata
if p.isValue(snak) then
+
['see-wikidata'] = "Voir l'élément Wikidata correspondant", -- utilisé sur les liens Wikidata par défaut en l'absence de lien interne disponible
return 'Q' .. snak.datavalue.value['numeric-id']
+
['see-another-project'] = "Article sur $1",
end
+
['see-another-language'] = "Article sur Wikipédia en $1",
end
+
['activate-query'] = "<div class='par wikidata'></div>" -- activates an on-demand-only query
 
+
}
function p.getNumericId(snak)
 
if p.isValue(snak) then
 
return snak.datavalue.value['numeric-id']
 
end
 
end
 
 
 
function p.getMainId(claim)
 
return p.getId(claim.mainsnak)
 
end
 
 
 
function p.EntityId(entity)
 
if type(entity) == 'string' then
 
return entity
 
end
 
return entity.id
 
end
 
 
 
function p.getValue(snak)
 
return snak.datavalue.value
 
end
 
 
 
-- function that returns true if the "qid" parameter is the qid
 
-- of the item that is linked to the calling page
 
function p.is_page_of_qid(qid)
 
local entity_on_its_page = false
 
local self_entity = mw.wikibase.getEntity()
 
if self_entity ~= nil and qid == p.EntityId(self_entity) then
 
entity_on_its_page = true
 
end
 
return entity_on_its_page
 
end
 
 
 
function p.formatError( key , category, debug)
 
    if debug then
 
        return error(p.i18n[key] or key)
 
    end
 
    if category then
 
        return "[[Category:" .. category .. "|" .. (key or "") .. "]]"
 
    else
 
        return "[[Catégorie:Page avec un problème de codage Wikidata|" .. (key or "") .. "]]"
 
    end
 
end
 
 
 
function p.addcat(cat, sortkey)
 
if sortkey then
 
return  '[[Category:' .. cat .. '|' .. (sortkey or '') .. ']]'
 
end
 
return '[[Category:' .. cat  .. ']]'
 
end
 
 
 
function p.getEntity( val )
 
if type(val) == 'table' then
 
return val
 
end
 
if val == '-' then
 
return nil
 
end
 
if val == '' then
 
val = nil
 
end
 
return mw.wikibase.getEntityObject(val)
 
end
 
 
 
function p.splitStr(val) -- transforme en table les chaînes venant du Wikitexte qui utilisent des virgules de séparatin
 
if type(val) == 'string' then
 
val = mw.text.split(val, ",")
 
end
 
return val
 
end
 
 
 
function p.isHere(searchset, val)
 
for i, j in pairs(searchset) do
 
if val == j then
 
return true
 
end
 
end
 
return false
 
end
 
 
 
function p.alreadyHere(searchset, val) -- obsolète
 
return p.isHere(searchset, val)
 
end
 
 
 
function p.getEntityPagename(entity)
 
if (not entity) then
 
return nil -- ou option de gestion des erreurs ?
 
end
 
local name ="d:"
 
if entity["type"] == "property" then
 
name = "d:Property:"
 
end
 
return name .. entity.id
 
end
 
 
 
function p.getEntityPagename(entity)
 
if (not entity) then
 
return nil -- ou option de gestion des erreurs ?
 
end
 
local name ="d:"
 
if entity["type"] == "property" then
 
name = "d:Property:"
 
end
 
return name .. entity.id
 
end
 
 
 
local function wikidataLink(entity)
 
local name =':d:'
 
 
if type(entity) == 'string' then
 
if entity:match("P[0-9+]") then
 
entity = "Property:" .. entity
 
end
 
return name .. entity
 
elseif type(entity) == 'table' then
 
if entity["type"] == "property" then
 
name = ":d:Property:"
 
end
 
return name .. entity.id
 
elseif type(entity) == nil then
 
return formatError('entity-not-found')
 
end
 
end
 
 
 
function p.siteLink(entity, project, lang)
 
-- returns 3 values: a sitelink (with the relevant prefix) a project name and a language
 
lang = lang or defaultlang
 
if (type(project) ~= 'string') then
 
project = 'wiki'
 
end
 
project = project:lower()
 
if project == 'wikipedia' then
 
project = 'wiki'
 
end
 
if type(entity) == 'string' and (project == 'wiki') and ( (not lang or lang == defaultlang) ) then -- évite de charger l'élément entier
 
return  mw.wikibase.sitelink(entity), 'wiki', defaultlang
 
end
 
if project == 'wikidata' then
 
return wikidataLink(entity), 'wikidata'
 
end
 
local projects = {
 
-- nom = {préfixe sur Wikidata, préfix pour les liens sur Wikipédia, ajouter préfixe de langue}
 
wiki = {'wiki', nil, true}, -- wikipedia
 
commons = {'commonswiki', 'commons', false},
 
commonswiki = {'commonswiki', 'commons', false},
 
wikiquote = {'wikiquote', 'q', true},
 
wikivoyage = {'wikivoyage', 'voy', true},
 
wikibooks = {'wikibooks', 'b', true},
 
wikinews = {'wikinews', 'n', true},
 
wikiversity = {'wikiversity', 'v', true},
 
wikisource = {'wikisource', 's', true},
 
-- meta
 
-- mediawiki
 
}
 
 
 
entity = p.getEntity(entity)
 
if not entity then
 
return nil
 
end
 
 
 
local projectdata = projects[project:lower()]
 
if not projectdata then -- sinon, on peut avoir des liens du type "enwiki" plutôt que "en" et lang = "wikipedia'
 
for k, v in pairs(projects) do
 
if project:match( k .. '$' )
 
and mw.language.isKnownLanguageTag(project:sub(1, #project-#k))
 
then
 
lang = project:sub(1, #project-#k)
 
projectdata = k
 
break
 
end
 
end
 
if not mw.language.isKnownLanguageTag(lang) then
 
return p.formatError('invalid project code: ' .. (project or '?'))
 
end
 
end
 
if not projectdata then
 
return p.formatError('invalid project code: ' .. (project or '?'))
 
end
 
 
local linkcode = projectdata[1]
 
local prefix = projectdata[2]
 
local multiversion = projectdata[3]
 
if multiversion then
 
linkcode = lang .. linkcode
 
end
 
local link = entity:getSitelink(linkcode)
 
if not link then
 
return nil
 
end
 
 
if prefix then
 
link = prefix .. ':' .. link
 
end
 
if multiversion then
 
link = ':' .. lang .. ':' .. link
 
end
 
return link, project, lang
 
end
 
 
 
-- add new values to a list, avoiding duplicates
 
function p.addnewvalues(old, new)
 
if not new then
 
return old
 
end
 
for _, j in pairs(new) do
 
if not p.isHere(old, j) then
 
table.insert(old, j)
 
end
 
end
 
return old
 
end
 
 
 
return p
 

Version actuelle datée du 28 décembre 2020 à 11:45

La documentation pour ce module peut être créée à Module:Wikidata/I18n/doc

return {
-- Messages d'erreurs
	["property-param-not-provided"] = "paramètre 'property' manquant",
	["qualifier-param-not-provided"] = "paramètre 'qualifier' manquant",
	["entity-param-not-provided"] = "paramètre 'entity' manquant",
	["entity-not-found"] = "entité non trouvée",
	["unknown-claim-type"] = "type d'affirmation inconnu",
	["unknown-snak-typeg"] = "unknown snak type",
	["unknown-datavalue-type"] = "unknown datavalue type.",
	["unknown-entity-type"] = "unknown entity type",
	["invalid-id"] = "identifiant inconnu",
	["invalid-datatype"] = "type de données inconnu",
	["invalid-linktype"] = "type de lien inconnu",
	
-- Autres messages
	["no-label"] = "pas de libellé",
	['no description'] = "pas description",
	["novalue"] = "-",
	["somevalue"] = "inconnu",
	["sometime"] = "date inconnue",
	['to translate'] = 'Page utilisant des données de Wikidata à traduire',
	["trackingcat"] = 'Page utilisant $1',
	['see-wikidata-value'] = "Voir et modifier les données sur Wikidata", -- lien vers des valeurs sur une propriété Wikidata
	['see-wikidata'] = "Voir l'élément Wikidata correspondant", -- utilisé sur les liens Wikidata par défaut en l'absence de lien interne disponible
	['see-another-project'] = "Article sur $1",
	['see-another-language'] = "Article sur Wikipédia en $1",
	['activate-query'] = "<div class='par wikidata'></div>" -- activates an on-demand-only query
}