<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://fr.battlestarwiki.ddns.net/index.php?action=history&amp;feed=atom&amp;title=Module%3ALangue</id>
	<title>Module:Langue - Historique des versions</title>
	<link rel="self" type="application/atom+xml" href="https://fr.battlestarwiki.ddns.net/index.php?action=history&amp;feed=atom&amp;title=Module%3ALangue"/>
	<link rel="alternate" type="text/html" href="https://fr.battlestarwiki.ddns.net/index.php?title=Module:Langue&amp;action=history"/>
	<updated>2026-04-28T03:19:41Z</updated>
	<subtitle>Historique des versions pour cette page sur le wiki</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>https://fr.battlestarwiki.ddns.net/index.php?title=Module:Langue&amp;diff=60&amp;oldid=prev</id>
		<title>LIMAFOX76 : Page créée avec « local Langue = { }  -- Chargement de la base de données des langues avec gestion d&#039;erreur. local dataLangue local moduleData = &#039;Module:Langue/Data&#039; local langErrorMess =... »</title>
		<link rel="alternate" type="text/html" href="https://fr.battlestarwiki.ddns.net/index.php?title=Module:Langue&amp;diff=60&amp;oldid=prev"/>
		<updated>2017-06-02T11:29:36Z</updated>

		<summary type="html">&lt;p&gt;Page créée avec « local Langue = { }  -- Chargement de la base de données des langues avec gestion d&amp;#039;erreur. local dataLangue local moduleData = &amp;#039;Module:Langue/Data&amp;#039; local langErrorMess =... »&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local Langue = { }&lt;br /&gt;
&lt;br /&gt;
-- Chargement de la base de données des langues avec gestion d&amp;#039;erreur.&lt;br /&gt;
local dataLangue&lt;br /&gt;
local moduleData = &amp;#039;Module:Langue/Data&amp;#039;&lt;br /&gt;
local langErrorMess = &amp;#039;&amp;lt;span class=error&amp;gt;langue non reconnue : %s&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
local success, resultat = pcall (mw.loadData, moduleData )&lt;br /&gt;
success = success and type( resultat.en ) == &amp;#039;table&amp;#039;&lt;br /&gt;
if success then&lt;br /&gt;
	dataLangue = resultat&lt;br /&gt;
