After this please update Module:ISO 639/data/altnames using Module:ISO 639/data/altnames/make

  1. Open a blank sandbox page and paste {{#invoke:ISO 639/data/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_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/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)

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


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"];
	
	content = mw.ustring.gsub (content,"-","DASH")
	content = mw.ustring.gsub (content," ","SPACE")
	content = mw.ustring.gsub (content,"%(","BRAKCETOPEN")
	content = mw.ustring.gsub (content,"%)","BRACKETCLOSE")
	content = mw.ustring.gsub (content,"'","APOSTROPHE")
	content = mw.ustring.gsub (content,"’","APOSTROPHE2")
	
	for part3, part2, part1, name in mw.ustring.gmatch (content, '\n(%w%w%w)\t(%w*)\t%a*\t(%w*)\t%a*\t%w*\t(%w*)') do
		
		name = mw.ustring.gsub (name,"DASH","-")
		name = mw.ustring.gsub (name,"SPACE"," ")
		name = mw.ustring.gsub (name,"BRAKCETOPEN","(")
		name = mw.ustring.gsub (name,"BRACKETCLOSE",")")
		name = mw.ustring.gsub (name,"APOSTROPHE","'")
		name = mw.ustring.gsub (name,"APOSTROPHE2","’")
		
		if part3 then
			if string.find (lang_table[#lang_table] or '', '^%[\"' .. part3) then								
				lang_table[#lang_table] = mw.ustring.gsub (lang_table[#lang_table], '}$', '');						
				lang_table[#lang_table] = lang_table[#lang_table] .. ', \"' .. "name" .. '\"}';							
			else
				table.insert (lang_table, 
					"[\"" .. part3 .. "\"] = {part2=\"" .. part2 .."\",part1 = \"" .. part1 .."\",name = \"" .. name .."\"}");		
			end
		else
			table.insert (lang_table, "[\"ERROR\"] = {" .. "ERROR" .. "}");					
		end
	end
	
	
	return "<br /><pre>-- " .. file_date .. "<br>-- [&quot;Part 3&quot;] = {part2=&quot;Part 2&quot;,part1=&quot;Part 1&quot;,name=&quot;Name&quot;} <br>-- You can update the code using [[Module:ISO 639/data/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;