Documentația acestui modul poate fi creată la Modul:ISO 639/doc

require('strict')

local p = {}

local getArgs = require('Modul:Arguments').getArgs
local warn = require('Modul:Warning')

local languageNameOverrides = mw.loadData('Modul:ISO 639/overrides')

--[=[
Obține numele unei limbi, în română, pentru un anumit cod ISO 639 (-1, -2 sau -3)

Returnează nil dacă limba dată nu este în tabelele de căutare.
]=]
function p.language_name(code, failValue)
	-- Only continue if we get passed a non-empty string for the code param
	if code == nil or code == '' then
		warn('Nu a fost oferit niciun cod ISO pentru [[Modul:ISO 639]]')
		return failValue
	elseif type(code) ~= 'string' then
		warn('Codul ISO \"' .. tostring(code) .. '\" nu este un șir de caractere (string)')
		return failValue
	end
	
	-- If we have a local override, apply it
	local language = languageNameOverrides[code]
	
	-- Otherwise, ask MediaWiki for the language name in Romanian for this code
	if language == nil or language == '' then
		language = mw.language.fetchLanguageName(code, 'ro')
	end
	
	-- If we got no name from MediaWiki and have no override for this code,
	-- load the big honkin' local lookup table and check there.
	if language == nil or language == '' then
		local localLanguageNames = mw.loadData('Modul:ISO 639/local')
		language = localLanguageNames[code]
	end
	
	-- If we found a non-empty lang name we return it.
	if language ~= nil and language ~= '' then
		return language
	end
	
	-- otherwise we return the failure value
	warn('Codul ISO \"' .. code .. '\" nu este recunoscut de [[Modul:ISO 639]]')
	return failValue
end

--[=[
Implementează [[Format:Nume ISO 639]]
]=]

function p.ISO_639_name(frame)
	local args = getArgs(frame)
	
	return p.language_name(args[1] or args.code, '[[Categorie:' .. 'Erori ale formatului Nume ISO 639' .. ']]')
end

return p