else&lt;br /&gt;
	-- Base de données a minima en cas de bug sur le Module:Langue/Data&lt;br /&gt;
	dataLangue = { en = { code = &amp;#039;en&amp;#039;, nom = anglais },&lt;br /&gt;
		fr = { code = &amp;#039;fr&amp;#039;, nom = &amp;#039;français&amp;#039; },&lt;br /&gt;
		de = { code = &amp;#039;de&amp;#039;, nom = &amp;#039;allemand&amp;#039; },&lt;br /&gt;
		es = { code = &amp;#039;es&amp;#039;, nom = &amp;#039;espagnol&amp;#039; },&lt;br /&gt;
		it = { code = &amp;#039;it&amp;#039;, nom = &amp;#039;italien&amp;#039;  },&lt;br /&gt;
		la = { code = &amp;#039;la&amp;#039;, nom = &amp;#039;latin&amp;#039;    },&lt;br /&gt;
		[&amp;#039;rtl script&amp;#039;] = { Arab = true }&lt;br /&gt;
	}&lt;br /&gt;
	dataLangue.anglais = dataLangue.en&lt;br /&gt;
	dataLangue[&amp;#039;français&amp;#039;] = dataLangue.fr&lt;br /&gt;
	dataLangue.allemand = dataLangue.de&lt;br /&gt;
	dataLangue.espagnol = dataLangue.es&lt;br /&gt;
	dataLangue.italien = dataLangue.it&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- premierParametre renvoie le premier paramètre de Frame, que celui-ci ait été passé au module par invoke, directement au modèle,&lt;br /&gt;
-- ou à l&amp;#039;intérieur d&amp;#039;un module sous forme de string dans un tableau ou directement de string.&lt;br /&gt;
-- Si aucun de ces arguments ne contient de chaine, la fonction renvoie nil.&lt;br /&gt;
-- Si le deuxième paramètre est true, la chaine est renvoyée trimée et en minuscules.&lt;br /&gt;
local function premierParametre( frame, lowerCase )&lt;br /&gt;
	local arg&lt;br /&gt;
	if type( frame ) == &amp;#039;table&amp;#039; then&lt;br /&gt;
		arg = ( frame.getParent and ( frame.args[1] or frame:getParent().args[1] ) ) or frame[1]&lt;br /&gt;
	elseif type( frame ) == &amp;#039;string&amp;#039; then&lt;br /&gt;
		arg = frame&lt;br /&gt;
	end&lt;br /&gt;
	if type( arg ) ~= &amp;#039;string&amp;#039; then&lt;br /&gt;
		arg = nil&lt;br /&gt;
	end&lt;br /&gt;
	if arg and lowerCase then&lt;br /&gt;
		arg = mw.ustring.lower( mw.text.trim ( arg ) )&lt;br /&gt;
	end&lt;br /&gt;
	return arg&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- determinationCode retourne une table contenant le code de langue principal et la liste des subcode&lt;br /&gt;
-- si le code de langue principal n&amp;#039;est pas reconnu, retourne nil.&lt;br /&gt;
function Langue.determinationCode( langue )&lt;br /&gt;
	if type( langue ) == &amp;#039;string&amp;#039; and langue ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		local tabCode = mw.text.split( langue, &amp;#039;-&amp;#039; )&lt;br /&gt;
		local tabLangue = dataLangue[ mw.ustring.lower( tabCode[1] ) ]&lt;br /&gt;
		if tabLangue and tabLangue.code then&lt;br /&gt;
			tabCode[1] = tabLangue.code&lt;br /&gt;
			if tabLangue.invalide then&lt;br /&gt;
				tabCode.invalide=true&lt;br /&gt;
			end&lt;br /&gt;
			return tabCode&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Voir Modèle:Code langue&lt;br /&gt;
-- Paramètre :&lt;br /&gt;
--     1  : nom de langue.&lt;br /&gt;
function Langue.codeLangue( frame )&lt;br /&gt;
	local arg = premierParametre( frame, true )&lt;br /&gt;
	local tabCode = Langue.determinationCode( arg )&lt;br /&gt;
	return ( tabCode and table.concat( tabCode, &amp;#039;-&amp;#039; ) ) or arg or &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Voir Modèle:Code langue 2&lt;br /&gt;
-- Paramètre :&lt;br /&gt;
--     1  : nom de langue.&lt;br /&gt;
function Langue.codeLangue2( frame )&lt;br /&gt;
	local arg = premierParametre( frame, true )&lt;br /&gt;
	local tabCode = Langue.determinationCode( arg )&lt;br /&gt;
	return ( tabCode and table.concat( tabCode, &amp;#039;-&amp;#039; ) ) or &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Voir Modèle:Direction langue&lt;br /&gt;
-- Paramètre :&lt;br /&gt;
--     1  : nom de langue ou code IETF.&lt;br /&gt;
function Langue.directionLangue( frame )&lt;br /&gt;
	local arg = premierParametre( frame, true )&lt;br /&gt;
	if type( arg ) ~= &amp;#039;string&amp;#039; or arg == &amp;#039;&amp;#039; then&lt;br /&gt;
		return &amp;#039;ltr&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	-- séparation du code de langue en code principal et les différents subcode.&lt;br /&gt;
	local tabCode = Langue.determinationCode( arg )&lt;br /&gt;
	if tabCode then&lt;br /&gt;
		-- on essaye de savoir si la direction est de droite à gauche&lt;br /&gt;
		local codeScript = tabCode[2]&lt;br /&gt;
		if codeScript and string.len( codeScript ) == 4 and dataLangue[ &amp;#039;rtl script&amp;#039; ] then&lt;br /&gt;
			-- il y a un subcode d&amp;#039;écritrure, c&amp;#039;est lui qui est pris en compte&lt;br /&gt;
			codeScript = string.upper( string.sub( codeScript, 1, 1 ) ) .. string.sub( codeScript, 2 )&lt;br /&gt;
			if dataLangue[ &amp;#039;rtl script&amp;#039; ][ codeScript ] then&lt;br /&gt;
				return &amp;#039;rtl&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			-- il n&amp;#039;y a pas de sub-code d&amp;#039;écriture, on prend en compte le code de langue principal.&lt;br /&gt;
			local tabLangue = dataLangue[ tabCode[1] ]&lt;br /&gt;
			if tabLangue and tabLangue.rtl then&lt;br /&gt;
				return &amp;#039;rtl&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- la langue n&amp;#039;est pas écrite de droite à gauche, donc ltr.&lt;br /&gt;
	return &amp;#039;ltr&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Voir Modèle:Nom langue&lt;br /&gt;
-- Paramètre :&lt;br /&gt;
--     1  : code IETF de langue.&lt;br /&gt;
function Langue.nomLangue( frame )&lt;br /&gt;
	local arg = premierParametre( frame, true )&lt;br /&gt;
	if type( arg ) ~= &amp;#039;string&amp;#039; or arg == &amp;#039;&amp;#039; then&lt;br /&gt;
		return &amp;#039;&amp;lt;span class=error&amp;gt;langue non précisée&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	local tabLangue = dataLangue[ arg ]&lt;br /&gt;
	if tabLangue == nil then&lt;br /&gt;
		tabLangue = dataLangue[ mw.ustring.match( arg, &amp;#039;^(%a-)%-&amp;#039; ) ]&lt;br /&gt;
	end&lt;br /&gt;
	if not tabLangue then&lt;br /&gt;
		if success then&lt;br /&gt;
			return string.format( langErrorMess, arg )&lt;br /&gt;
		else&lt;br /&gt;
			return &amp;#039;&amp;lt;span title=&amp;quot;erreur dans &amp;#039; .. moduleData .. &amp;#039;&amp;quot;&amp;gt;&amp;#039; .. arg .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if type( tabLangue.page ) == &amp;#039;string&amp;#039; then&lt;br /&gt;
		if tabLangue.page ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			return &amp;#039;[[&amp;#039; .. tabLangue.page .. &amp;#039;|&amp;#039; .. tabLangue.nom .. &amp;#039;]]&amp;#039;&lt;br /&gt;
		else&lt;br /&gt;
			return tabLangue.nom&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;#039;[[&amp;#039; .. tabLangue.nom .. &amp;#039;]]&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Voir Modèle:Langue&lt;br /&gt;
-- Paramètres :&lt;br /&gt;
--    1 : code IETF de langue ;&lt;br /&gt;
--    texte ou 2 : texte dans cette langue ;&lt;br /&gt;
--    trans : translittération du texte ;&lt;br /&gt;
--    dir : direction de la langue (obsolète : peut être en paramètre 1, avec code en 2 et texte en 3).&lt;br /&gt;
function Langue.langue( frame )&lt;br /&gt;
	local args = ( frame.getParent and frame:getParent().args ) or frame         -- préparation pour appel par modèle ou direct.&lt;br /&gt;
	local code = mw.ustring.lower( mw.text.trim( args[1] or &amp;#039;&amp;#039; ) )&lt;br /&gt;
	local texte = args.texte or &amp;#039;&amp;#039;&lt;br /&gt;
	if texte == &amp;#039;&amp;#039; then&lt;br /&gt;
		texte = args[2] or &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	local dir = args.dir&lt;br /&gt;
	local trans = args.trans&lt;br /&gt;
	&lt;br /&gt;
	-- Décalage des paramètres si code contient la direction du texte (obsolète mais toujours possible).&lt;br /&gt;
	if code == &amp;#039;ltr&amp;#039; or code == &amp;#039;rtl&amp;#039; then&lt;br /&gt;
		dir = code&lt;br /&gt;
		code = mw.ustring.lower( mw.text.trim( args[2] ) or &amp;#039;&amp;#039; )&lt;br /&gt;
		texte = args[3] or &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	local codeArg = code&lt;br /&gt;
	&lt;br /&gt;
	-- Si la langue est reconnue, la valeur de la table est prise en compte (permet de corriger les noms de langue en toutes lettres).&lt;br /&gt;
	local tabCode = Langue.determinationCode( code )&lt;br /&gt;
	local tabLangue&lt;br /&gt;
	if tabCode then&lt;br /&gt;
		code = table.concat( tabCode, &amp;#039;-&amp;#039; )&lt;br /&gt;
		tabLangue = dataLangue[ tabCode[1] ]&lt;br /&gt;
		&lt;br /&gt;
		local codeScript = tabCode[2]&lt;br /&gt;
		-- Si codeScript est bien un style d&amp;#039;écriture (len = 4) on applique sa direction&lt;br /&gt;
		if codeScript and  string.len( codeScript ) == 4 and dataLangue[ &amp;#039;rtl script&amp;#039; ] then&lt;br /&gt;
			-- formatage type Latn correspondant au fromat dans dataLangue[ &amp;#039;rtl script&amp;#039; ]&lt;br /&gt;
			codeScript = string.upper( string.sub(  codeScript, 1, 1 ) ) .. string.sub(  codeScript, 2 )&lt;br /&gt;
			tabLangue = { code = tabLangue.code,&lt;br /&gt;
				rtl = dataLangue[ &amp;#039;rtl script&amp;#039; ][ codeScript ],&lt;br /&gt;
				invalide = tabLangue.invalide&lt;br /&gt;
			}&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
		&lt;br /&gt;
	-- Prépatation du rendu de direction du texte.&lt;br /&gt;
	dir = dir and dir:lower()&lt;br /&gt;
	if dir ~= &amp;#039;ltr&amp;#039; and dir ~= &amp;#039;rtl&amp;#039; then&lt;br /&gt;
		dir = ( tabLangue and tabLangue.rtl and &amp;#039;rtl&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Translittération.&lt;br /&gt;
	local htmlTrans = mw.html.create()&lt;br /&gt;
	if trans and trans ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		trans = trans:gsub( &amp;quot;^&amp;#039;&amp;#039;([^&amp;#039;].*[^&amp;#039;])&amp;#039;&amp;#039;$&amp;quot;, &amp;quot;%1&amp;quot; )&lt;br /&gt;
		htmlTrans:wikitext( &amp;quot; (&amp;#039;&amp;#039;&amp;quot; )&lt;br /&gt;
				:tag( &amp;#039;span&amp;#039; )&lt;br /&gt;
					:addClass( &amp;#039;transcription lang-&amp;#039; .. code )&lt;br /&gt;
					:attr( &amp;#039;lang&amp;#039;, code .. &amp;#039;-Latn&amp;#039; )&lt;br /&gt;
					:attr( &amp;#039;dir&amp;#039;, &amp;#039;ltr&amp;#039; )&lt;br /&gt;
					:wikitext( trans )&lt;br /&gt;
					:done()&lt;br /&gt;
				:wikitext( &amp;quot;&amp;#039;&amp;#039;)&amp;quot; )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Compilation du texte à retourner.&lt;br /&gt;
	local html = mw.html.create( &amp;#039;&amp;#039; )&lt;br /&gt;
	if code == &amp;#039;&amp;#039; then&lt;br /&gt;
		html:wikitext( texte )&lt;br /&gt;
	else&lt;br /&gt;
		html:tag( &amp;#039;span&amp;#039; )&lt;br /&gt;
				:addClass( &amp;#039;lang-&amp;#039; .. code )&lt;br /&gt;
				:attr{ lang = code, dir = dir }&lt;br /&gt;
				:wikitext( texte )&lt;br /&gt;
				:done()&lt;br /&gt;
			:node( htmlTrans )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Ajout de la catégorie Page avec code de langue invalide si le code langue non reconnu ou invalide.&lt;br /&gt;
	if success and ( type( tabLangue ) ~= &amp;#039;table&amp;#039; or tabCode.invalide ) then&lt;br /&gt;
		local namespaceCategorisation = { [0] = true, [4] = true, [10] = true, [12] = true, [14] = true, [100] = true }&lt;br /&gt;
		if namespaceCategorisation[ mw.title.getCurrentTitle().namespace ] then&lt;br /&gt;
			if codeArg == &amp;#039;&amp;#039; then&lt;br /&gt;
				codeArg = &amp;#039; &amp;#039; 	-- sinon la catégorie n&amp;#039;est pas wikifiée&lt;br /&gt;
			end&lt;br /&gt;
			html:wikitext( &amp;#039;[[Catégorie:Pages avec code de langue invalide]] &amp;#039; )&lt;br /&gt;
				:wikitext( string.format( langErrorMess, codeArg ) )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return tostring( html )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Alias nom de fonction&lt;br /&gt;
Langue.lang = Langue.langue&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Voir Modèle:Indication de langue&lt;br /&gt;
-- Paramètres :&lt;br /&gt;
--    1 : nom de langue ;&lt;br /&gt;
--    2 : code IETF ;&lt;br /&gt;
--    texte : texte dans cette langue ;&lt;br /&gt;
--    dir : direction de la langue.&lt;br /&gt;
function Langue.indicationDeLangue( frame )&lt;br /&gt;
	local args = ( frame.getParent and frame:getParent().args ) or frame&lt;br /&gt;
	local nomLangue = args[1] or &amp;#039;&amp;#039;&lt;br /&gt;
	local code = args.langue or mw.text.trim( args[2] or &amp;#039;&amp;#039; )&lt;br /&gt;
	local texte = args.texte&lt;br /&gt;
	local dir = args.dir&lt;br /&gt;
	local wikiText = &amp;#039;&amp;#039;&lt;br /&gt;
	-- Cas où le premier et/ou le deuxième paramètre est vide.&lt;br /&gt;
	if code .. nomLangue == &amp;#039;&amp;#039; then&lt;br /&gt;
		return texte&lt;br /&gt;
	elseif nomLangue == &amp;#039;&amp;#039; then&lt;br /&gt;
		nomLangue = dataLangue[ mw.ustring.lower( code ) ]&lt;br /&gt;
		nomLangue = (nomLangue and nomLangue.nom or &amp;#039;???&amp;#039;)&lt;br /&gt;
	elseif code == &amp;#039;&amp;#039; then&lt;br /&gt;
		code = dataLangue[ nomLangue ]&lt;br /&gt;
		code = ( code and code.code or &amp;#039;&amp;#039; )&lt;br /&gt;
		if code == &amp;#039;&amp;#039; then&lt;br /&gt;
			return texte&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- Gestion du texte.&lt;br /&gt;
	if texte and texte ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		texte = &amp;#039;&amp;amp;nbsp;&amp;#039; .. Langue.lang{ code, dir = dir, texte = texte }&lt;br /&gt;
	else&lt;br /&gt;
		texte = &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	-- Compilation de l&amp;#039;indicateur de langue et du texte.&lt;br /&gt;
	local html = mw.html.create()&lt;br /&gt;
	html:tag( &amp;#039;span&amp;#039; )&lt;br /&gt;
			:addClass( &amp;#039;indicateur-langue&amp;#039; )&lt;br /&gt;
			:wikitext( &amp;#039;(&amp;#039; )&lt;br /&gt;
			:tag( &amp;#039;abbr&amp;#039; )&lt;br /&gt;
				:addClass( &amp;#039;abbr&amp;#039; )&lt;br /&gt;
				:attr( &amp;#039;title&amp;#039;, &amp;#039;Langue : &amp;#039; .. nomLangue )&lt;br /&gt;
				:wikitext( code )&lt;br /&gt;
				:done()&lt;br /&gt;
			:wikitext( &amp;#039;)&amp;#039; )&lt;br /&gt;
			:done()&lt;br /&gt;
		:wikitext( texte )&lt;br /&gt;
	&lt;br /&gt;
	return tostring( html )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Voir Modèle:Mul&lt;br /&gt;
-- Paramètres : codes IETF ou noms de langue, en nombre indéfini (string ou nil uniquement).&lt;br /&gt;
function Langue.indicationMultilingue( frame )&lt;br /&gt;
	local args = (frame.getParent and frame:getParent().args) or frame&lt;br /&gt;
	local listeNom = { }&lt;br /&gt;
	local listeCode = { }&lt;br /&gt;
	local tabLangue&lt;br /&gt;
	-- Valeur par défaut du premier paramètre = &amp;#039;mul&amp;#039;.&lt;br /&gt;
	local code = mw.text.trim( args[1] or &amp;#039;&amp;#039; )&lt;br /&gt;
	if code == &amp;#039;&amp;#039; then&lt;br /&gt;
		code = &amp;#039;mul&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if not args[2] and not dataLangue[ mw.ustring.lower( code ) ] then&lt;br /&gt;
		local split = mw.text.split( code, &amp;#039;[+,;:/ .]+&amp;#039; )&lt;br /&gt;
		if #split &amp;gt; 1 then &lt;br /&gt;
			return Langue.indicationMultilingue( split )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- Ajout des noms et codes de langue de chaque paramètre dans listeNom et ListeCode.&lt;br /&gt;
	local i = 1&lt;br /&gt;
	repeat&lt;br /&gt;
		code = mw.ustring.lower( code )&lt;br /&gt;
		local tabLangue = dataLangue[ code ]&lt;br /&gt;
		if not tabLangue then&lt;br /&gt;
			code = mw.text.split( code, &amp;#039;-&amp;#039; )[1]&lt;br /&gt;
			tabLangue = dataLangue[ code ]&lt;br /&gt;
		end&lt;br /&gt;
		if type( tabLangue ) == &amp;#039;table&amp;#039; then&lt;br /&gt;
			table.insert( listeNom, tabLangue.nom )&lt;br /&gt;
			table.insert( listeCode, tabLangue.code )&lt;br /&gt;
		elseif success then&lt;br /&gt;
			table.insert( listeNom, &amp;#039;???&amp;#039; )&lt;br /&gt;
			local erreur = &amp;#039; &amp;#039; .. string.format( langErrorMess, code )&lt;br /&gt;
			table.insert( listeCode, erreur )&lt;br /&gt;
		else&lt;br /&gt;
			table.insert( listeNom, &amp;#039;??? (erreur dans &amp;#039; .. moduleData .. &amp;#039;)&amp;#039; )&lt;br /&gt;
			table.insert( listeCode, code )&lt;br /&gt;
		end&lt;br /&gt;
		i = i + 1&lt;br /&gt;
		code = mw.text.trim( args[i] or &amp;#039;&amp;#039; )&lt;br /&gt;
	until code == &amp;#039;&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	-- Préparation et renvoi du texte.&lt;br /&gt;
	local n = #listeCode&lt;br /&gt;
	local pluriel = &amp;#039;&amp;#039;&lt;br /&gt;
	if #listeCode == 0 then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	elseif n &amp;gt; 1 then&lt;br /&gt;
		pluriel = &amp;#039;s&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local html = mw.html.create( &amp;#039;span&amp;#039; )&lt;br /&gt;
	html:addClass( &amp;#039;indicateur-langue&amp;#039; )&lt;br /&gt;
		:wikitext( &amp;#039;(&amp;#039; )&lt;br /&gt;
		:tag( &amp;#039;abbr&amp;#039; )&lt;br /&gt;
			:addClass( &amp;#039;abbr&amp;#039; )&lt;br /&gt;
			:attr( &amp;#039;title&amp;#039;, &amp;#039;Langue&amp;#039; .. pluriel .. &amp;#039; : &amp;#039; .. mw.text.listToText( listeNom ) )&lt;br /&gt;
			:wikitext( table.concat( listeCode, &amp;#039;+&amp;#039; ) )&lt;br /&gt;
			:done()&lt;br /&gt;
		:wikitext( &amp;#039;)&amp;#039; )&lt;br /&gt;
		:done()&lt;br /&gt;
		&lt;br /&gt;
	return tostring( html )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Voir Modèle:Langue avec nom&lt;br /&gt;
-- Paramètres :&lt;br /&gt;
--    1 : code IETF de langue ;&lt;br /&gt;
--    texte ou 2 : texte dans cette langue ;&lt;br /&gt;
--    trans : translittération du texte ;&lt;br /&gt;
--    dir : direction de la langue.&lt;br /&gt;
function Langue.langueAvecNom( frame )&lt;br /&gt;
	local args = ( frame.getParent and frame:getParent().args ) or frame&lt;br /&gt;
	local code = mw.ustring.lower( mw.text.trim( args [1] or &amp;#039;&amp;#039;) )&lt;br /&gt;
	local texte = args.texte or args[2] or &amp;#039;&amp;#039;&lt;br /&gt;
	local trans = args.trans&lt;br /&gt;
	local dir = args.dir&lt;br /&gt;
	local wikiText = &amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	-- Détection de la direction du texte.&lt;br /&gt;
	if code == &amp;#039;ltr&amp;#039; or code == &amp;#039;rtl&amp;#039; then&lt;br /&gt;
		dir = code&lt;br /&gt;
		code = mw.ustring.lower( mw.text.trim( args[2] ) )&lt;br /&gt;
		texte = args[3] or &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Définition du nom de la langue en français.&lt;br /&gt;
	local nom = Langue.nomLangue{ code }&lt;br /&gt;
&lt;br /&gt;
	if texte ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		texte = &amp;#039;&amp;amp;nbsp;&amp;#039; .. Langue.lang{ code, dir = dir, texte = texte, trans = trans }&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	wikiText = nom .. &amp;#039; :&amp;#039; .. texte&lt;br /&gt;
&lt;br /&gt;
	return wikiText&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
-- latinOnly détermine si la chaine fournie contien uniquement des caractère latin (étendu, unicode &amp;lt; 880)&lt;br /&gt;
function Langue.nonLatin( frame )&lt;br /&gt;
	local texte = premierParametre( frame )&lt;br /&gt;
	for codepoint in mw.ustring.gcodepoint( texte ) do&lt;br /&gt;
		if codepoint &amp;gt; 879 and not (                  --  &amp;gt; 036F&lt;br /&gt;
			codepoint &amp;gt; 7423 and codepoint &amp;lt; 7936 or  -- suppléments phonétique, diacritiques et latin  (1D00 à 1EFF)&lt;br /&gt;
			codepoint &amp;gt; 8191 and codepoint &amp;lt; 11392 or -- espace, indices, monaies et symboles divers (2000 à 2C7F)&lt;br /&gt;
			codepoint &amp;gt; 42783 and codepoint &amp;lt; 43008   -- latin étendu D  (A720 à A7FF)&lt;br /&gt;
		) then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- erreurModuleData affiche un message d&amp;#039;erreur si le Module:Langue/Data n&amp;#039;a pas été chargé correctement,&lt;br /&gt;
-- pour la page de discussion de la base de données et ceux qui veulent surveiller cette page.&lt;br /&gt;
function Langue.erreurModuleData()&lt;br /&gt;
	if success == false then&lt;br /&gt;
		local message = [[&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;Le chargement du module Langue/Data génère une erreur : &amp;lt;/strong&amp;gt; &amp;lt;br&amp;gt;%s &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;Cette erreur doit être corrigée au plus vite car des milliers de pages ne s&amp;#039;affichent pas correctement.&amp;lt;/span&amp;gt;&lt;br /&gt;
]]&lt;br /&gt;
		return string.format( message, resultat )&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- tableauLangues génère un tableau triable de la liste des langues disponible dans Module:langue/Data.&lt;br /&gt;
function Langue.tableauLangues()&lt;br /&gt;
	if type( dataLangue ) ~= &amp;#039;table&amp;#039; then&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local tableau = { }&lt;br /&gt;
	local entete = [[{| class=&amp;quot;wikitable alternance sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!scope=col|Alias&lt;br /&gt;
!scope=col|Code IETF&lt;br /&gt;
!scope=col|Nom principal&lt;br /&gt;
!scope=col|Page (si différente du nom)&lt;br /&gt;
!scope=col|RTL&lt;br /&gt;
!scope=col|Invalide]]&lt;br /&gt;
&lt;br /&gt;
	local ligneTab, ligneSrt&lt;br /&gt;
	for i, v in pairs( dataLangue ) do&lt;br /&gt;
		if v.code then&lt;br /&gt;
			ligneTab = {&lt;br /&gt;
				i,&lt;br /&gt;
				v.code,&lt;br /&gt;
				v.nom,&lt;br /&gt;
				v.page or &amp;#039;&amp;#039;,&lt;br /&gt;
				v.rtl and &amp;#039;[[Image:Yes check.svg|15px|oui|lien=]]&amp;#039; or &amp;#039;&amp;#039;,&lt;br /&gt;
				v.invalide and &amp;#039;[[Image:Yes check.svg|15px|oui|lien=]]&amp;#039; or &amp;#039;&amp;#039;,&lt;br /&gt;
			}&lt;br /&gt;
			ligneSrt = table.concat( ligneTab, &amp;#039;\n|&amp;#039; )&lt;br /&gt;
			table.insert( tableau, ligneSrt )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort( tableau )&lt;br /&gt;
	table.insert( tableau, 1, entete )&lt;br /&gt;
	table.insert( tableau, &amp;#039;}&amp;#039; )&lt;br /&gt;
	&lt;br /&gt;
	return table.concat( tableau, &amp;#039;\n|-\n|&amp;#039; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- listeCodeAlias génère une liste ; les langues sont de la forme : * code : alias1, alias2&lt;br /&gt;
function Langue.listeCodeAlias ()&lt;br /&gt;
	if type( dataLangue ) ~= &amp;#039;table&amp;#039; then&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	local languesTab, listeCodesAlias = { }, { }&lt;br /&gt;
	local code, alias, codeAlias&lt;br /&gt;
	for i, v in pairs( dataLangue ) do&lt;br /&gt;
		-- on construit un table avec pour indices les codes de langue, et pour valeurs une table avec la liste des alias&lt;br /&gt;
		code = v.code&lt;br /&gt;
		if code and not v.invalide then&lt;br /&gt;
			languesTab[code] = languesTab[code] or { }&lt;br /&gt;
			if i ~= mw.ustring.lower( code ) then&lt;br /&gt;
				table.insert( languesTab[code], i )&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for i, v in pairs( languesTab ) do&lt;br /&gt;
		-- transformation en un table séquence, avec pour valeur une chaine correspondant à une ligne de la liste&lt;br /&gt;
		alias = table.concat( v, &amp;#039;, &amp;#039; )&lt;br /&gt;
		if alias == &amp;#039;&amp;#039; then&lt;br /&gt;
			codeAlias = &amp;#039;* &amp;lt;code&amp;gt;&amp;#039; .. i .. &amp;#039;&amp;lt;/code&amp;gt;&amp;#039;&lt;br /&gt;
		else&lt;br /&gt;
			codeAlias = &amp;#039;* &amp;lt;code&amp;gt;&amp;#039; .. i .. &amp;#039;&amp;lt;/code&amp;gt; : &amp;#039; .. alias&lt;br /&gt;
		end&lt;br /&gt;
		table.insert( listeCodesAlias, codeAlias )&lt;br /&gt;
	end&lt;br /&gt;
	table.sort( listeCodesAlias )&lt;br /&gt;
	&lt;br /&gt;
	return table.concat( listeCodesAlias, &amp;#039;\n&amp;#039; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- listeAliasCode génère une liste ; les langues sont de la forme :  * alias : code&lt;br /&gt;
function Langue.listeAliasCode ()&lt;br /&gt;
	if type( dataLangue ) ~= &amp;#039;table&amp;#039; then&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	local languesTab = { }&lt;br /&gt;
	local code&lt;br /&gt;
	for i, v in pairs( dataLangue ) do&lt;br /&gt;
		-- on construit un table avec pour indices les codes de langue, et pour valeurs une table avec la liste des alias&lt;br /&gt;
		code = v.code&lt;br /&gt;
		if code and i ~= code and not v.invalide then&lt;br /&gt;
			table.insert( languesTab, &amp;#039;* &amp;#039; .. i .. &amp;#039; = &amp;#039; .. code )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort( languesTab )&lt;br /&gt;
	&lt;br /&gt;
	return table.concat( languesTab, &amp;#039;\n&amp;#039; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return Langue&lt;/div&gt;</summary>
		<author><name>LIMAFOX76</name></author>
	</entry>
</feed>