<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ALanguage%2Fdata%2FISO_639_name_to_code%2Fmake</id>
	<title>Module:Language/data/ISO 639 name to code/make - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ALanguage%2Fdata%2FISO_639_name_to_code%2Fmake"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Language/data/ISO_639_name_to_code/make&amp;action=history"/>
	<updated>2026-06-07T06:09:00Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://stockhub.co/index.php?title=Module:Language/data/ISO_639_name_to_code/make&amp;diff=137203&amp;oldid=prev</id>
		<title>imported&gt;WOSlinker: use require(&#039;strict&#039;) instead of require(&#039;Module:No globals&#039;)</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Language/data/ISO_639_name_to_code/make&amp;diff=137203&amp;oldid=prev"/>
		<updated>2022-10-22T09:09:05Z</updated>

		<summary type="html">&lt;p&gt;use require(&amp;#039;strict&amp;#039;) instead of require(&amp;#039;Module:No globals&amp;#039;)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;require(&amp;#039;strict&amp;#039;);&lt;br /&gt;
local temp = {};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; A D D _ L A N G &amp;gt;--------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
temp table is a table of tables where the key is the language name and the value is a table listing the ISO 639&lt;br /&gt;
codes associated with that language name.&lt;br /&gt;
&lt;br /&gt;
This function adds language name (as index) and its code (as a table element) using an appropriate index number.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lang&amp;gt; is the language name from the source data&lt;br /&gt;
&amp;lt;code&amp;gt; is the associated ISO 639 code from the source data&lt;br /&gt;
&amp;lt;part&amp;gt; is 1 for ISO 639-1 language names and codes, 2, 2B, 3, 5. &amp;lt;part&amp;gt; for the override data is prefixed with &amp;#039;O&amp;#039;&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function lang_add (lang, code, part)&lt;br /&gt;
	part = ({																	-- convert string &amp;lt;part&amp;gt; to a numeric index&lt;br /&gt;
		[&amp;#039;1&amp;#039;]=1, [&amp;#039;2&amp;#039;]=2, [&amp;#039;2B&amp;#039;]=3, [&amp;#039;3&amp;#039;]=4, [&amp;#039;5&amp;#039;]=5,							-- for the base ISO 639 parts&lt;br /&gt;
		[&amp;#039;O1&amp;#039;]=6, [&amp;#039;O2&amp;#039;]=7, [&amp;#039;O2B&amp;#039;]=8, [&amp;#039;O3&amp;#039;]=9, [&amp;#039;O5&amp;#039;]=10,						-- for the override tables&lt;br /&gt;
		[&amp;#039;D1&amp;#039;]=11, [&amp;#039;D2&amp;#039;]=12, [&amp;#039;D2B&amp;#039;]=13, [&amp;#039;D3&amp;#039;]=14, [&amp;#039;D5&amp;#039;]=15,					-- for the deprecated tables&lt;br /&gt;
		})[part];&lt;br /&gt;
&lt;br /&gt;
	lang = mw.ustring.lower (lang);												-- convert to lowercase for use as table index&lt;br /&gt;
&lt;br /&gt;
	if not temp[lang] then														-- when no entry for this language&lt;br /&gt;
		temp[lang] = {};														-- make a blank entry&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	table.insert(temp[lang], string.format(&amp;#039;[%s]=\&amp;quot;%s\&amp;quot;&amp;#039;, part, code))			-- add the code; codes are added in the order that this function is called in iso_639_name_to_code()&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- TODO: better name&lt;br /&gt;
local function iterate_table(part_data, part_number)&lt;br /&gt;
	for code, v in pairs (part_data) do											&lt;br /&gt;
		for _, lang in ipairs (v) do											-- code can have multiple names so for each one&lt;br /&gt;
			lang_add (lang, code, part_number);									-- create and / or add this name / code pair to the output&lt;br /&gt;
		end&lt;br /&gt;
	end	&lt;br /&gt;
end&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;
read code-to-name source tables and convert to a name-to-code table.&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function iso_639_name_to_code ()&lt;br /&gt;
	local out = {};&lt;br /&gt;
&lt;br /&gt;
	local part_data = mw.loadData (&amp;#039;Module:Language/data/ISO 639-3&amp;#039;);			-- ISO 639-3 language codes / names&lt;br /&gt;
	iterate_table(part_data, &amp;#039;3&amp;#039;)												-- start with part 3 because it has the most codes&lt;br /&gt;
&lt;br /&gt;
	part_data = mw.loadData (&amp;#039;Module:Language/data/ISO 639-5&amp;#039;);					-- ISO 639-5 language codes / names&lt;br /&gt;
	iterate_table(part_data, &amp;#039;5&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	part_data = mw.loadData (&amp;#039;Module:Language/data/ISO 639-2&amp;#039;);					-- ISO 639-2 language codes / names&lt;br /&gt;
	iterate_table(part_data, &amp;#039;2&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	part_data = mw.loadData (&amp;#039;Module:Language/data/ISO 639-2B&amp;#039;);				-- ISO 639-2B language codes / names&lt;br /&gt;
	iterate_table(part_data, &amp;#039;2B&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	part_data = mw.loadData (&amp;#039;Module:Language/data/ISO 639-1&amp;#039;);					-- ISO 639-1 language codes / names&lt;br /&gt;
	iterate_table(part_data, &amp;#039;1&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	part_data = mw.loadData (&amp;#039;Module:Language/data/ISO 639 override&amp;#039;);			-- has override data for all parts&lt;br /&gt;
	for _, o_part in ipairs ({&amp;#039;1&amp;#039;, &amp;#039;2&amp;#039;, &amp;#039;2B&amp;#039;, &amp;#039;3&amp;#039;, &amp;#039;5&amp;#039;}) do						-- for each of the override tables&lt;br /&gt;
		local o_part_data = part_data[&amp;#039;override_&amp;#039; .. o_part];					-- point to override data&lt;br /&gt;
		o_part = &amp;#039;O&amp;#039; .. o_part;													-- prefix o_part&lt;br /&gt;
		iterate_table(o_part_data, o_part)										-- for each code in the data table and for each language name associated with that code&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	part_data = mw.loadData (&amp;#039;Module:Language/data/ISO 639 deprecated&amp;#039;);		-- has deprecated data for all parts&lt;br /&gt;
	for _, d_part in ipairs ({&amp;#039;1&amp;#039;, &amp;#039;2&amp;#039;, &amp;#039;2B&amp;#039;, &amp;#039;3&amp;#039;, &amp;#039;5&amp;#039;}) do						-- for each of the deprecated tables&lt;br /&gt;
		local d_part_data = part_data[&amp;#039;deprecated_&amp;#039; .. d_part];					-- point to deprecated data&lt;br /&gt;
		d_part = &amp;#039;D&amp;#039; .. d_part;													-- prefix d_part&lt;br /&gt;
		iterate_table(d_part_data, d_part)										-- for each code in the data table and for each language name associated with that code&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function comp (a, b)&lt;br /&gt;
		return tonumber (a:match (&amp;#039;(%d+)&amp;#039;)) &amp;lt; tonumber (b:match (&amp;#039;(%d+)&amp;#039;));&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for lang, codes in pairs (temp) do&lt;br /&gt;
		table.sort (codes, comp);														-- codes are added in the order that lang_add() is called above; sort to make pretty&lt;br /&gt;
		table.insert (out, table.concat ({&amp;#039;[&amp;quot;&amp;#039;, lang, &amp;#039;&amp;quot;] = {&amp;#039;, table.concat (codes, &amp;#039;, &amp;#039;), &amp;#039;}&amp;#039;}));	-- reformat&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	table.sort (out);															-- sort in language name order&lt;br /&gt;
&lt;br /&gt;
	local key_str = table.concat ({&lt;br /&gt;
		&amp;#039;--[[--------------------------&amp;lt; I S O _ 6 3 9 _ N A M E _ T O _ C O D E &amp;gt;--------------------------------------&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;#039;,&lt;br /&gt;
		&amp;#039;Key:&amp;lt;br /&amp;gt;&amp;amp;#9;&amp;#039;,&lt;br /&gt;
		&amp;#039;[1]=ISO 639-1&amp;amp;#9;&amp;amp;#9;[6]=ISO 639-1 override&amp;amp;#9;&amp;amp;#9;[11]=ISO 639-1 deprecated&amp;lt;br /&amp;gt;&amp;amp;#9;&amp;#039;,&lt;br /&gt;
		&amp;#039;[2]=ISO 639-2&amp;amp;#9;&amp;amp;#9;[7]=ISO 639-2 override&amp;amp;#9;&amp;amp;#9;[12]=ISO 639-2 deprecated&amp;lt;br /&amp;gt;&amp;amp;#9;&amp;#039;,&lt;br /&gt;
		&amp;#039;[3]=ISO 639-2B&amp;amp;#9;&amp;amp;#9;[8]=ISO 639-2B override&amp;amp;#9;&amp;amp;#9;[13]=ISO 639-2B deprecated&amp;lt;br /&amp;gt;&amp;amp;#9;&amp;#039;,&lt;br /&gt;
		&amp;#039;[4]=ISO 639-3&amp;amp;#9;&amp;amp;#9;[9]=ISO 639-3 override&amp;amp;#9;&amp;amp;#9;[14]=ISO 639-3 deprecated&amp;lt;br /&amp;gt;&amp;amp;#9;&amp;#039;,&lt;br /&gt;
		&amp;#039;[5]=ISO 639-5&amp;amp;#9;&amp;amp;#9;[10]=ISO 639-5 override&amp;amp;#9;&amp;amp;#9;[15]=ISO 639-5 deprecated&amp;#039;,&lt;br /&gt;
		&amp;#039;&amp;lt;br /&amp;gt;]]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;#039;&lt;br /&gt;
		})&lt;br /&gt;
	&lt;br /&gt;
	return table.concat ({&amp;#039;&amp;lt;pre&amp;gt;&amp;#039;, key_str, &amp;#039;return {&amp;lt;br /&amp;gt;&amp;amp;#9;&amp;#039;, table.concat (out, &amp;#039;,&amp;lt;br /&amp;gt;&amp;amp;#9;&amp;#039;), &amp;#039;&amp;lt;br /&amp;gt;&amp;amp;#9;}&amp;lt;br /&amp;gt;&amp;lt;/pre&amp;gt;&amp;#039;});	-- render&lt;br /&gt;
end&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 {iso_639_name_to_code = iso_639_name_to_code}&lt;/div&gt;</summary>
		<author><name>imported&gt;WOSlinker</name></author>
	</entry>
</feed>