Module:Langue
Révision datée du 28 juillet 2013 à 09:52 par Zebulon84 (discussion) (Prise en compte de la possibilité d'avoir le paramètre texte défini mais vide et le texte dans un paramètre non nommé.)
La documentation pour ce module peut être créée à Module:Langue/doc
local langue = { } local datalangue = mw.loadData( 'Module:langue/Data' ) -- premierParametre renvoi le premier paramètre de Frame, que celui-ci ait été transmi par au modèle, au module par invoke, ou à l'intérieur d'un module sous forme de string dans un tableau ou direstement de string. -- si le deuxième paramètre est true, la chaine est rendue trimé et en minuscule. local function premierParametre ( frame, lowerCase ) local arg if type ( frame ) == 'table' then arg = ( frame.args and frame.args [1] ) or frame [1] or '' elseif type ( frame ) == 'string' then arg = frame end if type ( arg ) ~= 'string' then arg = '' end if lowerCase then arg = mw.ustring.lower ( mw.text.trim ( arg ) ) end return arg end -- voir Modèle:Direction langue function langue.directionLangue ( frame ) local arg = premierParametre ( frame, true ) local direction = 'ltr' for i, v in ipairs( datalangue.languesRtl ) do if arg == v then direction = 'rtl' break end end return direction end -- voir Modèle:Code langue function langue.codeLangue ( frame ) local arg = premierParametre ( frame, true ) local code = datalangue.dataCodeLangue [ arg ] return code or arg end -- voir Modèle:Code langue 2 function langue.codeLangue2 ( frame ) local arg = premierParametre ( frame, true ) local code = datalangue.dataCodeLangue [ arg ] return code or '' end -- voir Modèle:Nom langue function langue.nomLangue ( frame ) local arg = premierParametre ( frame, true ) local nom = datalangue.dataNomLangue [ arg ] or '?????' return '[[' .. nom .. ']]' end -- voir Modèle:Lang function langue.lang ( frame ) local args = frame.args or frame or { } -- préparation pour appel par modèle ou direct. local code = mw.ustring.lower ( mw.text.trim( args [1] or '' ) ) local texte = args.texte or '' local dir = mw.ustring.lower ( args.dir or '' ) local trans = args.trans local wikiText = '' if texte == '' then texte = args [2] or '' end -- détection de la direction du texte if code == 'ltr' or code == 'rtl' then dir = code code = mw.ustring.lower ( mw.text.trim ( args [2] ) ) texte = args [3] or '' end -- prépatation du rendu de direction du texte. if dir == 'ltr' or dir == 'rtl' then dir = 'dir=' .. dir else dir = '' end -- transliteration if trans and trans ~= '' then trans = ' (<span class="lang-' .. code .. ' transcription" lang="' .. code .. '-Latn" dir="ltr">' .. trans .. '</span>)' else trans = '' end -- compilation du texte à retourner wikiText = '<span class="lang-' .. code .. '" lang="' .. code .. '" ' .. dir .. '>' .. texte .. '</span>' .. trans -- ajout de la catégorie Page avec code de langue invalide si le code langue est dans la table dataCodeInvalide for i, v in ipairs( datalangue.dataCodeInvalide ) do if code == v then wikiText = wikiText .. '[[Catégorie:Page avec code de langue invalide]]' break end end return wikiText end -- voir Modèle:Langue function langue.langue ( frame ) local args = frame.args or frame or { } args [1] = langue.codeLangue ( args [1] ) args.dir = args.dir or langue.directionLangue ( args [1] ) return langue.lang ( args ) end -- voir Modèle:Indication de langue function langue.indicationDeLangue ( frame ) local args = frame.args or frame or { } local nomLangue = args [1] or '' local code = mw.ustring.lower ( args.langue or mw.text.trim( args [2] or '' ) ) local texte = args.texte local dir = args.dir local wikiText = '' if texte and texte ~= '' then texte = ' ' .. langue.lang { code, dir = dir, texte = texte } else texte = '' end wikiText = '<span class="indicateur-langue">(<abbr class="abbr" title="Langue : ' .. nomLangue .. '">' .. code .. '</abbr>)</span>' .. texte return wikiText end -- voir Modèle:Langue avec nom function langue.langueAvecNom ( frame ) local args = frame.args or frame or { } local code = mw.ustring.lower ( args.lang or mw.text.trim ( args [1] or '') ) local texte = args [2] or '' local dir = args.dir local wikiText = '' -- définition du nom de la langue en français local nom = langue.nomLangue { code } -- détection de la direction du texte if code == 'ltr' or code == 'rtl' then dir = code code = mw.ustring.lower ( mw.text.trim ( args [2] ) ) texte = args [3] or '' end if texte ~= '' then texte = ' ' .. langue.lang { code, dir = dir, texte = texte } end wikiText = nom .. ' :' .. texte return wikiText end return langue