<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://wicri-demo.istex.fr/Wicri/Eau/fr/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://wicri-demo.istex.fr/Wicri/Eau/fr/index.php?action=history&amp;feed=atom&amp;title=Module%3ALangue"/>
	<link rel="alternate" type="text/html" href="https://wicri-demo.istex.fr/Wicri/Eau/fr/index.php?title=Module:Langue&amp;action=history"/>
	<updated>2026-04-19T07:59:48Z</updated>
	<subtitle>Historique des versions pour cette page sur le wiki</subtitle>
	<generator>MediaWiki 1.31.10</generator>
	<entry>
		<id>https://wicri-demo.istex.fr/Wicri/Eau/fr/index.php?title=Module:Langue&amp;diff=163&amp;oldid=prev</id>
		<title>imported&gt;Jacques Ducloy : 1 révision importée</title>
		<link rel="alternate" type="text/html" href="https://wicri-demo.istex.fr/Wicri/Eau/fr/index.php?title=Module:Langue&amp;diff=163&amp;oldid=prev"/>
		<updated>2020-12-28T09:53:01Z</updated>

		<summary type="html">&lt;p&gt;1 révision importée&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;fr&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Version précédente&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Version du 28 décembre 2020 à 09:53&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;fr&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(Aucune différence)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>imported&gt;Jacques Ducloy</name></author>
		
	</entry>
	<entry>
		<id>https://wicri-demo.istex.fr/Wicri/Eau/fr/index.php?title=Module:Langue&amp;diff=2245&amp;oldid=prev</id>
		<title>imported&gt;Jacques Ducloy : 1 révision importée</title>
		<link rel="alternate" type="text/html" href="https://wicri-demo.istex.fr/Wicri/Eau/fr/index.php?title=Module:Langue&amp;diff=2245&amp;oldid=prev"/>
		<updated>2017-07-05T09:05:05Z</updated>

		<summary type="html">&lt;p&gt;1 révision importée&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'erreur.&lt;br /&gt;
local dataLangue&lt;br /&gt;
local moduleData = 'Module:Langue/Data'&lt;br /&gt;
local langErrorMess = '&amp;lt;span class=error&amp;gt;langue non reconnue : %s&amp;lt;/span&amp;gt;'&lt;br /&gt;
local success, resultat = pcall (mw.loadData, moduleData )&lt;br /&gt;
success = success and type( resultat.en ) == 'table'&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 = 'en', nom = 'anglais' },&lt;br /&gt;
		fr = { code = 'fr', nom = 'français' },&lt;br /&gt;
		de = { code = 'de', nom = 'allemand' },&lt;br /&gt;
		es = { code = 'es', nom = 'espagnol' },&lt;br /&gt;
		it = { code = 'it', nom = 'italien'  },&lt;br /&gt;
		la = { code = 'la', nom = 'latin'    },&lt;br /&gt;
		['rtl script'] = { Arab = true }&lt;br /&gt;
	}&lt;br /&gt;
	dataLangue.anglais = dataLangue.en&lt;br /&gt;
	dataLangue['français'] = 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'intérieur d'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 ) == 'table' 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 ) == 'string' then&lt;br /&gt;
		arg = frame&lt;br /&gt;
	end&lt;br /&gt;
	if type( arg ) ~= 'string' 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'est pas reconnu, retourne nil.&lt;br /&gt;
