Dokumentado Dokumentado


Ŝablona programado Diskutoj Lua Testoj Subpaĝoj
Modulo Esperanto English

Modulo: Dokumentado


Se vi havas demandon pri ĉi tiu Lua-modulo, tiam vi povas demandi en la diskutejo pri Lua-moduloj. La Intervikiaj ligiloj estu metataj al Vikidatumoj. (Vidu Helpopaĝon pri tio.)
-- modulo lingvonomo -- 2024-08-27
-- main functions:
-- language -- creates a link to a language article and an adverb like text
-- flag -- creates a flag and a link to a language article and an adverb like text
-- lang - creates a link to a language article and an adverb like text followed by a parsed {{Lang}} template.
-- exist -- returs true, if a code is a language code, else false
-- list -- returns a table with the ordered language codes and their rilated names in esperanto
--		   (partly translated only :-()

-- the functions "language" and "flag" have one needed parameter only
-- all functons have the optional parameters:
-- "koloro" (color), that defines the color of the text
-- "fono" (background), that defines the background color of the text
-- "grando" (size), that defines the size of the text
-- "pezo" (weight), that defines the font-weight

-- error handling:
-- factory
-- message
-- analyze
-- message2
-- analyze2

-- helping function:
-- getLanguages
-- getAccusative
-- getFlags
-- template
-- image
-- testweight

local messagePrefix = "lua-module-Lingvonomo-"
local l10nDef = {}
l10nDef[ "en" ] = {
	noLanguage	= "Error in language - in the function",
	emptyLanguage = "Language is empty - in the function",
	noText		= "Error in the text - in the function",
	emptyText	 = "Text is empty - in the function",
	noFlag		= "The page [[Modulo:Lingvonomo/listo/flagoj]] doesnt have a suitable flag."
}
l10nDef[ "de" ] = {
	noLanguage	= "Fehler bei Sprache - in der Funktion",
	emptyLanguage = "Sprache ist leer - in der Funktion",
	noText		= "Fehler im Text - in der Funktion",
	emptyText	 = "Text ist leer - in der Funktion",
	noFlag		= "Auf der Seite [[Modulo:Lingvonomo/listo/flagoj]] gibt es keine geeignete Fahne."
}
l10nDef[ "eo" ] = {
	noLanguage	= "Eraro en la lingvo - en la funkcio",
	emptyLanguage = "Lingvo estas malplena - en la funkcio",
	noText		= "Eraro en la teksto - en la funkcio",
	emptyText	 = "Teksto estas malplena - en la funkcio",
	noFlag		= "La paĝo [[Modulo:Lingvonomo/listo/flagoj]] ne enhavas taŭgan flagon."
}

-- error handling
local function factory( say )
	-- Retrieve localized message string in content language
	-- Precondition:
	--	 say  -- string; message ID
	-- Postcondition:
	--	 Return some message string
	-- Uses:
	--	 >  messagePrefix
	--	 >  l10nDef
	--	 mw.language.getContentLanguage()
	--	 mw.message.new()
	local c = mw.language.getContentLanguage():getCode()
	local m = mw.message.new( messagePrefix .. say )
	local r = false
	if m:isBlank() then
		local l10n = l10nDef[ c ]
		if not l10n then
			l10n = l10nDef[ "en" ]
		end
		r = l10n[ say ]
	else
		m:inLanguage( c )
		r = m:plain()
	end
	if not r then
		r = "(((".. say .. ")))"
	end
	return r
end -- factory()

-- for one needed parameter only
local function message (first, f)
	-- first - the first required parameter in the main function is wrong
	-- f - in which function it occurs
	 local r = ""
	 if (first ~="") then
		 r = factory (first) .. ": " .. f .. "()"
	 end

	-- error (r, 0)
	 r = "<span class='error'>" .. r .. "</span>"
	 return r
end -- message ()

local function analyze (first, f)
	-- first - the first required parameter has to be analyzed
	-- f - in which function it occurs
	-- r - message text
		local r =""
		if (first ==nil) or (first =="") then
		   local param1 =""
		   local r =""
		   if (first == nil) then
			  param1= "noLanguage"
		   end
		   if (first=="") then
			  param1= "emptyLanguage"
		   end

		   r=message (param1, f)
		   return r
		end

	return r
end  -- analyze ()

-- for two needed parameters
local function message2 (first, second, f)
	-- first - the first required parameter in the main function is wrong
	-- second - the second required parameter in the main function is wrong
	-- f - in which function it occurs
	 local r = ""
	 if (first ~="") then
		 r = factory (first) .. ": " .. f .. "()"
	 end
	 if (second ~="") then
		 if (r ~="") then
		 r = r .. "<br />" .. factory (second) .. ": " .. f .. "()"
		 else r = factory (second) .. ": " .. f .. "()"
		 end
	 end
	-- error (r, 0)
	 r = "<span class='error'>" .. r .. "</span>"
	 return r
end -- message2 ()

local function analyze2 (first, second, f)
	-- first - the first required parameter has to be analyzed
	-- second - the second required parameter has to be analyzed
	-- f - in which function it occurs
	-- r - message text
		local r =""
		if (first ==nil) or (first =="") or (second ==nil) or (second=="") then
		   local param1 =""
		   local param2 =""
		   local r =""
		   if (first == nil) then
			  param1= "noLanguage"
		   end
		   if (first=="") then
			  param1= "emptyLanguage"
		   end
		   if (second == nil)  then
			  param2 ="noText"
		   end
		   if (second=="") then
			  param2 ="emptyText"
		   end
		   r=message2 (param1, param2, f)
		   return r
		end
--		local lenfirst=mw.ustring.len(first)
  --	  local lensecond=mw.ustring.len(second)
		-- if the first (language) is longer than the second (text), then it returns a text, which
		-- in the main function exchanges the values of the variables
--		if (lenfirst>lensecond) then
--			r="change"
--			return r
--		end
	return r
end  -- analyze2 ()

-- gets the adverb and name according to a language code using mw.language.fetchLanguageName
local function getLanguages(s)
	-- Gets an adverb and name using the Lua function mw.language.fetchLanguageName.
	local r1, r2
	if s == "ady" then
		r1, r2 = "adigee", "adigea lingvo"
	elseif s == "aib" then
		r1, r2 = "ejnue", "ejnua lingvo"
	elseif s == "ale" then
		r1, r2 = "aleute", "aleuta lingvo"
	elseif s == "an" then
		r1, r2 = "aragone", "aragona lingvo"
	elseif s == "ang" then
--		r1, r2 = "malnov-angle", "malnov-angla lingvo"		
		r1, r2 = "anglosakse", "anglosaksa lingvo"
	elseif s == "arc" then
		r1, r2 = "aramee", "aramea lingvo"
	elseif s == "ast" then
		r1, r2 = "asture", "astura lingvo"
	elseif s == "av" then
		r1, r2 = "avare", "avara lingvo"
	elseif s == "bal" then
		r1, r2 = "baluĉe", "baluĉa lingvo"
	elseif s == "bar" then
		r1, r2 = "bavare", "bavara lingvo"
	-- ie en la Vikio estas fuŝa ĉikaze maltaŭga traduko
	elseif s == "be-tarask" then
		r1, r2 = "beloruse (Taraŝkevica)", "belorusa lingvo (Taraŝkevica)"
	elseif s == "bi" then
		r1, r2 = "bislame", "bislama lingvo"		
	elseif s == "bs" then
		r1, r2 = "bosne", "bosna lingvo"
	elseif s == "bua" then
		r1, r2 = "burjate", "burjata lingvo"		
	elseif s == "my" then
		r1,r2 = "birme", "birma lingvo"
	elseif s == "ce" then
		r1, r2 = "ĉeĉene", "ĉeĉena lingvo"		
	elseif s == "ceb" then
		r1, r2 = "cebue", "cebuo"
	elseif s == "ch" then
		r1, r2 = "ĉamore", "ĉamora lingvo"
	elseif s == "chg" then
		r1, r2 = "ĉagataje", "ĉagataja lingvo"
	elseif s == "chm" then
		r1, r2 = "marie", "maria lingvo"		
	elseif s == "ckt" then
		r1, r2 = "ĉukĉe", "ĉukĉa lingvo"
	elseif s == "cnr" then
		r1, r2 = "montenegre", "montenegra lingvo"	
	elseif s == "cop" then
		r1, r2 = "kopte", "kopta lingvo"		
	elseif s == "crh" then
		r1, r2 = "krime-tatare", "krime-tatara lingvo"
	elseif s == "csb" then
		r1, r2 = "kaŝube", "kaŝuba lingvo"
	elseif s == "cv" then
		r1, r2 = "ĉuvaŝe", "ĉuvaŝa lingvo"
	elseif s == "din" then
		r1, r2 = "dinke", "dinka lingvo"		
	elseif s == "dz" then
		r1, r2 = "dzonke", "dzonka lingvo"
	elseif s == "egy" then
		r1, r2 = "egipte", "egipta lingvo"
	elseif s == "ell" then
		r1, r2 = "novgreke", "novgreka lingvo"
	elseif s == "eo" then
		r1, r2 = "esperante", "Esperanto"
	elseif s == "ett" then
		r1, r2 = "etruske", "etruska lingvo"
	elseif s == "evn" then
		r1, r2 = "evenke", "evenka lingvo"		
	elseif s == "fa" then
		r1, r2 = "perse", "persa lingvo"	
	elseif s == "ff" then
		r1, r2 = "fulane", "fulana lingvo"			
	elseif s == "fit" then
		r1, r2 = "tornival-finne", "tornival-finna lingvo"		
	elseif s == "fon" then
		r1, r2 = "fonue", "fonua lingvo"
	elseif s == "frp" then
		r1, r2 = "arpitane", "arpitana lingvo"		
	elseif s == "frr" then
		r1, r2 = "nordfrise", "nordfrisa lingvo"
	elseif s == "fur" then
		r1, r2 = "friule", "friula lingvo"		
	elseif s == "fy" then
		r1, r2 = "okcidentfrise", "okcidentfrisa lingvo"
	elseif s == "gag" then
		r1, r2 = "gagauze", "gagauza lingvo"		
	elseif s == "gd" then
		r1, r2 = "skotgaele", "skotgaela lingvo"
	elseif s == "gil" then
		r1, r2 = "kiribate", "kiribata lingvo"
	elseif s == "grc" then
		r1, r2 = "antikve-greke", "antikva greka lingvo"
	elseif s == "gsw-FR" or s == "gsw-fr" then
		r1, r2 = "alzace", "alzaca lingvo"		
	elseif s == "gv" then
		r1, r2 = "mankse", "manksa lingvo"
	elseif s == "hi" then
		r1, r2 = "hindie", "hindia lingvo"
	elseif s == "hit" then
		r1, r2 = "hitite", "hitita lingvo"		
	elseif s == "hsb" then
		r1, r2 = "suprasorabe", "suprasoraba lingvo"
	elseif s == "ik" then
		r1, r2 = "inupiake", "inupiaka lingvo"		
	elseif s == "inh" then
		r1, r2 = "inguŝe", "inguŝa lingvo"
	elseif s == "io" then
		r1, r2 = "ide", "ido (lingvo)"
	elseif s == "iu" then
		r1, r2 = "inuktitute", "inuktituta lingvo"		
	elseif s == "jbo" then
		r1, r2 = "loĵbane", "loĵbano"
	elseif s == "kaa" then
		r1, r2 = "karakalpake", "karakalpaka lingvo"
	elseif s == "kab" then
		r1, r2 = "kabile", "kabila lingvo"		
	elseif s == "kbd" then
		r1, r2 = "kabarde", "kabarda lingvo"		
	elseif s == "kg" then
		r1, r2 = "konge", "konga lingvo"
	elseif s == "kjh" then
		r1, r2 = "ĥakase", "ĥakasa lingvo"
	elseif s == "ko-kp" then
		r1, r2 = "nordkoree", "korea lingvo"		
	elseif s == "ko-kr" then
		r1, r2 = "sudkoree", "korea lingvo"	
	elseif s == "krc" then
		r1, r2 = "balkare", "karaĉaja-balkara lingvo"	
	elseif s == "krl" then
		r1, r2 = "karele", "karela lingvo"			
	elseif s == "ksh" then
		r1, r2 = "kolonje", "kolonja lingvo"
	elseif s == "kv" then
		r1, r2 = "komie", "komia lingvo"		
	elseif s == "kw" then
		r1, r2 = "kornvale", "kornvala lingvo"
	elseif s == "kyh" then
		r1, r2 = "karuke", "karuka lingvo"		
	elseif s == "la" then
		r1, r2 = "latine", "Latino"
	elseif s == "lbe" then
		r1, r2 = "lake", "laka lingvo"
	elseif s == "lez" then
		r1, r2 = "lezge", "lezga lingvo"
	elseif s == "lld" then
		r1, r2 = "ladine", "ladina lingvo"
	elseif s == "lmo" then
		r1, r2 = "lombarde", "lombarda lingvo"		
	elseif s == "lua" then
		r1, r2 = "lube", "luba lingvo"
	elseif s == "mdf" then
		r1, r2 = "mokŝe", "mokŝa lingvo"		
	elseif s == "mhr" then
		r1, r2 = "herbej-marie", "herbeja maria lingvo"		
	elseif s == "mic" then
		r1, r2 = "mikmake", "mikmaka lingvo"
	elseif s == "ml" then
		r1, r2 = "malajale", "malajala lingvo"		
	elseif s == "mnc" then
		r1, r2 = "manĉure", "manĉura lingvo"
	elseif s == "mni" then
		r1, r2 = "manipure", "manipura lingvo"
	elseif s == "mos" then
		r1, r2 = "mosie", "mosia lingvo"
	elseif s == "mrj" then
		r1, r2 = "montar-marie", "montara maria lingvo"	
	elseif s == "myv" then
		r1, r2 = "erzje", "erzja lingvo"
	elseif s == "nah" then
		r1, r2 = "naŭatle", "naŭatla lingvo"		
	elseif s == "nb" then
		r1, r2 = "bukmole", "bukmola lingvo"
	elseif s == "non" then
		r1, r2 = "norene", "norena lingvo"
	elseif s == "nr" then
		r1, r2 = "sud-ndebele", "sud-ndebela lingvo"
	elseif s == "nso" then
		r1, r2 = "pede", "peda lingvo"
	elseif s == "os" then
		r1, r2 = "osete", "oseta lingvo"
	elseif s == "ota" then
		r1, r2 = "osmanid-turke", "osmanida turka lingvo"		
	elseif s == "pag" then
		r1, r2 = "pangasine", "pangasina lingvo"
	elseif s == "pap" then
		r1, r2 = "papiamente", "Papiamento"
	elseif s == "pdc" then
		r1, r2 = "pensilvanigermane", "pensilvanigermana dialekto"		
	elseif s == "pi" then
		r1, r2 = "palie", "palia lingvo"
	elseif s == "pms" then
		r1, r2 = "piemonte", "piemonta lingvo"
	elseif s == "ps" then
		r1, r2 = "paŝtune", "paŝtuna lingvo"
	elseif s == "pt-br" then
		r1, r2 = "brazilportugale", "Brazila portugala"		
	-- eble korektenda post alinomado	
	elseif s == "rom"	then 
		r1, r2 = "cigane", "cigana lingvo"
	elseif s == "rue" then
		r1, r2 = "rusine", "rusina lingvo"		
	elseif s == "rup" then
		r1, r2 = "arumane", "arumana lingvo"
	elseif s == "sa" or s == "san" then
		r1, r2 = "sanskrite", "sanskrito"
	elseif s == "sah" then
		r1, r2 = "jakute", "jakuta lingvo"
	elseif s == "sc" then
		r1, r2 = "sarde", "sarda lingvo"		
	elseif s == "scn" then
		r1, r2 = "sicilie", "sicilia lingvo"		
	elseif s == "sco" then
		r1, r2 = "skote", "skota lingvo"
	elseif s == "se" then
		r1, r2 = "nord-samee", "nord-samea lingvo"
	elseif s == "sli" then
		r1, r2 = "silezia-germane", "silezia-germana lingvo"		
	elseif s == "slo" then
		r1, r2 = "interslave", "interslava lingvo"
	elseif s == "sju" then
		r1, r2 = "ume-samee", "ume-samea lingvo"		
	elseif s == "sma" then
		r1, r2 = "sud-samee", "sud-samea lingvo"			
	elseif s == "smj" then
		r1, r2 = "lule-samee", "lule-samea lingvo"			
	elseif s == "smn" then
		r1, r2 = "anar-samee", "anar-samea lingvo"		
	elseif s == "sms" then
		r1, r2 = "skolt-samee", "skolt-samea lingvo"
	elseif s == "sqt" then
		r1, r2 = "sokotrie", "sokotria lingvo"		
	elseif s == "stq" then
		r1, r2 = "saterfrise", "saterfrisa lingvo"
	elseif s == "sty" then
		r1, r2 = "siberitatare", "siberitatara lingvo"		
	elseif s == "sux" then
		r1, r2 = "sumere", "sumera lingvo"		
	elseif s == "sw" then
		r1, r2 = "svahile", "svahila lingvo"
	elseif s == "szl" then
		r1, r2 = "silezia-pole", "silezia-pola lingvo"
	elseif s == "tet" then
		r1, r2 = "tetune", "tetuna lingvo"
	elseif s == "tlh" then
		r1, r2 = "klingone", "klingona lingvo"
	elseif s == "tli" then
		r1, r2 = "tlingite", "tlingita lingvo"	
	elseif s == "tok" then
		r1, r2 = "tokipone", "Tokipono"
	elseif s == "tpi" then
		r1, r2 = "tokpisine", "Tokpisino"
	elseif s == "ty" then
		r1, r2 = "tahitie", "tahitia lingvo"		
	elseif s == "tyv" then
		r1, r2 = "tuve", "tuva lingvo"
	elseif s == "tzl" then
		r1, r2 = "talose", "talosa lingvo"
	elseif s == "uby" then
		r1, r2 = "ubiĥe", "ubiĥa lingvo"		
	elseif s == "udm" then
		r1, r2 = "udmurte", "udmurta lingvo"
	elseif s == "ur" then
		r1, r2 = "urdue", "Urduo"
	elseif s == "vec" then
		r1, r2 = "venecie", "venecia lingvo"		
	elseif s == "vo" then
		r1, r2 = "volapuke", "Volapuko"
	elseif s == "vot" then
		r1, r2 = "vote", "vota lingvo"		
	elseif s == "wa" then
		r1, r2 = "valone", "valona lingvo"
	elseif s == "wen" then
		r1, r2 = "sorabe", "soraba lingvo"		
	elseif s == "xal" then
		r1, r2 = "kalmuke", "kalmuka lingvo"
	elseif s == "xcu" then
		r1, r2 = "kurone", "kurona lingvo"		
	elseif s == "xh" then
		r1, r2 = "kose", "kosa lingvo"
	elseif s == "xpu" then
		r1, r2 = "punike", "punika lingvo"			
	elseif s == "xvn" then
		r1, r2 = "vandale", "vandala lingvo"
	elseif s == "yur" then
		r1, r2 = "juroke", "juroka lingvo"		
	else
		r1 = mw.language.fetchLanguageName( s, "eo" )
		if r1 then
			r1 = r1:gsub( "a$", "e")
			r2 = r1:gsub( "e$", "a lingvo" )
		end
	end
	return r1, r2
end

-- gets the accusative and name according to a language code using mw.language.fetchLanguageName
local function getAccusative(s)
	-- Gets an accusative and name using the Lua function mw.language.fetchLanguageName.
	local r1, r2
	if s == "ady" then
		r1, r2 = "adigean lingvon", "adigea lingvo"
	elseif s == "aib" then
		r1, r2 = "ejnuan lingvon", "ejnua lingvo"
	elseif s == "ale" then
		r1, r2 = "aleutan lingvon", "aleuta lingvo"		
	elseif s == "ang" then
--		r1, r2 = "malnov-anglan lingvon", "malnov-angla lingvo"		
		r1, r2 = "anglosaksan lingvon", "anglosaksa lingvo"
	elseif s == "arc" then
		r1, r2 = "aramean lingvon", "aramea lingvo"
	elseif s == "ast" then
		r1, r2 = "asturan lingvon", "astura lingvo"
	elseif s == "av" then
		r1, r2 = "avaran lingvon", "avara lingvo"
	elseif s == "bal" then
		r1, r2 = "baluĉan lingvon", "baluĉa lingvo"
	-- ie en la Vikio estas fuŝa ĉikaze maltaŭga traduko
	elseif s == "bi" then
		r1, r2 = "bislaman lingvon", "bislama lingvo"		
	elseif s == "bar" then
		r1, r2 = "bavaran lingvon", "bavara lingvo"
	elseif s == "be-tarask" then
		r1, r2 = "belorusan lingvon (Taraŝkevican)", "belorusa lingvo (Taraŝkevica)"
	elseif s == "bs" then
		r1, r2 = "bosnan lingvon", "bosna lingvo"
	elseif s == "bua" then
		r1, r2 = "burjatan lingvon", "burjata lingvo"		
	elseif s == "my" then
		r1, r2 = "birman lingvon", "birma lingvo"
	elseif s == "ce" then
		r1, r2 = "ĉeĉenan lingvon", "ĉeĉena lingvo"		
	elseif s == "ceb" then
		r1, r2 = "Cebuon", "cebua lingvo"
	elseif s == "ch" then
		r1, r2 = "ĉamoran lingvon", "ĉamora lingvo"
	elseif s == "chg" then
		r1, r2 = "ĉagatajan lingvon", "ĉagataja lingvo"
	elseif s == "chm" then
		r1, r2 = "marian lingvon", "maria lingvo"		
	elseif s == "ckt" then
		r1, r2 = "ĉukĉan lingvon", "ĉukĉa lingvo"
	elseif s == "cnr" then
		r1, r2 = "montenegran lingvon", "montenegra lingvo"	
	elseif s == "cop" then
		r1, r2 = "koptan lingvon", "kopta lingvo"		
	elseif s == "crh" then
		r1, r2 = "krime-tataran lingvon", "krime-tatara lingvo"
	elseif s == "csb" then
		r1, r2 = "kaŝuban lingvon", "kaŝuba lingvo"
	elseif s == "cv" then
		r1, r2 = "ĉuvaŝan lingvon", "ĉuvaŝa lingvo"
	elseif s == "din" then
		r1, r2 = "dinkan lingvon", "dinka lingvo"		
	elseif s == "dz" then
		r1, r2 = "dzonkan lingvon", "dzonka lingvo"
	elseif s == "egy" then
		r1, r2 = "egiptan lingvon", "egipta lingvo"
	elseif s == "ell" then
		r1, r2 = "novgrekan lingvon", "novgreka lingvo"
	elseif s == "eo" then
		r1, r2 = "Esperanton", "Esperanto"
	elseif s == "ett" then
		r1, r2 = "etruskan lingvon", "etruska lingvo"
	elseif s == "evn" then
		r1, r2 = "evenkan lingvon", "evenka lingvo"		
	elseif s == "ff" then
		r1, r2 = "fulanan lingvon", "fulana lingvo"			
	elseif s == "fit" then
		r1, r2 = "tornival-finnan lingvon", "tornival-finna lingvo"			
	elseif s == "fon" then
		r1, r2 = "fonuan lingvon", "fonua lingvo"
	elseif s == "frp" then
		r1, r2 = "arpitanan lingvon", "arpitana lingvo"		
	elseif s == "frr" then
		r1, r2 = "nordfrisan lingvon", "nordfrisa lingvo"
	elseif s == "fur" then
		r1, r2 = "friulan lingvon", "friula lingvo"		
	elseif s == "fy" then
		r1, r2 = "okcidentfrisan lingvon", "okcidentfrisa lingvo"
	elseif s == "gag" then
		r1, r2 = "gagauzan lingvon", "gagauza lingvo"		
	elseif s == "gd" then
		r1, r2 = "skotgaelan lingvon", "skotgaela lingvo"
	elseif s == "gil" then
		r1, r2 = "kiribatan lingvon", "kiribata lingvo"
	elseif s == "grc" then
		r1, r2 = "antikvan grekan lingvon", "antikva greka lingvo"
	elseif s == "gsw-FR" or s == "gsw-fr" then
		r1, r2 = "alzacan lingvon", "alzaca lingvo"		
	elseif s == "gv" then
		r1, r2 = "manksan lingvon", "manksa lingvo"
	elseif s == "hi" then
		r1, r2 = "hindian lingvon", "hindia lingvo"
	elseif s == "hit" then
		r1, r2 = "hititan lingvon", "hitita lingvo"		
	elseif s == "hsb" then
		r1, r2 = "suprasoraban lingvon", "suprasoraba lingvo"
	elseif s == "ik" then
		r1, r2 = "inupiakan lingvon", "inupiaka lingvo"		
	elseif s == "inh" then
		r1, r2 = "inguŝan lingvon", "inguŝa lingvo"
	elseif s == "io" then
		r1, r2 = "Idon", "Ido (lingvo)"
	elseif s == "iu" then
		r1, r2 = "inuktitutan lingvon", "inuktituta lingvo"		
	elseif s == "jbo" then
		r1, r2 = "Loĵbanon", "Loĵbano"
	elseif s == "kaa" then
		r1, r2 = "karakalpakan lingvon", "karakalpaka lingvo"
	elseif s == "kab" then
		r1, r2 = "kabilan lingvon", "kabila lingvo"		
	elseif s == "kbd" then
		r1, r2 = "kabardan lingvon", "kabarda lingvo"		
	elseif s == "kg" then
		r1, r2 = "kongan lingvon", "konga lingvo"
	elseif s == "kjh" then
		r1, r2 = "ĥakasan lingvon", "ĥakasa lingvo"
	elseif s == "ko-kp" then
		r1, r2 = "nordkorean lingvon", "korea lingvo"		
	elseif s == "ko-kr" then
		r1, r2 = "sudkorean lingvon", "korea lingvo"
	elseif s == "krc" then
		r1, r2 = "balkaran lingvon", "karaĉaja-balkara lingvo"
	elseif s == "krl" then
		r1, r2 = "karelan lingvon", "karela lingvo"		
	elseif s == "ksh" then
		r1, r2 = "kolonjan lingvon", "kolonja lingvo"
	elseif s == "kv" then
		r1, r2 = "komian lingvon", "komia lingvo"		
	elseif s == "kw" then
		r1, r2 = "kornvalan lingvon", "kornvala lingvo"
	elseif s == "kyh" then
		r1, r2 = "karukan lingvon", "karuka lingvo"		
	elseif s == "la" then
		r1, r2 = "Latinon", "Latino"
	elseif s == "lbe" then
		r1, r2 = "lakan lingvon", "laka lingvo"
	elseif s == "lez" then
		r1, r2 = "lezgan lingvon", "lezga lingvo"
	elseif s == "lld" then
		r1, r2 = "ladinan lingvon", "ladina lingvo"
	elseif s == "lmo" then
		r1, r2 = "lombardan lingvon", "lombarda lingvo"		
	elseif s == "lua" then
		r1, r2 = "luban lingvon", "luba lingvo"
	elseif s == "mdf" then
		r1, r2 = "mokŝan lingvon", "mokŝa lingvo"		
	elseif s == "mhr" then
		r1, r2 = "herbejan marian lingvon", "herbeja maria lingvo"		
	elseif s == "mic" then
		r1, r2 = "mikmakan lingvon", "mikmaka lingvo"
	elseif s == "ml" then
		r1, r2 = "malajalan lingvon", "malajala lingvo"		
	elseif s == "mnc" then
		r1, r2 = "manĉuran lingvon", "manĉura lingvo"
	elseif s == "mni" then
		r1, r2 = "manipuran lingvon", "manipura lingvo"
	elseif s == "mos" then
		r1, r2 = "mosian lingvon", "mosia lingvo"
	elseif s == "mrj" then
		r1, r2 = "montaran marian lingvon", "montara maria lingvo"	
	elseif s == "myv" then
		r1, r2 = "erzjan lingvon", "erzja lingvo"	
	elseif s == "nah" then
		r1, r2 = "naŭatlan lingvon", "naŭatla lingvo"		
	elseif s == "nb" then
		r1, r2 = "bukmolan lingvon", "bukmola lingvo"
	elseif s == "non" then
		r1, r2 = "norenan lingvon", "norena lingvo"
	elseif s == "nr" then
		r1, r2 = "sud-ndebelan lingvon", "sud-ndebela lingvo"
	elseif s == "nso" then
		r1, r2 = "pedan lingvon", "peda lingvo"
	elseif s == "os" then
		r1, r2 = "osetan lingvon", "oseta lingvo"
	elseif s == "ota" then
		r1, r2 = "osmanidan turkan lingvon", "osmanida turka lingvo"		
	elseif s == "pag" then
		r1, r2 = "pangasinan lingvon", "pangasina lingvo"
	elseif s == "pap" then
		r1, r2 = "Papiamenton", "Papiamento"
	elseif s == "pdc" then
		r1, r2 = "pensilvanigermanan dialekton", "pensilvanigermana dialekto"		
	elseif s == "pi" then
		r1, r2 = "palian lingvon", "palia lingvo"
	elseif s == "pms" then
		r1, r2 = "piemontan lingvon", "piemonta lingvo"
	elseif s == "ps" then
		r1, r2 = "paŝtunan lingvon", "paŝtuna lingvo"
	elseif s == "pt-br" then
		r1, r2 = "brazilan portugalan lingvon", "Brazila portugala"		
	-- eble korektenda post alinomado	
	elseif s == "rom"	then 
		r1, r2 = "ciganan lingvon", "cigana lingvo"
	elseif s == "rue" then
		r1, r2 = "rusinan lingvon", "rusina lingvo"		
	elseif s == "rup" then
		r1, r2 = "arumanan lingvon", "arumana lingvo"
	elseif s == "sa" or s == "san" then
		r1, r2 = "Sanskriton", "sanskrito"
	elseif s == "sah" then
		r1, r2 = "jakutan lingvon", "jakuta lingvo"
	elseif s == "sc" then
		r1, r2 = "sardan lingvon", "sarda lingvo"		
	elseif s == "scn" then
		r1, r2 = "sicilian lingvon", "sicilia lingvo"		
	elseif s == "sco" then
		r1, r2 = "skotan lingvon", "skota lingvo"
	elseif s == "se" then
		r1, r2 = "nordsamean lingvon", "nordsamea lingvo"
	elseif s == "sli" then
		r1, r2 = "silezia-germanan lingvon", "sSilezia-germana lingvo"		
	elseif s == "slo" then
		r1, r2 = "slovianskan lingvon", "slovianska lingvo"
	elseif s == "sju" then
		r1, r2 = "ume-samean lingvon", "ume-samea lingvo"		
	elseif s == "sma" then
		r1, r2 = "sud-samean lingvon", "sud-samea lingvo"			
	elseif s == "smj" then
		r1, r2 = "lule-samean lingvon", "lule-samea lingvo"			
	elseif s == "smn" then
		r1, r2 = "anar-samean lingvon", "anar-samea lingvo"		
	elseif s == "sms" then
		r1, r2 = "skolt-samean lingvon", "skolt-samea lingvo"	
	elseif s == "sqt" then
		r1, r2 = "sokotrian lingvon", "sokotria lingvo"		
	elseif s == "stq" then
		r1, r2 = "saterfrisan lingvon", "saterfrisa lingvo"
	elseif s == "sty" then
		r1, r2 = "siberitataran lingvon", "siberitatara lingvo"		
	elseif s == "sux" then
		r1, r2 = "sumeran lingvon", "sumera lingvo"		
	elseif s == "sw" then
		r1, r2 = "svahilan lingvon", "svahila lingvo"
	elseif s == "szl" then
		r1, r2 = "silezia-polan lingvon", "silezia-pola lingvo"
	elseif s == "tet" then
		r1, r2 = "tetunan lingvon", "tetuna lingvo"
	elseif s == "tlh" then
		r1, r2 = "klingonan lingvon", "klingona lingvo"
	elseif s == "tli" then
		r1, r2 = "tlingitan lingvon", "tlingita lingvo"		
	elseif s == "tok" then
		r1, r2 = "Tokiponon", "Tokipono"
	elseif s == "tpi" then
		r1, r2 = "Tokpisinon", "Tokpisino"
	elseif s == "ty" then
		r1, r2 = "tahitian lingvon", "tahitia lingvo"		
	elseif s == "tyv" then
		r1, r2 = "tuvan lingvon", "tuva lingvo"
	elseif s == "tzl" then
		r1, r2 = "talosan lingvon", "talosa lingvo"
	elseif s == "uby" then
		r1, r2 = "ubiĥan lingvon", "ubiĥa lingvo"		
	elseif s == "udm" then
		r1, r2 = "udmurtan lingvon", "udmurta lingvo"
	elseif s == "ur" then
		r1, r2 = "Urduon", "Urduo"
	elseif s == "vec" then
		r1, r2 = "venecian lingvon", "venecia lingvo"		
	elseif s == "vo" then
		r1, r2 = "Volapukon", "Volapuko"
	elseif s == "vot" then
		r1, r2 = "votan lingvon", "vota lingvo"		
	elseif s == "wa" then
		r1, r2 = "valonan lingvon", "valona lingvo"
	elseif s == "wen" then
		r1, r2 = "soraban lingvon", "soraba lingvo"		
	elseif s == "xal" then
		r1, r2 = "kalmukan lingvon", "kalmuka lingvo"
	elseif s == "xcu" then
		r1, r2 = "kuronan lingvon", "kurona lingvo"		
	elseif s == "xh" then
		r1, r2 = "kosan lingvon", "kosa lingvo"
	elseif s == "xpu" then
		r1, r2 = "punikan lingvon", "punika lingvo"		
	elseif s == "xvn" then
		r1, r2 = "vandalan lingvon", "vandala lingvo"
	elseif s == "yur" then
		r1, r2 = "jurokan lingvon", "juroka lingvo"		
	else
		local r = mw.language.fetchLanguageName( s, "eo" )
		if r then
			r1 = r:gsub( "a$", "an lingvon")
			r2 = r:gsub( "a$", "a lingvo" )
		end
	end
	return r1, r2
end

-- gets the flag according to a language code from [[Modulo:Lingvonomo/listo/flagoj]]
local function getFlags(s)
	-- Gets a flag from the flag data page.
	local languageData = mw.loadData('Modulo:Lingvonomo/listo/flagoj')
	for language, aliases in pairs(languageData) do
		if (s==language) then
			local adverb = aliases[1]
			-- local name = aliases[2]
			return adverb, name
		end
	end
end

-- template - parses the {{Lang}} template with two parameters:
-- l - language code and t - text
local function template (l, t)
	local frame = mw.getCurrentFrame()
	local r = frame:expandTemplate{
		   title = 'Lang',
		   args = {
	   			l,
	   			t
	   			}
		   }
	return r
end

-- image tests, if a text could be the name of an image
local function image (t)
	local text = mw.ustring.lower(t)  -- it changes letters into lower case letters
	local ending = mw.ustring.sub(text,-4,-1)
	if (ending ==".gif") or (ending == ".jpg") or (ending == ".png") or (ending == ".svg") then
		local error = false
		return t, error
	else
		local ending = mw.ustring.sub(text,-5,-1)
		if (ending==".jpeg") then
			local error = false
			return t, error
		else
			local r = message("noFlag","flag")
			local error = true
			return r, error
		end
	end
	local r = message("noFlag","flag")
	local error = true
	return r, error
end

-- testweight analyzes if the given value in w is a valid value of the CSS feature font-weight
local function testweight (w)
	local text = mw.ustring.lower(w) .. ""
	if (text=="normal") or (text=="bold") or (text=="bolder") or (text=="lighter")
	or (text=="100") or (text=="200") or (text=="300") or (text=="400") or (text=="500")
	or (text=="600") or (text=="700") or (text=="800") or (text=="900") then
		return w
	else
		return "normal"
	end
end

-- Export
local p = {}
-- main functions:
-- language - creates a link to a language article and an adverb like text
-- has only one needed parameter, the code of the language
-- it is used for the templates {{Ar}} until {{Zh}}
function p.language (frame)
	-- This function builds the infobox used by the {{informkesto}} template.
	if not getArgs then
		getArgs = require("Module:Arguments").getArgs
	end
	--local args = getArgs(frame, {wrappers = "Template:Babel"})
	-- post modifo de {{ŝanĝu ŝablonon}} la sekva estos denove ŝanĝenda!
	local args = getArgs(frame, {removeBlanks = false})
	code = args[1]
	-- it analyzes, if the required parameter is wrong or not
	r=analyze (code, "language")
	if (r~="") then return r -- if r is some other than an empty string, it returns the message
	-- and finishes the function
	end
	-- optional parameters
	color = args['koloro'] or args['color']
	background = args['fono'] or args['background']
	size = args['grando'] or args['size']
	weight = args['pezo'] or args['weight']
	accusative = args['akuzativo'] or args['accusative'] -- it is in this function only
	if (color ==nil) or (color == "") then
		c = "color:var(--color-subtle, #54595d);"
	elseif (color == "defaŭlta") or (color == "normala" ) then
		c = ""
	else
		c = "color:" .. color .. ";"
	end
	if (background~=nil) and (background~="") then
		b = "background-color:" .. background .. ";"
	else
		b = ""
	end
	if (size~=nil) and (size~="") then
		s = "font-size:" .. size .. ";"
	else
		s = ""
	end
	if (weight~=nil) and (weight~="") then
		w = "font-weight:" .. testweight(weight) .. ";"
	else
		w = ""
	end

	code = mw.ustring.lower(code)

	-- if accusative has one of the following values, get the accusative. else the adverb
	if (accusative == "jes") or (accusative=="yes") then
		text, name = getAccusative(code)
	else
		text, name = getLanguages(code)
	end

	if (text ~= "") and (name ~="") then
--	if (adverb~=nil) and (name ~=nil) then
		local linktext = text
		if (c~="") or (b~="") or (s~="") or (w~="") then
			r = "[[" .. name .. '|<span style="' .. c .. b .. s .. w .. '">' .. linktext .. "</span>]]"
		else
			r = "[[" .. name .. '|' .. linktext .. "]]"
		end
	else r = "<span class='error'>La lingva kodo '".. code .. "' ne estas subtenata de la Lua-funkcio 'mw.language.fetchLanguageName'. - en la funkcio: language()</span>"
	end
	return r
end

-- flag - puts an image and creates a link to a language article and an adverb like text
-- has only one needed parameter, the code of the language
-- it is used for the templates {{Flag-ar}} until {{Flag-zh}}
function p.flag (frame)
	-- This function builds the infobox used by the {{informkesto}} template.
	if not getArgs then
		getArgs = require("Module:Arguments").getArgs
	end
	--local args = getArgs(frame, {wrappers = "Template:Babel"})
	-- post modifo de {{ŝanĝu ŝablonon}} la sekva estos denove ŝanĝenda!
	local args = getArgs(frame, {removeBlanks = false})
	code = args[1]
	-- it analyzes, if the required parameter is wrong or not
	r=analyze (code, "flag")
	if (r~="") then return r -- if r is some other than an empty string, it returns the message
	-- and finishes the function
	end
	-- optional parameter
	color = args['koloro'] or args['color']
	background = args['fono'] or args['background']
	size = args['grando'] or args['size']
	weight = args['pezo'] or args['weight']
	if (color ~=nil) and (color ~= "") then
		c = "color:" .. color .. ";"
	else
		c = ""
	end
	if (background~=nil) and (background~="") then
		b = "background-color:" .. background .. ";"
	else
		b = ""
	end
	if (size~=nil) and (size~="") then
		s = "font-size:" .. size .. ";"
	else
		s = ""
	end
	if (weight~=nil) and (weight~="") then
		w = "font-weight:" .. testweight(weight) .. ";"
	else
		w = ""
	end

	code = mw.ustring.lower(code)

	local adverb, name = getLanguages(code)
	local flag = getFlags(code)

	if (adverb ~= "") and (name ~="") then
--	if (adverb~=nil) and (name ~=nil) then
		if (flag~=nil) then
			local i, error = image(flag) -- test if the text from the page [[Modulo:Lingvonomo/listo/flagoj]] is an image or not
			if (error == false) then
				r = "[[Dosiero:" .. flag .. "|20px|border]]&nbsp;"
			elseif (error == true) then
				r = i
			end
		else
			r = message("noFlag","flag") -- '<span class="error">La paĝo [[Modulo:Lingvonomo/listo/flagoj]] ne enhavas taŭgan flagon.</span>'
		end
		local linktext = adverb
		local l = name:gsub( " lingvo", "" )
		r = r .. '<span style="cursor:help;font-family:monospace;font-weight:bold;font-size:small" title="Lingvo: ' .. l .. '">'
		if (c~="") or (b~="") or (s~="") or (w~="") then
			r = r .. "[[" .. name .. '|<span style="' .. c .. b .. s .. w .. '">' .. linktext .. "</span>]]"
		else
			r = r .. "[[" .. name .. '|' .. linktext .. "]]"
		end
		r = r .. "</span>"
	else r = "<span class='error'>La lingva kodo '".. code .. "' ne estas subtenata de la Lua-funkcio 'mw.language.fetchLanguageName'. - en la funkcio: flag()</span>"
	end
	return r
end

-- lang - creates a link to a language article and an adverb like text
-- has two needed parameters, the code of the language and the text
function p.lang (frame)
	-- This function builds the infobox used by the {{informkesto}} template.
	if not getArgs then
		getArgs = require("Module:Arguments").getArgs
	end
	--local args = getArgs(frame, {wrappers = "Template:Babel"})
	-- post modifo de {{ŝanĝu ŝablonon}} la sekva estos denove ŝanĝenda!
	local args = getArgs(frame, {removeBlanks = false})
	code = args[1]
	text = args[2]
	-- it analyzes, if the required parameters are wrong or not
	r=analyze2 (code, text, "lang")
	if (r~="") then return r -- if r is some other than an empty string, it returns the message
	-- and finishes the function
	end
	-- optional parameter
	color = args['koloro'] or args['color']
	background = args['fono'] or args['background']
	lcolor = args['l-koloro'] or args['l-color']
	size = args['grando'] or args['size']
	weight = args['pezo'] or args['weight']
	italic = args['kursiva'] or args['italic'] or ""
	link = args['ligilo'] or args['link'] or ""
	short = args["mallonge"]
	adjective = args["adjektivo"] or args["adjective"] or "" -- aktivigas la eligon de adjektivo anstataŭ la kutima adverbo
	-- for alternative text
	au = args['aŭ'] or args['or']
	kaj = args['kaj'] or args['and']
	antaue = args['antaŭe'] or args['before']
	if (color ~=nil) and (color ~= "") then
		c = "color:" .. color .. ";"
	else
		c = ""
	end
	if (background~=nil) and (background~="") then
		b = "background-color:" .. background .. ";"
	else
		b = ""
	end
	if (size~=nil) and (size~="") then
		s = "font-size:" .. size .. ";"
	else
		s = ""
	end
	if (weight~=nil) and (weight~="") and (s~="") then
		w = "font-weight:" .. testweight(weight) .. ";"
	elseif (weight==nil) or (weight=="") and (s~="") then
		w = "font-weight: normal;"
	else
		w = ""
	end
	-- html tags for the font-size, because this is used for both links
	if (s~="") or (w~="") then
		link1 = '<b style="'
		link2 = '">'
		link3 = "</b>"
	else
		link1 = ""
		link2 = ""
		link3 = ""
	end

	code = mw.ustring.lower(code)

	local adverb, name = getLanguages(code)

	if (adverb ~= "") and (name ~="") then
--	if (adverb~=nil) and (name ~=nil) then
		local linktext = adverb
		if adjective == "1" or adjective == "yes" or adjective == "jes" then
			linktext = mw.ustring.gsub( name, " lingvo", "" )
			-- esceptoj
			if code == "ceb" then
				linktext = "cebua"
			elseif code == "jbo" then
				linktext = "loĵbana"
			elseif code == "la"	then
				linktext = "latina"
			elseif code == "pdc" then
				linktext = mw.ustring.gsub( name, " dialekto", "" )	
			-- varianto sen fina "lingvo"	
			elseif code == "pt-br" then
				linktext = name
			-- daŭrigo de esceptoj	
			elseif code == "sa"	or code == "san" then
				linktext = "sanskrita"
			elseif code == "tok" then
				linktext = "tokipona"
			elseif code == "tpi" then
				linktext = "tokpisina"	
			elseif code == "ur" then
				linktext = "urdua"		
			elseif code == "vo" then
				linktext = "volapuka"				
			end
		end
		local i = ""
		if italic == "yes" or italic == "jes" or italic == "" then
			i = "''"
		end
		-- esceptaj lingvokodoj, kie kursiveco ne taŭgas
		if code == "am" or code == "ar" or code == "arc" or code == "bal" or code == "bm" or code == "bn" or code == "bo" or code == "cop" or code == "dv" or code == "dz" or code == "egy"  or code == "fa" or code == "ff" or code == "gu" or code == "he" or
		code == "hi" or code == "hit" or code == "hy" or code == "ja" or code == "ka" or code == "kab" or code == "km" or code == "kn" or code == "ko" or code == "ko-kp" or code == "ko-kr" or code == "lo"  or code == "ml" or code == "mnc" or 
		code == "mni" or code == "mnw" or code == "mr" or code == "my" or code == "ne" or code == "ota" or code == "pa" or code == "pi" or code == "ps" or code == "sa" or code == "san" or code == "sd" or code == "si" or code == "sqt" or code == "sux" or
		code == "ta" or code == "te" or code == "th" or code == "ur" or code == "xpu" or code == "yi"  or code == "zh" then
			i = ""
		end
		-- truko por la ĉina
		local simple
		if code == "zh" then
			simple = args["s"] or args['sh']
			if simple ~= "" and simple ~= nil then
				code = "zh-Hant"
			end
		end
		l = template (code, text) -- invoke the {{Lang}} template
		local l2 = ""
		local vorto = ""
		if au ~= "" and au ~=nil then
			l2 = template(code, au)		
			vorto = " aŭ "
		elseif kaj ~= "" and kaj ~=nil then
			l2 = template(code, kaj)		
			vorto = " kaj "
		elseif antaue ~= "" and antaue ~=nil then
			l2 = template(code, antaue)
			vorto = ", antaŭe "
		end	
		local krampo1 = "[["
		local krampo2 = "]]"
		local streko = "|"
		if short == "1" or short == "jes" or short == "yes" then
			name = ""
			linktext = ""
			krampo1 = ""
			krampo2 = ""
			streko = ""
		elseif lcolor ~= ""	 and lcolor ~= nil then
			linktext = '<span style="color:' .. lcolor .. '">' .. linktext .. '</span>'
		end

		if text ~= "&nbsp;" then

			if (c~="") or (b~="") or (s~="") then
				if link ~= "no" and link ~= "ne" then
					r = link1 .. s .. w .. link2 .. krampo1 .. name .. streko .. linktext .. krampo2 .. '&nbsp;<span style="' .. c .. b .. '">' .. i .. l .. i .. "</span>" .. link3
					if l2 ~= "" then
						r = r .. vorto .. '<span style="' .. c .. b .. '">' .. i .. l2 .. i .. "</span>" .. link3
					end
				else
					r = link1 .. s .. w .. link2 .. linktext .. '&nbsp;<span style="' .. c .. b .. '">' .. i .. l .. i .. "</span>" .. link3
					if l2 ~= "" then
						r = r .. vorto .. '<span style="' .. c .. b .. '">' .. i .. l2 .. i .. "</span>" .. link3
					end					
				end
			else
				if link ~= "no" and link ~="ne" then
					r = krampo1 .. name .. streko .. linktext .. krampo2 .. "&nbsp;" .. i .. l .. i
					if l2 ~= "" then
						r = r .. vorto .. i .. l2 .. i 
					end					
				else
					r = linktext .. "&nbsp;" .. i .. l .. i
					if l2 ~= "" then
						r = r .. vorto .. i .. l2 .. i 
					end						
				end
			end
		else
			if (c~="") or (b~="") or (s~="") then
				if link ~= "no" and link ~= "ne" then
					r = link1 .. s .. w .. link2 .. krampo1 .. name .. streko .. linktext .. krampo2 .. '&nbsp;' .. link3
				else
					r = link1 .. s .. w .. link2 .. linktext .. '&nbsp;'   .. link3
				end
			else
				if link ~= "no" and link ~="ne" then
					r = krampo1 .. name .. streko .. linktext .. krampo2 .. "&nbsp;"
				else
					r = linktext .. "&nbsp;"
				end
			end
		end
		-- translitaracioj por kelkaj lingvoj. aldonoj eblas.
		if code == "zh" or code == "zh-Hant" then
			if simple ~= "" and simple ~= nil then
				r = r ..  '/<span lang="zh-Hans">' ..simple .. '</span>'
			end
			local pinjin = args['p'] or args['pinjino']
			local p = ""
			if pinjin ~= "" and pinjin ~= nil then
				r = r .. ', [[pinjino|pinjine]]: <span lang="zh-Latn">' .. pinjin .. '</span>'
				p = "(alia transskribo) "
			end
			local wg = args['Wade-Giles'] or args['wg']
			if wg ~= "" and wg ~= nil then
				r = r .. ', [[Wade-Giles]]: <span lang="zh-Latn">' .. wg .. '</span>'
			end			
			local j = args['j'] or args['kj'] or args['jyutping']
			if j ~= "" and j ~= nil then
				r = r .. ', [[Jyutping]]: <span lang="zh-Latn">' .. j .. '</span>'
			end	
			local t = args['t']
			if t ~= "" and t ~= nil then
				-- se pinjino antaŭas alian transskribon la supre difinita teksto estas antaŭmetata, alie nenio
				r = r .. ", " .. p .. t
			end
		elseif code == "ja" then
			local h = args['h'] 
			if h ~= "" and h ~= nil then
				if text == "&nbsp;" then
					r = r .. h
				else
					r = r .. ', latinliterigo laŭ [[sistemo Hepburn]] <span lang="ja-Latn">' .. h  .. '</span>'
				end
			end
			local t = args['t']
			if t ~= "" and t ~= nil then
				if text == "&nbsp;" then
					r = r .. t
				else
					r = r .. ", " .. t
				end
			end			
		elseif code == "ko" or code == "ko-kp" or code == "ko-kr" then
			local r2 = args['r'] or args['rtk']
			if r2 ~= "" and r2 ~= nil then
				if text == "&nbsp;" then
					r = r .. r2
				else
					r = r .. ', latinliterigo laŭ [[Revizia latinliteriga transskribo de la korea lingvo|reviziita transskribo]] <span lang="ko-Latn">' .. r2 .. '</span>'
				end
			end
			local mr2 = args['mr'] 
			if mr2 ~= "" and mr2 ~= nil then
				if text == "&nbsp;" then
					r = r .. mr2
				else
					r = r .. ', latinliterigo laŭ [[transskribo de McCune-Reischauer]] <span lang="ko-Latn">' .. mr2 .. '</span>'
				end
			end			
			local t = args['t']
			if t ~= "" and t ~= nil then
				if text == "&nbsp;" then
					r = r .. t
				else
					r = r .. ", " .. t
				end
			end				
		elseif code == "ar"  or code == "fa" or code == "ps" or code == "ur" then
			local d = args['d'] 
			if d ~= "" and d ~= nil then
				if text == "&nbsp;" then
					r = r .. d 
				else
					r = r .. ", [[DIN 31635|DMG]] " .. '<span lang="' .. code .. '-Latn">' .. d .. '</span>'
				end
			end
			local t = args['t']
			if t ~= "" and t ~= nil then
				if text == "&nbsp;" then
					r = r .. t
				else
					r = r .. ", " .. t
				end
			end	
		elseif code == "sa" or code == "san" then
			local i = args['i'] or args['iast']
			if i ~= "" and i ~= nil then
				r = r .. ' [[IAST]]: ' .. '<span lang="' .. code .. '-Latn">' .. i .. '</span>'
			end	
		elseif code ~= "eo" then
			local t = args['t']
			if t ~= "" and t ~= nil then
				if text == "&nbsp;" then
					r = r .. t
				else
					r = r .. ", " .. t
				end
			end
		end
	else r = "<span class='error'>La lingva kodo '".. code .. "' ne estas subtenata de la Lua-funkcio 'mw.language.fetchLanguageName'. - en la funkcio: lang()</span>"
	end
	return r
end

-- exist analyzes if a code is a language code in mw.language.fetchLanguageName
function p.exist (frame)
	-- This function builds the infobox used by the {{informkesto}} template.
	if not getArgs then
		getArgs = require("Module:Arguments").getArgs
	end
	--local args = getArgs(frame, {wrappers = "Template:Babel"})
	-- post modifo de {{ŝanĝu ŝablonon}} la sekva estos denove ŝanĝenda!
	local args = getArgs(frame, {removeBlanks = false})
	code = args[1]
	-- it analyzes, if the required parameter is wrong or not
	r=analyze (code, "exist")
	if (r~="") then return r -- if r is some other than an empty string, it returns the message
	-- and finishes the function
	end

	local text, name = getLanguages(code)
	if (text~="") and (name~="") then
		return true
	else
		return false
	end

end

-- list returns all langugage from the function mw.language.fetchLanguageNames in a wikitable
function p.list (frame)
	-- This function builds the infobox used by the {{informkesto}} template.
	if not getArgs then
		getArgs = require("Module:Arguments").getArgs
	end
	--local args = getArgs(frame, {wrappers = "Template:Babel"})
	-- post modifo de {{ŝanĝu ŝablonon}} la sekva estos denove ŝanĝenda!
	local args = getArgs(frame, {removeBlanks = false})	
	local r = '{| class="wikitable sortable"\n'
	r = r .. "|-\n" .. "! Kodo !! Nomo\n" -- head of the table
	local languages = mw.language.fetchLanguageNames("eo","all")
	local a = {}
	local number = 0
	for n in pairs(languages) do
		a[#a + 1] = n
	end
	number = #a
	table.sort(a)
	r = r .. "|-\n" .. '! colspan="2" |  nombro: ' .. number .. "\n"
	for index, code in pairs(a) do
		local name = ""
		for c, n in pairs(languages) do
			if (c == code) then
				name = n
				break
			end
		end
		r = r .. "|-\n" .. "| " .. code .. " || " .. name .. "\n"
	end
	r = r .. "|}\n"
	r = r .. "nombro: " .. number
	return r
end


return p