Module:Lien interlangue
La documentation pour ce module peut être créée à Module:Lien interlangue/Documentation
local p = {}
function p.main( frame )
-- http://lua-users.org/wiki/StringTrim
local function trim( s )
return s:match( '^()%s*$' ) and '' or s:match( '^%s*(.*%S)' )
end
local function lien( interwiki, target, text )
if target:sub( 1, 1 ) == ':' then
target = target:sub( 2 )
end
if interwiki then
target = interwiki .. ':' .. target
end
if text then
return '[[:' .. target .. '|' .. text .. ']]'
else
return '[[:' .. target .. ']]'
end
end
local validArgs = {
fr = true,
[1] = true,
lang = true,
langue = true,
trad = true,
texte = true,
nocat = true,
}
local parentArgs = frame:getParent().args
local hasInvalidArgs = false
local args = {}
for k, v in pairs( parentArgs ) do
-- détecte la présence de paramètres non reconnus
if not validArgs[ k ] then
hasInvalidArgs = true
end
-- effectue un trim sur les paramètres non nommés,
-- et exclut les paramètres dont la valeur est vide
if type( k ) == 'number' then
v = trim( v )
end
if v ~= '' then
args[ k ] = v
end
end
local cible_fr = args[ 'fr' ] or args[ 1 ] or args[ 'trad' ]
local cible_trad = args[ 'trad' ] or args[ 'fr' ] or args[ 1 ]
local categorise = ( args[ 'nocat' ] ~= 'oui' )
if not cible_fr then
return frame:expandTemplate{ title = 'Fix', args = {
[1] = '[[' .. ( args[ 'texte' ] and '|' .. args[ 'texte' ] or '' ) .. ']]',
['message'] = 'modèle à corriger',
['message_lien'] = 'Catégorie:Page contenant un appel à traduction d\'un article non spécifié',
['infobulle'] = 'Cet appel à traduction est à corriger car aucun titre de page n\'est spécifié.',
['catégorie'] = ( categorise and 'Page contenant un appel à traduction d\'un article non spécifié' or nil )
} }
end
local result = lien( nil, cible_fr, args[ 'texte' ] )
if ( mw.title.new( cible_fr ) or {} ).exists then
if categorise then
result = result .. p._temoin( cible_fr )
end
return result
else
local lang = args[ 'langue' ] or args[ 'lang' ] or 'en'
local function makeSpan( libelle )
local title = 'Article ' .. libelle .. '\194\160: «\194\160' .. cible_trad .. '\194\160»'
return '<span class="indicateur-langue" title="' .. title:gsub( '"', '"' ) .. '">(' .. lang .. ')</span>'
end
if lang == 'd' then
result = result .. ' ' .. lien( 'd', cible_trad, makeSpan( 'sur Wikidata' ) )
else
local langs = {
de = 'allemand',
en = 'anglais',
es = 'espagnol',
it = 'italien',
ja = 'japonais',
pl = 'polonais',
pt = 'portugais',
ru = 'russe',
zh = 'chinois',
}
local nomLangue = langs[ lang ]
if not nomLangue then
nomLangue = require( 'Module:Langue' ).nomLangue( lang )
if nomLangue:find( 'class="error"', nil, true ) then
nomLangue = nil
end
end
if nomLangue then
result = result .. ' ' .. lien( lang, cible_trad, makeSpan( 'en ' .. nomLangue ) )
else
result = result .. ' ' .. lien( lang, cible_trad, makeSpan( 'dans une autre langue' ) )
.. '<span class="error">Erreur : langue non reconnue par le modèle Lien : « ' .. lang .. ' ».</span>'
if categorise then
result = result .. '[[Catégorie:Article contenant un appel à traduction avec un code langue inconnu|+]]'
end
end
end
if categorise then
result = result .. p._categorisation( lang )
end
if hasInvalidArgs then
result = result .. '[[Catégorie:Modèle Lien avec un paramètre inconnu]]'
end
return result
end
end
function p._temoin( cible_fr )
local categorie
local ns = mw.title.getCurrentTitle().namespace
-- (principal), Portail, Référence
if ns == 0 or ns == 100 or ns == 104 then
categorie = '[[Catégorie:Page utilisant Lien pour un article existant]]'
-- Modèle
elseif ns == 10 then
categorie = '[[Catégorie:Page utilisant Lien pour un article existant|*]]'
-- Discussion, Wikipédia, Projet
elseif ns == 1 or ns == 4 or ns == 102 then
categorie = '[[Catégorie:Page de discussion utilisant Lien pour un article existant]]'
else
categorie = ''
end
return categorie .. '<span class="ExistingLink" style="display:none">' .. cible_fr .. '</span>'
end
function p._categorisation( lang )
local ns = mw.title.getCurrentTitle().namespace
-- (principal), Modèle
if ns == 0 or ns == 10 then
local data = mw.loadData( 'Module:Lien interlangue/data catégorisation' )
return ( data[ lang ] or '[[Catégorie:Article contenant un appel à traduction avec un code langue inconnu|' .. lang .. ']]' )
else
return ''
end
end
return p