function Langue.determinationCode( langue )&lt;br /&gt;
	if type( langue ) == 'string' and langue ~= '' then&lt;br /&gt;
		local tabCode = mw.text.split( langue, '-' )&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, '-' ) ) or arg or ''&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, '-' ) ) or ''&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 ) ~= 'string' or arg == '' then&lt;br /&gt;
		return 'ltr'&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[ 'rtl script' ] then&lt;br /&gt;
			-- il y a un subcode d'écritrure, c'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[ 'rtl script' ][ codeScript ] then&lt;br /&gt;
				return 'rtl'&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			-- il n'y a pas de sub-code d'é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 'rtl'&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- la langue n'est pas écrite de droite à gauche, donc ltr.&lt;br /&gt;
	return 'ltr'&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 ) ~= 'string' or arg == '' then&lt;br /&gt;
		return '&amp;lt;span class=error&amp;gt;langue non précisée&amp;lt;/span&amp;gt;'&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, '^(%a-)%-' ) ]&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;lt;span title=&amp;quot;erreur dans ' .. moduleData .. '&amp;quot;&amp;gt;' .. arg .. '&amp;lt;/span&amp;gt;'&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if type( tabLangue.page ) == 'string' then&lt;br /&gt;
		if tabLangue.page ~= '' then&lt;br /&gt;
			return '[[' .. tabLangue.page .. '|' .. tabLangue.nom .. ']]'&lt;br /&gt;
		else&lt;br /&gt;
			return tabLangue.nom&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return '[[' .. tabLangue.nom .. ']]'&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 '' ) )&lt;br /&gt;
	local texte = args.texte or ''&lt;br /&gt;
	if texte == '' then&lt;br /&gt;
		texte = args[2] or ''&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 == 'ltr' or code == 'rtl' then&lt;br /&gt;
		dir = code&lt;br /&gt;
		code = mw.ustring.lower( mw.text.trim( args[2] ) or '' )&lt;br /&gt;
		texte = args[3] or ''&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, '-' )&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'écriture (len = 4) on applique sa direction&lt;br /&gt;
		if codeScript and  string.len( codeScript ) == 4 and dataLangue[ 'rtl script' ] then&lt;br /&gt;
			-- formatage type Latn correspondant au fromat dans dataLangue[ 'rtl script' ]&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[ 'rtl script' ][ 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 ~= 'ltr' and dir ~= 'rtl' then&lt;br /&gt;
		dir = ( tabLangue and tabLangue.rtl and 'rtl' )&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 ~= '' then&lt;br /&gt;
		trans = trans:gsub( &amp;quot;^''([^'].*[^'])''$&amp;quot;, &amp;quot;%1&amp;quot; )&lt;br /&gt;
		htmlTrans:wikitext( &amp;quot; (''&amp;quot; )&lt;br /&gt;
				:tag( 'span' )&lt;br /&gt;
					:addClass( 'transcription lang-' .. code )&lt;br /&gt;
					:attr( 'lang', code .. '-Latn' )&lt;br /&gt;
					:attr( 'dir', 'ltr' )&lt;br /&gt;
					:wikitext( trans )&lt;br /&gt;
					:done()&lt;br /&gt;
				:wikitext( &amp;quot;'')&amp;quot; )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Compilation du texte à retourner.&lt;br /&gt;
	local html = mw.html.create( '' )&lt;br /&gt;
	if code == '' then&lt;br /&gt;
		html:wikitext( texte )&lt;br /&gt;
	else&lt;br /&gt;
		html:tag( 'span' )&lt;br /&gt;
				:addClass( 'lang-' .. 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 ) ~= 'table' 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 == '' then&lt;br /&gt;
				codeArg = ' ' 	-- sinon la catégorie n'est pas wikifiée&lt;br /&gt;
			end&lt;br /&gt;
			html:wikitext( '[[Catégorie:Page avec code de langue invalide]] ' )&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 ''&lt;br /&gt;
	local code = args.langue or mw.text.trim( args[2] or '' )&lt;br /&gt;
	local texte = args.texte&lt;br /&gt;
	local dir = args.dir&lt;br /&gt;
	local wikiText = ''&lt;br /&gt;
	-- Cas où le premier et/ou le deuxième paramètre est vide.&lt;br /&gt;
	if code .. nomLangue == '' then&lt;br /&gt;
		return texte&lt;br /&gt;
	elseif nomLangue == '' then&lt;br /&gt;
		nomLangue = dataLangue[ mw.ustring.lower( code ) ]&lt;br /&gt;
		nomLangue = (nomLangue and nomLangue.nom or '???')&lt;br /&gt;
	elseif code == '' then&lt;br /&gt;
		code = dataLangue[ nomLangue ]&lt;br /&gt;
		code = ( code and code.code or '' )&lt;br /&gt;
		if code == '' 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 ~= '' then&lt;br /&gt;
		texte = '&amp;amp;nbsp;' .. Langue.lang{ code, dir = dir, texte = texte }&lt;br /&gt;
	else&lt;br /&gt;
		texte = ''&lt;br /&gt;
	end&lt;br /&gt;
	-- Compilation de l'indicateur de langue et du texte.&lt;br /&gt;
	local html = mw.html.create()&lt;br /&gt;
	html:tag( 'span' )&lt;br /&gt;
			:addClass( 'indicateur-langue' )&lt;br /&gt;
			:wikitext( '(' )&lt;br /&gt;
			:tag( 'abbr' )&lt;br /&gt;
				:addClass( 'abbr' )&lt;br /&gt;
				:attr( 'title', 'Langue : ' .. nomLangue )&lt;br /&gt;
				:wikitext( code )&lt;br /&gt;
				:done()&lt;br /&gt;
			:wikitext( ')' )&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 = 'mul'.&lt;br /&gt;
	local code = mw.text.trim( args[1] or '' )&lt;br /&gt;
	if code == '' then&lt;br /&gt;
		code = 'mul'&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, '[+,;:/ .]+' )&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, '-' )[1]&lt;br /&gt;
			tabLangue = dataLangue[ code ]&lt;br /&gt;
		end&lt;br /&gt;
		if type( tabLangue ) == 'table' 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, '???' )&lt;br /&gt;
			local erreur = ' ' .. string.format( langErrorMess, code )&lt;br /&gt;
			table.insert( listeCode, erreur )&lt;br /&gt;
		else&lt;br /&gt;
			table.insert( listeNom, '??? (erreur dans ' .. moduleData .. ')' )&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 '' )&lt;br /&gt;
	until code == ''&lt;br /&gt;
	&lt;br /&gt;
	-- Préparation et renvoi du texte.&lt;br /&gt;
	local n = #listeCode&lt;br /&gt;
	local pluriel = ''&lt;br /&gt;
	if #listeCode == 0 then&lt;br /&gt;
		return ''&lt;br /&gt;
	elseif n &amp;gt; 1 then&lt;br /&gt;
		pluriel = 's'&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local html = mw.html.create( 'span' )&lt;br /&gt;
	html:addClass( 'indicateur-langue' )&lt;br /&gt;
		:wikitext( '(' )&lt;br /&gt;
		:tag( 'abbr' )&lt;br /&gt;
			:addClass( 'abbr' )&lt;br /&gt;
			:attr( 'title', 'Langue' .. pluriel .. ' : ' .. mw.text.listToText( listeNom ) )&lt;br /&gt;
			:wikitext( table.concat( listeCode, '+' ) )&lt;br /&gt;
			:done()&lt;br /&gt;
		:wikitext( ')' )&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 '') )&lt;br /&gt;
	local texte = args.texte or args[2] or ''&lt;br /&gt;
	local trans = args.trans&lt;br /&gt;
	local dir = args.dir&lt;br /&gt;
	local wikiText = ''&lt;br /&gt;
