<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mindpowe.red/wiki/index.php?action=history&amp;feed=atom&amp;title=Module%3AISO_639_name</id>
	<title>Module:ISO 639 name - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mindpowe.red/wiki/index.php?action=history&amp;feed=atom&amp;title=Module%3AISO_639_name"/>
	<link rel="alternate" type="text/html" href="https://mindpowe.red/wiki/index.php?title=Module:ISO_639_name&amp;action=history"/>
	<updated>2026-04-06T07:44:17Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.34.2</generator>
	<entry>
		<id>https://mindpowe.red/wiki/index.php?title=Module:ISO_639_name&amp;diff=1795&amp;oldid=prev</id>
		<title>imported&gt;Trappist the monk: sync from sandbox;</title>
		<link rel="alternate" type="text/html" href="https://mindpowe.red/wiki/index.php?title=Module:ISO_639_name&amp;diff=1795&amp;oldid=prev"/>
		<updated>2020-08-20T14:16:07Z</updated>

		<summary type="html">&lt;p&gt;sync from sandbox;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;require('Module:No globals');&lt;br /&gt;
&lt;br /&gt;
local getArgs = require ('Module:Arguments').getArgs;&lt;br /&gt;
local override_data = mw.loadData ('Module:Language/data/ISO 639 override');&lt;br /&gt;
local parts = {&lt;br /&gt;
	{'Module:Language/data/iana languages', 1},&lt;br /&gt;
	{'Module:Language/data/ISO 639-2', 2},&lt;br /&gt;
	{'Module:Language/data/ISO 639-3', 3},&lt;br /&gt;
	{'Module:Language/data/ISO 639-5', 5},&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; E R R O R _ M E S S A G E S &amp;gt;--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local error_messages = {&lt;br /&gt;
	['err_msg'] = '&amp;lt;span style=&amp;quot;font-size:100%;&amp;quot; class=&amp;quot;error show_639_err_msgs&amp;quot;&amp;gt;error: $1&amp;lt;/span&amp;gt;[[Category:ISO 639 name template errors]]',&lt;br /&gt;
	['err_text'] = {															-- error messages used only in the code to name functions&lt;br /&gt;
		['ietf'] = '$1 is an IETF tag',											-- $1 is the ietf tag&lt;br /&gt;
		['required'] = 'ISO 639$1 code is required',							-- $1 is the 639 '-1', '-2', '-3', '-5' part suffix; may be empty string&lt;br /&gt;
		['not_code'] = '$1 is not an ISO 639$2 code',							-- $1 is non-code input; $2 is 639 part suffix; may be empty string&lt;br /&gt;
&lt;br /&gt;
																				-- code to name functions and iso_639_name_to_code()&lt;br /&gt;
		['not_found'] = '$1 not found in ISO 639-$2 list',						-- $1 is code or language name; $2 is 639 part suffix(es)&lt;br /&gt;
&lt;br /&gt;
																				-- iso_639_name_to_code() only&lt;br /&gt;
		['name'] = 'language name required',&lt;br /&gt;
		['not_part'] = '$1 not an ISO 639 part',								-- $1 is invalid 639 suffix (without hyphen)&lt;br /&gt;
		['no_code'] = 'no code in ISO 639-$1 for $2',							-- $1 is 639 part suffix; $2 is language name&lt;br /&gt;
&lt;br /&gt;
		['code_name'] = 'language code or name required',						-- iso_639() only&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; S U B S T I T U T E &amp;gt;----------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Populates numbered arguments in a message string using an argument table.&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function substitute (msg, args)&lt;br /&gt;
	return args and mw.message.newRawMessage (msg, args):plain() or msg;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; E R R O R _ M S G &amp;gt;------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
create an error message&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function error_msg (msg, arg, hide)&lt;br /&gt;
	return not hide and substitute (error_messages.err_msg, substitute (error_messages.err_text[msg], arg)) or '';&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; I S _ S E T &amp;gt;------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Returns true if argument is set; false otherwise. Argument is 'set' when it exists (not nil) or when it is not an empty string.&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function is_set( var )&lt;br /&gt;
	return not (var == nil or var == '');&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[=[-------------------------&amp;lt; M A K E _ W I K I L I N K &amp;gt;----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Makes a wikilink; when both link and display text is provided, returns a wikilink in the form [[L|D]]; if only&lt;br /&gt;
link is provided, returns a wikilink in the form [[L]]; if neither are provided or link is omitted, returns an&lt;br /&gt;
empty string.&lt;br /&gt;
&lt;br /&gt;
]=]&lt;br /&gt;
&lt;br /&gt;
local function make_wikilink (link, display)&lt;br /&gt;
	if is_set (link) then&lt;br /&gt;
		if is_set (display) then&lt;br /&gt;
			return table.concat ({'[[', link, '|', display, ']]'});&lt;br /&gt;
		else&lt;br /&gt;
			return table.concat ({'[[', link, ']]'});&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return '';&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; L A N G _ N A M E _ G E T &amp;gt;----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
returns first listed language name for code from data{} table; strips parenthetical disambiguation; wikilinks to&lt;br /&gt;
the language article if link is true; returns nil else&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function lang_name_get (code, data, link, label)&lt;br /&gt;
	local name;&lt;br /&gt;
	&lt;br /&gt;
	if data[code] then&lt;br /&gt;
		name = data[code][1]:gsub ('%s*%b()', '');								-- get the name and strip parenthetical disambiguators if any&lt;br /&gt;
		if link then															-- make a link to the language article?&lt;br /&gt;
			if name:find ('languages') then&lt;br /&gt;
				name = make_wikilink (name, label);								-- simple wikilink for collective languages unless there is a label&lt;br /&gt;
			elseif override_data.article_name[code] then&lt;br /&gt;
				name = make_wikilink (override_data.article_name[code][1], label or name);	-- language name or label with wikilink from override data&lt;br /&gt;
			else&lt;br /&gt;
				name = make_wikilink (name .. ' language', label or name);		-- [[name language|name]] or [[name language|label]]&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return name;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; A D D _ I E T F _ E R R O R _ M S G &amp;gt;------------------------------------------&lt;br /&gt;
&lt;br /&gt;
assembles return-text (language code, language name, or error message) with IETF error message into properly&lt;br /&gt;
formatted readable text&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function add_ietf_error_msg (text, ietf_err, hide)&lt;br /&gt;
	if hide then&lt;br /&gt;
		ietf_err = '';&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat ({&lt;br /&gt;
		text,																	-- code name, language name, or error message&lt;br /&gt;
		'' ~= ietf_err and ' ' or '',											-- needs a space when ietf_err is not empty&lt;br /&gt;
		ietf_err,});															-- tack on ietf error message if one exists&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; G E T _ P A R T _ I N D E X &amp;gt;--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
gets index suitable for parts{} table from ISO 639-&amp;lt;part&amp;gt; (usually args[2])&lt;br /&gt;
&lt;br /&gt;
return valid index [1] - [4]; nil else&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function get_part_index (part)&lt;br /&gt;
	return ({1, 2, 3, nil, 4})[tonumber(part)];&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; I S O _ 6 3 9 _ C O D E _ T O _ N A M E _ C O M M O N &amp;gt;------------------------&lt;br /&gt;
&lt;br /&gt;
this is code that is common to all of the iso_639_code_n_to_name() functions which serve only as template entry points to&lt;br /&gt;
provide the frame, the name of the appropriate data source, and to identify which 639 part applies.&lt;br /&gt;
&lt;br /&gt;
this function returns a language name or an error message.&lt;br /&gt;
a second retval used by _iso_639_code_to_name() is true when a code is found; nil else&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function iso_639_code_to_name_common (args, source, part)&lt;br /&gt;
	local hide = 'yes' == args['hide-err'];&lt;br /&gt;
&lt;br /&gt;
	if not args[1] then															-- if code not provided in the template call&lt;br /&gt;
		return error_msg ('required', '-' .. part, hide);						-- abandon&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local code;																	-- used for error messaging&lt;br /&gt;
	local ietf_err;																-- holds an error message when args[1] (language code) is in IETF tag form (may or may not be a valid IETF tag)&lt;br /&gt;
	code, ietf_err = args[1]:gsub('(.-)%-.*', '%1');							-- strip ietf subtags; ietf_err is non-zero when subtags are stripped&lt;br /&gt;
	ietf_err = (0 ~= ietf_err) and error_msg ('ietf', args[1], hide) or '';		-- when tags are stripped create an error message; empty string for concatenation else&lt;br /&gt;
&lt;br /&gt;
	if (1 == part and 2 ~= #code) or (1 &amp;lt; part and 3 ~= #code) then				-- 639-1 codes are 2 characters only; all others 3 characters&lt;br /&gt;
		return  error_msg ('not_code', {code, '-' .. part}, hide);&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local data = override_data['override_' .. part];							-- get override data for this part&lt;br /&gt;
	local name = lang_name_get (code:lower(), data, args.link, args.label);		-- get override language name if there is one&lt;br /&gt;
&lt;br /&gt;
	if not name then&lt;br /&gt;
		data = mw.loadData (source);											-- get the data for this ISO 639 part&lt;br /&gt;
		name = lang_name_get (code:lower(), data, args.link, args.label);		-- get language name if there is one&lt;br /&gt;
		if not name then&lt;br /&gt;
			return error_msg ('not_found', {code, part}, hide);					-- code not found, return error message&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return add_ietf_error_msg (name, ietf_err, hide), true;						-- return language name with ietf error message if any; true because we found a code&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; _ I S O _ 6 3 9 _ C O D E _ T O _ N A M E &amp;gt;------------------------------------&lt;br /&gt;
&lt;br /&gt;
searches through the ISO 639 language tables for a name that matches the supplied code.  on success returns first&lt;br /&gt;
language name that matches code from template frame perhaps with an error message and a second return value of true;&lt;br /&gt;
on failure returns an error message and a second return value of nil.  The second return value is a return value&lt;br /&gt;
used by iso_639_code_exists()&lt;br /&gt;
&lt;br /&gt;
looks first in the override data and then sequentially in the 639-1, -2, -3, and -5 data&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function _iso_639_code_to_name (frame)&lt;br /&gt;
	local args = getArgs(frame);&lt;br /&gt;
	local hide = 'yes' == args['hide-err'];&lt;br /&gt;
	&lt;br /&gt;
	if not args[1] then															-- if code not provided in the template call&lt;br /&gt;
		return error_msg ('required', '', hide);								-- abandon&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
--	local code = args[1];														-- used in error messaging&lt;br /&gt;
	local name;																	-- the retrieved language name and / or error message&lt;br /&gt;
	local found;																-- set to true when language name is found&lt;br /&gt;
&lt;br /&gt;
	for _, part in ipairs (parts) do&lt;br /&gt;
		name, found = iso_639_code_to_name_common (args, part[1],  part[2]);&lt;br /&gt;
		if found then&lt;br /&gt;
			return name, true;													-- second retval for iso_639_name_exists()&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return error_msg ('not_found', {args[1], '1, -2, -3, -5'}, hide);			-- here when code (args[1]) is not found in the data tables&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; I S O _ 6 3 9 _ C O D E _ T O _ N A M E &amp;gt;--------------------------------------&lt;br /&gt;
&lt;br /&gt;
template entry point; returns first language name that matches code from template frame or an error message&lt;br /&gt;
looks first in the override data and then sequentially in the 639-1, -2, -3, and -5 data&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function iso_639_code_to_name (frame)&lt;br /&gt;
	local ret_val = _iso_639_code_to_name (frame);								-- ignore second return value&lt;br /&gt;
	return ret_val;																-- return language name and / or error message&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; I S O _ 6 3 9 _ C O D E _ E X I S T S &amp;gt;----------------------------------------&lt;br /&gt;
&lt;br /&gt;
template entry point; returns true if language code maps to a language name; intended as a replacement for:&lt;br /&gt;
	{{#exist:Template:ISO 639 name &amp;lt;code&amp;gt;|&amp;lt;exists&amp;gt;|&amp;lt;doesn't exist&amp;gt;}}&lt;br /&gt;
Instead of that expensive parser function call use this function:&lt;br /&gt;
	{{#if:{{#invoke:ISO 639 name|iso_639_code_exists|&amp;lt;code&amp;gt;}}|&amp;lt;exists&amp;gt;|&amp;lt;doesn't exist&amp;gt;}}&lt;br /&gt;
on success, returns true; nil else&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function iso_639_code_exists (frame)&lt;br /&gt;
	local _, exists;&lt;br /&gt;
	 _, exists = _iso_639_code_to_name (frame);									-- ignore name/error message return; &amp;lt;exists&amp;gt; is true when name found for code; nil else&lt;br /&gt;
	 return exists;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; I S O _ 6 3 9 _ C O D E _ 1 _ T O _ N A M E &amp;gt;----------------------------------&lt;br /&gt;
&lt;br /&gt;
template entry point; returns first language name that matches ISO 639-1 code from template frame or an error message&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function iso_639_code_1_to_name (frame)&lt;br /&gt;
	local args = getArgs (frame);&lt;br /&gt;
	local retval = iso_639_code_to_name_common (args, parts[1][1],  parts[1][2]);		-- suppress second return value&lt;br /&gt;
	return retval;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; I S O _ 6 3 9 _ C O D E _ 2 _ T O _ N A M E &amp;gt;----------------------------------&lt;br /&gt;
&lt;br /&gt;
template entry point; returns first language name that matches ISO 639-2 code from template frame or an error message&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function iso_639_code_2_to_name (frame)&lt;br /&gt;
	local args = getArgs (frame);&lt;br /&gt;
	local retval = iso_639_code_to_name_common (args, parts[2][1],  parts[2][2]);		-- suppress second return value&lt;br /&gt;
	return retval;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; I S O _ 6 3 9 _ C O D E _ 3 _ T O _ N A M E &amp;gt;----------------------------------&lt;br /&gt;
&lt;br /&gt;
template entry point; returns first language name that matches ISO 639-3 code from template frame or an error message&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function iso_639_code_3_to_name (frame)&lt;br /&gt;
	local args = getArgs (frame);&lt;br /&gt;
	local retval = iso_639_code_to_name_common (args, parts[3][1],  parts[3][2]);		-- suppress second return value&lt;br /&gt;
	return retval;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; I S O _ 6 3 9 _ C O D E _ 5 _ T O _ N A M E &amp;gt;----------------------------------&lt;br /&gt;
&lt;br /&gt;
template entry point; returns first language name that matches ISO 639-5 code from template frame or an error message&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function iso_639_code_5_to_name (frame)&lt;br /&gt;
	local args = getArgs (frame);&lt;br /&gt;
	local retval = iso_639_code_to_name_common (args, parts[4][1],  parts[4][2]);		-- index [4] -&amp;gt; part 5 because there is no part 4; suppress second return value&lt;br /&gt;
	return retval;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; _ I S O _ 6 3 9 _ N A M E _ T O _ C O D E &amp;gt;------------------------------------&lt;br /&gt;
&lt;br /&gt;
module entry point; returns ISO 639-1, -2, -3, or -5 code associated with language name according to part (1, 2, 3, 5) argument;&lt;br /&gt;
when part is not provided scans 1, 2, 3 , 5 and returns first code&lt;br /&gt;
&lt;br /&gt;
override data are examined first&lt;br /&gt;
&lt;br /&gt;
&amp;lt;args&amp;gt; is frame arguments from getArgs(frame)&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function _iso_639_name_to_code (args)&lt;br /&gt;
	local hide = 'yes' == args['hide-err'];&lt;br /&gt;
&lt;br /&gt;
	if not args[1] then&lt;br /&gt;
		return error_msg ('name', '', hide);&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local name = args[1];														-- used in error messaging&lt;br /&gt;
	local lc_name = name:lower();												-- holds lowercase version of name for indexing into the data table&lt;br /&gt;
&lt;br /&gt;
	local part_idx;&lt;br /&gt;
	if args[2] then&lt;br /&gt;
		part_idx = get_part_index (args[2]);&lt;br /&gt;
		if not part_idx then&lt;br /&gt;
			return error_msg ('not_part', args[2], hide);						-- abandon; args[2] is not a valid ISO 639 part&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local part = args[2];&lt;br /&gt;
&lt;br /&gt;
	local name_data = {};&lt;br /&gt;
&lt;br /&gt;
	if part then&lt;br /&gt;
		name_data = override_data['override_' .. part];							-- select the override table for the specified part&lt;br /&gt;
&lt;br /&gt;
		for k, v in pairs (name_data) do										-- spin through the override table for the specified part&lt;br /&gt;
			if lc_name == v[1]:lower() then										-- if name is found&lt;br /&gt;
				return k;														-- return the code&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	else																		-- part not specified&lt;br /&gt;
		for _, part in ipairs ({'1', '2', '3', '5'}) do							-- search the part in order&lt;br /&gt;
			name_data = override_data['override_' .. part];&lt;br /&gt;
			for k, v in pairs (name_data) do									-- spin through the override table for the specified part&lt;br /&gt;
				if lc_name == v[1]:lower() then									-- if name is found&lt;br /&gt;
					return k;													-- return the code&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local name_data = mw.loadData ('Module:Language/data/ISO 639 name to code');	-- ISO 639 language names to code table&lt;br /&gt;
&lt;br /&gt;
	if name_data[lc_name] then&lt;br /&gt;
		if part_idx then														-- if a specific part was specified&lt;br /&gt;
			if '' == name_data[lc_name][part_idx] then							-- empty string when specified part does not have code for specified language name&lt;br /&gt;
				return error_msg ('no_code', {part, name}, hide);				-- no code in ISO 639-part for language&lt;br /&gt;
			else&lt;br /&gt;
				return name_data[lc_name][part_idx];							-- part has code for language name&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			for _, v in ipairs ({1, 2, 3, 5-1}) do								-- no part provided, scan through name's list of codes to get the first available code&lt;br /&gt;
				if '' ~= name_data[lc_name][v] then								-- empty string when specified part does not have code for specified language name&lt;br /&gt;
					return name_data[lc_name][v];								-- return the first available code&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return error_msg ('not_found', {name, part or '1, -2, -3, -5'}, hide);&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; I S O _ 6 3 9 _ N A M E _ T O _ C O D E &amp;gt;--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
template entry point; returns ISO 639-1, -2, -3, or -5 code associated with language name according to part (1, 2, 3, 5) argument;&lt;br /&gt;
when part is not provided scans 1, 2, 3 , 5 and returns first code&lt;br /&gt;
&lt;br /&gt;
override data are examined first&lt;br /&gt;
&lt;br /&gt;
args[1] is language name&lt;br /&gt;
args[2] is ISO 639 part&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function iso_639_name_to_code (frame)&lt;br /&gt;
	local args = getArgs(frame);&lt;br /&gt;
	return _iso_639_name_to_code (args);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; I S O _ 6 3 9 &amp;gt;----------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
template entry point.&lt;br /&gt;
returns:&lt;br /&gt;
	language name if args[1] is valid language code&lt;br /&gt;
	language code if args[1] is valid language name&lt;br /&gt;
&lt;br /&gt;
this function is constrained to the ISO 639 part specified in args[2] which must be 1, 2, 3, or 5.  When not provided&lt;br /&gt;
all parts are tested. The first match is found&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function iso_639 (frame)&lt;br /&gt;
	local args = getArgs (frame);&lt;br /&gt;
	local hide = 'yes' == args['hide-err'];&lt;br /&gt;
	local result;&lt;br /&gt;
	local found;																-- set to true when language name is found&lt;br /&gt;
&lt;br /&gt;
	if not args[1] then&lt;br /&gt;
		return error_msg ('code_name', '', hide);&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args[2] then																-- if ISO 639 part supplied&lt;br /&gt;
		local part_idx = get_part_index (args[2]);								-- fix part 5; 1-3 same, 4 and anything else nil&lt;br /&gt;
&lt;br /&gt;
		if not part_idx then&lt;br /&gt;
			return error_msg ('not_part', args[2], hide);						-- abandon args[2] is not a valid ISO 639 part&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		result, found = iso_639_code_to_name_common (args, parts[part_idx][1], parts[part_idx][2]);		-- attempt to find a code match&lt;br /&gt;
		if found then&lt;br /&gt;
			return result;														-- found the code so return the language name&lt;br /&gt;
		end&lt;br /&gt;
		return iso_639_name_to_code (frame);									-- might be a language name; return code if it is; error message or empty string else&lt;br /&gt;
	else		&lt;br /&gt;
		for _, part in ipairs (parts) do										-- for each of the iso 639 parts&lt;br /&gt;
			result, found = iso_639_code_to_name_common (args, part[1], part[2]);				-- attempt to find a code match&lt;br /&gt;
			if found then&lt;br /&gt;
				return result;													-- found the code so return the language name&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end	&lt;br /&gt;
	return iso_639_name_to_code (frame);										-- might be a language name; return code if it is; error message or empty string else&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; E X P O R T E D   F U N C T I O N S &amp;gt;------------------------------------------&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
return {&lt;br /&gt;
	iso_639 = iso_639,															-- returns code when given name; returns name when given code&lt;br /&gt;
&lt;br /&gt;
	iso_639_code_exists = iso_639_code_exists,&lt;br /&gt;
&lt;br /&gt;
	iso_639_code_to_name = iso_639_code_to_name,&lt;br /&gt;
	iso_639_code_1_to_name = iso_639_code_1_to_name,&lt;br /&gt;
	iso_639_code_2_to_name = iso_639_code_2_to_name,&lt;br /&gt;
	iso_639_code_3_to_name = iso_639_code_3_to_name,&lt;br /&gt;
	iso_639_code_5_to_name = iso_639_code_5_to_name,&lt;br /&gt;
&lt;br /&gt;
	iso_639_name_to_code = iso_639_name_to_code,&lt;br /&gt;
	};&lt;/div&gt;</summary>
		<author><name>imported&gt;Trappist the monk</name></author>
		
	</entry>
</feed>