Please update Module:ISO 639/data using Module:ISO 639/data/make FIRST!

  1. Open a blank sandbox page and paste {{#invoke:ISO 639/data/altnames/make|extract|file-date=YYYYMMDD}} into it at the top line.
  2. Where YYYYMMDD is year, month, day from the .tab filename
  3. Go to sil.org (ISO 639-3) and download the Complete Code Tables Set UTF-8 version zip file
  4. Unzip the zip file and open iso-639-3_Name_Index_YYYYMMDD.tab with a plain-text editor (such as notepad or notepad++)
  5. Copy the data from the editor and paste it into the sandbox page below the {{#invoke:ISO 639/data/altnames/make|extract|file-date=YYYYMMDD}}
  6. Click Show preview or Publish changes
  7. Wait
  8. Get result (If needed copy them to Module:ISO 639/data/altnames)

You can use this sandbox Module talk:ISO 639/data/altnames/sandbox


-- Keep Here
local p = {}

function p.extract (frame)
	local page = mw.title.getCurrentTitle();																	
	local content = page:getContent();																				
	local lang_table = {};																							
	local file_date = 'File-Date: ' .. frame.args["file-date"];
	local data = mw.loadData("Module:ISO 639/data")
	
	local remove = {["-"]="DASH",[" "]="SPACE",["%("]="BRAKCETOPEN",["%)"]="BRACKETCLOSE",["'"]="APOSTROPHE",["’"]="APOSTROPHE2",["’"]="APOSTROPHE2",["_"]="UNDERLINE",[","]="COMMA"}
	local add = {["DASH"]="-",["SPACE"]=" ",["BRAKCETOPEN"]="(",["BRACKETCLOSE"]=")",["APOSTROPHE"]="'",["APOSTROPHE2"]="’",["APOSTROPHE2"]="’",["UNDERLINE"]="_",["COMMA"]=","}
	
	for k,v in pairs(remove) do
		content = mw.ustring.gsub(content,k,v)
	end
	
	for code, print, invert in mw.ustring.gmatch (content, '\n(%w%w%w)\t*(%w*)\t*(%w*)') do
		
		local name = data[code].name
		
		for k,v in pairs(remove) do
			name = mw.ustring.gsub(name,k,v)
		end
		
		local print  = string.gsub (print ,name,"")
		local invert  = string.gsub (invert ,name,"")
		
		if print == invert then
			invert = ""
		end
		
		--if print == mw.ustring.match (print,"%a+%A+%a+") then
		--	print = mw.ustring.gsub (print,"	","","")
		--end
		
		if invert ~= "" then
			for k,v in pairs(add) do
				invert = mw.ustring.gsub(invert,k,v)
			end
			table.insert(lang_table,"[\"" .. invert .. "\"] = \"" .. code  .. "\"");
		end
		
		if print ~= "" then
			for k,v in pairs(add) do
				print = mw.ustring.gsub(print,k,v)
			end
			table.insert(lang_table,"[\"" .. print .. "\"] = \"" .. code  .. "\"");
		end
	end
	
	
	return "<br /><pre>-- " .. file_date .. "<br>-- [&quot;Name&quot;] = {&quot;Part 3&quot;} <br>-- You can update the code using [[Module:ISO 639/data/altnames/make]]<br>-- For more information about ISO 639 see [[ISO 639]]<br><br>return {<br />&#9;" .. table.concat (lang_table, ',<br />&#9;') .. "<br />&#9;}<br />" .. "</pre>";
end

return p;