&lt;br /&gt;
	-- Détection de la direction du texte.&lt;br /&gt;
	if code == 'ltr' or code == 'rtl' 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 ''&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 ~= '' then&lt;br /&gt;
		texte = '&amp;amp;nbsp;' .. Langue.lang{ code, dir = dir, texte = texte, trans = trans }&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	wikiText = nom .. ' :' .. 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'erreur si le Module:Langue/Data n'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'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 ) ~= 'table' 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 '',&lt;br /&gt;
				v.rtl and '[[Image:Yes check.svg|15px|oui|lien=]]' or '',&lt;br /&gt;
				v.invalide and '[[Image:Yes check.svg|15px|oui|lien=]]' or '',&lt;br /&gt;
			}&lt;br /&gt;
			ligneSrt = table.concat( ligneTab, '\n|' )&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, '}' )&lt;br /&gt;
	&lt;br /&gt;
	return table.concat( tableau, '\n|-\n|' )&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 ) ~= 'table' 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, ', ' )&lt;br /&gt;
		if alias == '' then&lt;br /&gt;
			codeAlias = '* &amp;lt;code&amp;gt;' .. i .. '&amp;lt;/code&amp;gt;'&lt;br /&gt;
		else&lt;br /&gt;
			codeAlias = '* &amp;lt;code&amp;gt;' .. i .. '&amp;lt;/code&amp;gt; : ' .. 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, '\n' )&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 ) ~= 'table' 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, '* ' .. i .. ' = ' .. 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, '\n' )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return Langue&lt;/div&gt;</summary>
		<author><name>imported&gt;Jacques Ducloy</name></author>
		
	</entry>
</feed>