User:Monkbot/task 20: Replace lang-xx templates - Wikipedia


Article Images

This script renames transclusions of the ~1,150 different {{lang-??}} templates with the name of a single template, {{langx}}. See Wikipedia:Templates for discussion/Log/2024 September 27 § Replace and delete lang-?? templates.

Task 20 maintains internal lists of the templates listed in Wikipedia:Templates for discussion/Log/2024 September 27/lang-?? templates and their associated redirects. Conveniently, almost all of the templates in the list are consistently named.

For consistently named {{lang-??}} templates and redirects, task 20 looks for that template's canonical name (first letter uppercase) in its template and redirect lists. When a known template or redirect is found, task 20 looks in its ignore-this-template-name list. If found there, task 20 tallies it and moves on to the next match. When a found template name is not to be ignored, task 20 preserves the IANA language subtags from the template name for use as the first positional parameter of {{langx}} and then replaces the original {{lang-??}} name with {{langx}}:

  • {{lang-es|casa}}{{langx|es|casa}}

There are a few templates and redirects that use nonstandard names. Task 20 maintains a list of known nonstandard names. Before it does anything else, task 20 looks for these nonstandard names and renames them to the appropriate standard-form {{lang-<whatever>}}. It then processes that standard-form template name (as just described) to see if it can rename it to a {{langx}} template (even when tat intermediate name does not exist):

  • {{Moldovan Cyrillic|лимба молдовеняскэ}}{{lang-ro-Cyrl-MD|лимба молдовеняскэ}}{{langx|ro-Cyrl-MD|лимба молдовеняскэ}}
    Moldovan Cyrillic: лимба молдовеняскэTemplate:Lang-ro-Cyrl-MDMoldovan: лимба молдовеняскэ

Task 20 performs no ancillary tasks.

This task does not do awb general fixes.

Task 20 writes an edit summary message that tallies the number of {{lang-??}} templates renamed, the number of {{lang-??}} templates skipped, and the number of {{lang-??}} templates ignored. The name(s) of skipped and ignored templates are included in the edit summary so that a manual review of task 20's edits may turn up templates that should have been renamed or should have been ignored.

The edit summary has a link to this page.

//---------------------------< M A I N >----------------------------------------------------------------------
//
// convert {{lang-??}} templates and their redirects to {{langx}} templates
//
// use this search:
//		hastemplate:"Module:Lang" insource:/\{ *[Ll]ang\-[a-z0-9\-]+/
//		hastemplate:"Module:Lang" insource:/\{ *[Ll]ang\-[^\|]+/
//

public string ProcessArticle(string ArticleText, string ArticleTitle, int wikiNamespace, out string Summary, out bool Skip)
	{
	Skip = false;
	Summary = "[[User:Monkbot/task 20|Task 20]] (dev test): rename {{lang-??}} templates to {{langx|??}}";
//	Summary = "[[User:Monkbot/task 20|Task 20]] (BRFA trial): rename {{lang-??}} templates to {{langx|??}}";
//	Summary = "[[User:Monkbot/task 20|Task 20]]: rename {{lang-??}} templates to {{langx|??}}";
	string	sub_summary = "";

	string pattern = "";
	
	foreach (KeyValuePair<string, string> entry in nonstandard_names_t)									// fetch each nonstandard redirect key/value pair
		{
		string key = entry.Key;																			// get the key
		pattern = @"(\{\{\s*)" + key + @"(\s*\|)";														// make a pattern
		ArticleText = Regex.Replace (ArticleText, pattern, "$1Lang-" + entry.Value + "$2");				// replace with canonical form
		}

	int		renamed_count = 0;																			// tally of templates renamed
	int		skipped_count = 0;																			// tally of pattern-matching templates skipped
	int		ignored_count = 0;																			// tally of pattern-matching templates ignored

	pattern = @"(\{\{\s*)(([Ll]ang)\-([a-zA-Z\-]+))(\s*)";												// regex to find {{lang-??}} templates; does not find numeric regions (none used)

	var		skipped_templates_t = new Dictionary<string, int>(){};
	var		ignored_templates_t = new Dictionary<string, int>(){};

	if (Regex.Match (ArticleText, pattern).Success)
		ArticleText = Regex.Replace (ArticleText, pattern,
			delegate(Match match)
				{
				string	template = match.Groups[0].Value;												// this will be returned if no changes
				string	key =  "Lang-" + match.Groups[4].Value;											// index into the various dictionaries; force first letter upper case for indexing
				
				if (ignored_names_t.ContainsKey (key))
					{
					ignored_count++;
					skip_ignore_list_add (ignored_templates_t, key);
					return template;																	// ignore known unsupported templates/redirects
					}

				if (update_map_t.ContainsKey (key))
					return counted_replace (template, pattern, "$1$3x$5|$4", ref renamed_count);		// return & tally modified template

				else if (redirects_map_t.ContainsKey (key))
					return counted_replace (template, pattern, "$1$3x$5|" + redirects_map_t[key], ref renamed_count);	// return & tally modified template

				skipped_count++;
				skip_ignore_list_add (skipped_templates_t, key);
				return template;																		// not a recognized template so return it unmolested
				});
	
	if (0 == renamed_count && 0 == skipped_count && 0 == ignored_count)									// no renames, no skips, no ignores
		{
		Skip = true;																					// no need to continue so
		return ArticleText;																				// abandon and done
		}
	
	string	skipped_list = "";																			// initialize the string form of the skipped list
	string	ignored_list = "";																			// initialize the string form of the ignored list

	if (0 != skipped_count)
		skipped_list = list_to_string (skipped_templates_t);											// convert to string for edit summary
	if (0 != ignored_count)
		ignored_list = list_to_string (ignored_templates_t);											// convert to string for edit summary
	
	sub_summary = sub_summary_get (0 != renamed_count, 0 != skipped_count, 0 != ignored_count, renamed_count, skipped_count, ignored_count, skipped_list, ignored_list, ref Skip);

	if (Skip)
		Summary = sub_summary;																			// only ignored summary for awb log
	else
		Summary = Summary + sub_summary;																// put it all together
	return ArticleText;																					// and done
	}


//===========================<< U T I L I T I E S >>==========================================================

//---------------------------< C O U N T E D _ R E P L A C E >------------------------------------------------
//
// common function to replace <pattern> with <replace> and bump <count> until no more <pattern>
//

private string counted_replace (string template, string pattern, string replace, ref int count)
	{
	Regex rgx = new Regex (pattern);											// make a new regex from <pattern>

	while (Regex.Match (template, pattern).Success)								// look for <pattern> in <template>
		{
		template = rgx.Replace (template, replace, 1);							// replace one copy of <pattern> with <replace>
		count++;																// bump the counter
		}

	return template;
	}


//---------------------------< S U B S U M M A R Y _ G E T >--------------------------------------------------
//
// Assemble 'sub-summary' of renamed, skipped, and ignored templates
//

private string sub_summary_get (bool renamed, bool skipped, bool ignored, int renamed_count, int skipped_count, int ignored_count, string skipped_list, string ignored_list, ref bool skip)
	{
	string sub_summary = "";
	
	if (renamed)																// 4, 5, 6, 7
		{
		if (skipped)															// 6, 7
			{
			if (ignored)														// 7
				sub_summary = " (Renamed " + renamed_count + "; skipped unknown " + skipped_count + ": " + skipped_list + "; ignored " + ignored_count + ": " + ignored_list;
			else 																// 6
				sub_summary = " (Renamed " + renamed_count + "; skipped unknown " + skipped_count + ": " + skipped_list;
			}
		else																	// 4, 5
			{
			if (ignored)														// 5
				sub_summary = " (Renamed " + renamed_count + "; ignored " + ignored_count + ": " + ignored_list;
			else																// 4
				sub_summary = " (Renamed " + renamed_count;
			}
		}
	else 
		{
		if (skipped)															// 1, 2, 3
			{
			if (ignored)														// 3
				sub_summary = " (Skipped unknown " + skipped_count + ": " + skipped_list + "; ignored " + ignored_count + ": " + ignored_list;
			else																// 2
				sub_summary = " (Skipped unknown " + skipped_count + ": " + skipped_list;
			}
		else 																	// 1
			{
			sub_summary = " (Ignored " + ignored_count + ": " + ignored_list;	// skip but include ignored in awb skip log
			skip = true;
			}
		}

	return sub_summary + ");";													// close parentheses and done
	}


//---------------------------< L I S T _ T O _ S T R I N G >--------------------------------------------------
//
// convert <list_t> to comma-separated list
//

private string list_to_string (Dictionary<string, int> list_t)
		{
		string	list_str = "";
		bool	first_template = true;											// flag to control comma separator us in skipped_list
		foreach (KeyValuePair<string, int> entry in list_t)						// fetch each key/value pair (only the key is used)
			{
			if (first_template)
				list_str = entry.Key;											// begin string with a template name
			else
				list_str = list_str + ", " + entry.Key;							// append template name with comma separator to the string

			first_template = false;
			}

		return list_str;
		}


//---------------------------< S K I P _ I G N O R E _ L I S T _ A D D >--------------------------------------
//
// add <key> to <list_t> if not already there; increment count else
//

private void skip_ignore_list_add (Dictionary<string, int> list_t, string key)
	{
	if (list_t.ContainsKey (key))												// already present
		list_t[key]++;															// bump the counter
	else
		list_t.Add (key, 1);													// add <key>; init counter to 1
	}


//===========================<< S T A T I C   D A T A >>======================================================


//---------------------------< I G N O R E D _ N A M E S _ T >------------------------------------------------
//
// the names in this list are standard-form template or standard-form redirect names.  These names are ignored
// because these templates are non-standard (they may use {{language with name}}, be plain-text, or have unique
// additional coding.  These are not listed in the TfD.
//
// all of the keys in this dictionary must be canonical form
//

static Dictionary<string, bool> ignored_names_t = new Dictionary<string, bool>()
	{
	{"Lang-grc-gre",			true},
	{"Lang-ka",					true},
	{"Lang-my-Mymr",			true},
	{"Lang-rus",				true},
	{"Lang-sh-Latn-Cyrl",		true},
	{"Lang-sq-definite",		true},
	{"Lang-sr-Cyrl",			true},
	{"Lang-vi-hantu",			true},
	{"Lang-zh",					true},

//----------< R E D I R E C T S >----------

	{"Lang-Chinese",			true},		// to lang-zh
	{"Lang-chi",				true},		// to lang-zh
	{"Lang-gb",					true},		// to lang-zh
	{"Lang-sr-cyr",				true},		// to Lang-sr-Cyrl
	{"Lang-sr-cyrl",			true},		// to Lang-sr-Cyrl
	{"Lang-zho",				true},		// to lang-zh
	{"Lang-zh-version2",		true},		// to lang-zh
	};


//---------------------------< N O N S T A N D A R D _ N A M E S _ T >----------------------------------------
//
// the names in this list are just non-standard template names or are non-standard redirects; they do not begin
// with 'lang-'
//
// keys in this table are patterns that make the first character case insensitive
//

static Dictionary<string, string> nonstandard_names_t = new Dictionary<string, string>()
	{
	{"[Ll]angDeu",				"de"},				// <key> redirects to Lang-<value>
	{"[Ll]ang de",				"de"},
	{"[Ll]angEsp",				"es"},
	{"[Ll]ang fr",				"fr"},
	{"[Hh]e",					"he"},
	{"[Ii]n la",				"la"},
	{"[Ll]angLat",				"la"},
	{"[Mm]s",					"ms"},
	{"[Nn]orwegian",			"no"},
	{"[S]san",					"sa"},
	{"[Ll]ang sl",				"sl"},
	{"[Ss]q",					"sq"},
	{"[Tt]e",					"te"},
	{"[Tt]hai",					"th"},
	{"[Tt]h-lang",				"th"},
	{"[Ll]an-tr",				"tr"},				// yes, really, no 'g'
	{"[Uu]g",					"ug"},
	{"[Uu]yghur",				"ug"},

//----------< T H E   S E C O N D   A D D E N D U M >----------

	{"[Mm]oldovan Cyrillic",	"ro-Cyrl-MD"},

	};


//---------------------------< R E D I R E C T S _ M A P _ T >------------------------------------------------
//
// list of standard format ({{lang-??|...}}) redirects to be updated to {{langx|??|...}}
//
// all of the keys in this dictionary must be canonical form
//

static Dictionary<string, string> redirects_map_t = new Dictionary<string, string>()
	{
//----------< M A D E U P   T A G S >----------
	{"Lang-gr",					"el"},				// <key> redirects to Lang-<value>
	{"Lang-oe",					"ang"},
	{"Lang-ar-at",				"ar"},
	{"Lang-Assamese1",			"as"},
	{"Lang-as1",				"as"},
	{"Lang-Bengali1",			"bn"},
	{"Lang-Bengali",			"bn"},
	{"Lang-bo1",				"bo"},
	{"Lang-brx1",				"brx"},
	{"Lang-bs-Latn",			"bs"},
	{"Lang-vl",					"ca-valencia"},
	{"Lang-va",					"ca-valencia"},
	{"Lang-sorani",				"ckb"},
	{"Lang-cg",					"cnr"},
	{"Lang-cz",					"cs"},
	{"Lang-dk",					"da"},
	{"Lang-de1",				"de"},
	{"Lang-mahal",				"dv"},
	{"Lang-dmh",				"dv"},
	{"Lang-en-au",				"en"},
	{"Lang-en-Au",				"en"},
	{"Lang-en-em",				"en-emodeng"},
	{"Lang-ekk",				"et"},
	{"Lang-fa-at",				"fa"},
	{"Lang-persian",			"fa"},
	{"Lang-ir",					"ga"},
	{"Lang-scoga",				"gd"},
	{"Lang-grc-aeo",			"grc-x-aeolic"},
	{"Lang-grc-att",			"grc-x-attic"},
	{"Lang-grc-bib",			"grc-x-biblical"},
	{"Lang-grc-classic",		"grc-x-classic"},
	{"Lang-grc-classical",		"grc-x-classic"},
	{"Lang-grc-x-classical",	"grc-x-classic"},
	{"Lang-grc-x-cla",			"grc-x-classic"},
	{"Lang-grc-cla",			"grc-x-classic"},
	{"Lang-grc-cls",			"grc-x-classic"},
	{"Lang-grc-dor",			"grc-x-doric"},
	{"Lang-grc-hellen",			"grc-x-hellen"},
	{"Lang-grc-hellenistic",	"grc-x-hellen"},
	{"Lang-grc-hellenic",		"grc-x-hellen"},
	{"Lang-grc-hel",			"grc-x-hellen"},
	{"Lang-grc-x-hellenic",		"grc-x-hellen"},
	{"Lang-grc-x-hellenistic",	"grc-x-hellen"},
	{"Lang-grc-ion",			"grc-x-ionic"},
	{"Lang-grc-ionic",			"grc-x-ionic"},
	{"Lang-grc-koi",			"grc-x-koine"},
	{"Lang-gkm",				"grc-x-medieval"},
	{"Lang-grc-x-byzant",		"grc-x-medieval"},
	{"Lang-grc-byz",			"grc-x-medieval"},
	{"Lang-grc-byzantine",		"grc-x-medieval"},
	{"Lang-grc-x-byzantine",	"grc-x-medieval"},
	{"Lang-grc-med",			"grc-x-medieval"},
	{"Lang-grc-x-med",			"grc-x-medieval"},
	{"Lang-grc-x-mediev",		"grc-x-medieval"},
	{"Lang-grc-x-pat",			"grc-x-patris"},
	{"Lang-grc-x-patristic",	"grc-x-patris"},
	{"Lang-grc-pat",			"grc-x-patris"},
	{"Lang-he1",				"he"},
	{"Lang-iw",					"he"},
	{"Lang-hi1",				"hi"},
	{"Lang-Hindi1",				"hi"},
	{"Lang-Hindi",				"hi"},
	{"Lang-hk",					"hnd"},
	{"Lang-scr",				"hr"},
	{"Lang-jw",					"jv"},
	{"Lang-kz",					"kk"},
	{"Lang-kk-Cyrl",			"kk"},
	{"Lang-ku-Latn",			"ku"},
	{"Lang-kpv",				"kv"},
	{"Lang-lat-med",			"la-x-medieval"},
	{"Lang-lvs",				"lv"},
	{"Lang-Karbi",				"mjw"},
	{"Lang-zlm",				"ms"},
	{"Lang-mly",				"ms"},
	{"Lang-plm",				"mui"},
	{"Lang-nan-TW",				"nan"},
	{"Lang-nci-IPA",			"nci"},
	{"Lang-prv",				"oc"},
	{"Lang-Or",					"or"},
	{"Lang-oc-gsc",				"oc-gascon"},
	{"Lang-od",					"or"},
	{"Lang-sxo",				"osx"},
	{"Lang-pr",					"pra"},
	{"Lang-mol",				"ro"},
	{"Lang-md",					"ro"},
	{"Lang-mo",					"ro"},
	{"Lang-ry",					"rue"},
	{"Lang-sa1",				"sa"},
	{"Lang-Sindhi1",			"sd"},
	{"Lang-bat-smg",			"sgs"},
	{"Lang-hs",					"sh"},
	{"Lang-hbs",				"sh"},
	{"Lang-al",					"sq"},
	{"Lang-scc",				"sr"},
	{"Lang-usl",				"szl"},
	{"Lang-tm",					"tk"},
	{"Lang-tk-Latn",			"tk"},
	{"Lang-ug3",				"ug"},
	{"Lang-uy",					"ug"},
	{"Lang-ugr",				"uga"},
	{"Lang-ua",					"uk"},
	{"Lang-Urdu1",				"ur"},
	{"Lang-yi1",				"yi"},
	{"Lang-ji",					"yi"},
	{"Lang-Nenets",				"yrk"},

	
//----------< T H E   S E C O N D   A D D E N D U M >----------

	{"Lang-fra-que",			"fr-CA"},		// converted wrapper around {{language with name}}

	{"Lang-ro-Cyrl-MD",			"ro-Cyrl-MD"},	// converted from {{Moldovan Cyrillic}}
	{"Lang-mo-Cyrl",			"ro-Cyrl-MD"},	// and its redirect
	

//----------< I S O 6 3 9 - 2 / - 3   S Y N O N Y M S   O F   I S O 6 3 9 - 1 >----------

	{"Lang-aar",				"aa"},
	{"Lang-abk",				"ab"},
	{"Lang-afr",				"af"},
	{"Lang-aka",				"ak"},
	{"Lang-alb",				"sq"},
	{"Lang-amh",				"am"},
	{"Lang-ara",				"ar"},
	{"Lang-arg",				"an"},
	{"Lang-arm",				"hy"},
	{"Lang-asm",				"as"},
	{"Lang-ava",				"av"},
	{"Lang-ave",				"ae"},
	{"Lang-aym",				"ay"},
	{"Lang-aze",				"az"},
	{"Lang-bak",				"ba"},
	{"Lang-bam",				"bm"},
	{"Lang-baq",				"eu"},
	{"Lang-bel",				"be"},
	{"Lang-ben",				"bn"},
	{"Lang-bis",				"bi"},
	{"Lang-bod",				"bo"},
	{"Lang-bos",				"bs"},
	{"Lang-bre",				"br"},
	{"Lang-bul",				"bg"},
	{"Lang-bur",				"my"},
	{"Lang-cat",				"ca"},
	{"Lang-ces",				"cs"},
	{"Lang-cha",				"ch"},
	{"Lang-che",				"ce"},
	{"Lang-chu",				"cu"},
	{"Lang-chv",				"cv"},
	{"Lang-cor",				"kw"},
	{"Lang-cos",				"co"},
	{"Lang-cre",				"cr"},
	{"Lang-cym",				"cy"},
	{"Lang-cze",				"cs"},
	{"Lang-dan",				"da"},
	{"Lang-deu",				"de"},
	{"Lang-div",				"dv"},
	{"Lang-dut",				"nl"},
	{"Lang-dzo",				"dz"},
	{"Lang-ell",				"el"},
	{"Lang-eng",				"en"},
	{"Lang-epo",				"eo"},
	{"Lang-est",				"et"},
	{"Lang-eus",				"eu"},
	{"Lang-ewe",				"ee"},
	{"Lang-fao",				"fo"},
	{"Lang-fas",				"fa"},
	{"Lang-fij",				"fj"},
	{"Lang-fin",				"fi"},
	{"Lang-fra",				"fr"},
	{"Lang-fre",				"fr"},
	{"Lang-fry",				"fy"},
	{"Lang-ful",				"ff"},
	{"Lang-geo",				"ka"},
	{"Lang-ger",				"de"},
	{"Lang-gla",				"gd"},
	{"Lang-gle",				"ga"},
	{"Lang-glg",				"gl"},
	{"Lang-glv",				"gv"},
	{"Lang-gre",				"el"},
	{"Lang-grn",				"gn"},
	{"Lang-guj",				"gu"},
	{"Lang-hat",				"ht"},
	{"Lang-hau",				"ha"},
	{"Lang-heb",				"he"},
	{"Lang-her",				"hz"},
	{"Lang-hin",				"hi"},
	{"Lang-hmo",				"ho"},
	{"Lang-hrv",				"hr"},
	{"Lang-hun",				"hu"},
	{"Lang-hye",				"hy"},
	{"Lang-ibo",				"ig"},
	{"Lang-ice",				"is"},
	{"Lang-ido",				"io"},
	{"Lang-iii",				"ii"},
	{"Lang-iku",				"iu"},
	{"Lang-ile",				"ie"},
	{"Lang-ina",				"ia"},
	{"Lang-ind",				"id"},
	{"Lang-ipk",				"ik"},
	{"Lang-isl",				"is"},
	{"Lang-ita",				"it"},
	{"Lang-jav",				"jv"},
	{"Lang-jpn",				"ja"},
	{"Lang-kal",				"kl"},
	{"Lang-kan",				"kn"},
	{"Lang-kas",				"ks"},
	{"Lang-kat",				"ka"},
	{"Lang-kau",				"kr"},
	{"Lang-kaz",				"kk"},
	{"Lang-khm",				"km"},
	{"Lang-kik",				"ki"},
	{"Lang-kin",				"rw"},
	{"Lang-kir",				"ky"},
	{"Lang-kom",				"kv"},
	{"Lang-kon",				"kg"},
	{"Lang-kor",				"ko"},
	{"Lang-kua",				"kj"},
	{"Lang-kur",				"ku"},
	{"Lang-lao",				"lo"},
	{"Lang-lat",				"la"},
	{"Lang-lav",				"lv"},
	{"Lang-lim",				"li"},
	{"Lang-lin",				"ln"},
	{"Lang-lit",				"lt"},
	{"Lang-ltz",				"lb"},
	{"Lang-lub",				"lu"},
	{"Lang-lug",				"lg"},
	{"Lang-mac",				"mk"},
	{"Lang-mah",				"mh"},
	{"Lang-mal",				"ml"},
	{"Lang-mao",				"mi"},
	{"Lang-mar",				"mr"},
	{"Lang-may",				"ms"},
	{"Lang-mkd",				"mk"},
	{"Lang-mlg",				"mg"},
	{"Lang-mlt",				"mt"},
	{"Lang-mon",				"mn"},
	{"Lang-mri",				"mi"},
	{"Lang-msa",				"ms"},
	{"Lang-mya",				"my"},
	{"Lang-nau",				"na"},
	{"Lang-nav",				"nv"},
	{"Lang-nbl",				"nr"},
	{"Lang-nde",				"nd"},
	{"Lang-ndo",				"ng"},
	{"Lang-nep",				"ne"},
	{"Lang-nld",				"nl"},
	{"Lang-nno",				"nn"},
	{"Lang-nob",				"nb"},
	{"Lang-nor",				"no"},
	{"Lang-nya",				"ny"},
	{"Lang-oci",				"oc"},
	{"Lang-oji",				"oj"},
	{"Lang-ori",				"or"},
	{"Lang-orm",				"om"},
	{"Lang-oss",				"os"},
	{"Lang-pan",				"pa"},
	{"Lang-per",				"fa"},
	{"Lang-pli",				"pi"},
	{"Lang-pol",				"pl"},
	{"Lang-por",				"pt"},
	{"Lang-pus",				"ps"},
	{"Lang-que",				"qu"},
	{"Lang-roh",				"rm"},
	{"Lang-ron",				"ro"},
	{"Lang-rum",				"ro"},
	{"Lang-run",				"rn"},
	{"Lang-sag",				"sg"},
	{"Lang-san",				"sa"},
	{"Lang-sin",				"si"},
	{"Lang-slk",				"sk"},
	{"Lang-slo",				"sk"},
	{"Lang-slv",				"sl"},
	{"Lang-sme",				"se"},
	{"Lang-smo",				"sm"},
	{"Lang-sna",				"sn"},
	{"Lang-snd",				"sd"},
	{"Lang-som",				"so"},
	{"Lang-sot",				"st"},
	{"Lang-spa",				"es"},
	{"Lang-sqi",				"sq"},
	{"Lang-srd",				"sc"},
	{"Lang-srp",				"sr"},
	{"Lang-ssw",				"ss"},
	{"Lang-sun",				"su"},
	{"Lang-swa",				"sw"},
	{"Lang-swe",				"sv"},
	{"Lang-tah",				"ty"},
	{"Lang-tam",				"ta"},
	{"Lang-tat",				"tt"},
	{"Lang-tel",				"te"},
	{"Lang-tgk",				"tg"},
	{"Lang-tgl",				"tl"},
	{"Lang-tha",				"th"},
	{"Lang-tib",				"bo"},
	{"Lang-tir",				"ti"},
	{"Lang-ton",				"to"},
	{"Lang-tsn",				"tn"},
	{"Lang-tso",				"ts"},
	{"Lang-tuk",				"tk"},
	{"Lang-tur",				"tr"},
	{"Lang-twi",				"tw"},
	{"Lang-uig",				"ug"},
	{"Lang-ukr",				"uk"},
	{"Lang-urd",				"ur"},
	{"Lang-uzb",				"uz"},
	{"Lang-ven",				"ve"},
	{"Lang-vie",				"vi"},
	{"Lang-vol",				"vo"},
	{"Lang-wel",				"cy"},
	{"Lang-wln",				"wa"},
	{"Lang-wol",				"wo"},
	{"Lang-xho",				"xh"},
	{"Lang-yid",				"yi"},
	{"Lang-yor",				"yo"},
	{"Lang-zha",				"za"},
	{"Lang-zul",				"zu"},
	};


//---------------------------< U P D A T E _ M A P >----------------------------------------------------------
//
// list of {{lang-??|...}} templates to be updated to {{langx|??|...}}
//
// all of the keys in this dictionary must be canonical form
//

static Dictionary<string, bool> update_map_t = new Dictionary<string, bool>()
	{
//----------< T H E   F I R S T   A D D E N D U M >----------

	{"Lang-az-Cyrl",			true},			// these all escaped the search
	{"Lang-bs-Cyrl",			true},
	{"Lang-cnr-Cyrl",			true},
	{"Lang-de-CH",				true},
	{"Lang-en-AU",				true},
	{"Lang-en-CA",				true},
	{"Lang-en-GB",				true},
	{"Lang-en-IE",				true},
	{"Lang-en-IN",				true},
	{"Lang-en-NZ",				true},
	{"Lang-en-US",				true},
	{"Lang-en-ZA",				true},
	{"Lang-gsw-FR",				true},
	{"Lang-lij-MC",				true},
	{"Lang-ms-Arab",			true},
	{"Lang-nds-NL",				true},
	{"Lang-nl-BE",				true},
	{"Lang-pt-BR",				true},
	{"Lang-tk-Cyrl",			true},
	{"Lang-tt-Arab",			true},
	{"Lang-tt-Cyrl",			true},
	{"Lang-tt-Latn",			true},
	{"Lang-xal-RU",				true},

	{"Lang-tuo",				true},			// created after the start of the TfD

//----------< T H E   S E C O N D   A D D E N D U M >----------

	{"Lang-az-Arab",			true},			// convert from {{language with name}}
	{"Lang-cnr-Latn",			true},			// escaped the search
	{"Lang-fr-gallo",			true},			// convert from {{language with name}}
	{"Lang-ku-Cyrl",			true},			// convert from {{language with name}}
	{"Lang-oc-gascon",			true},			// convert from {{language with name}}
	{"Lang-sco-ulster",			true},			// convert from wrapper around {{lang}}
	{"Lang-uz-Cyrl",			true},			// escaped the search
	{"Lang-wbp",				true},			// escaped the search
	{"Lang-zku",				true},			// escaped the search



//----------< T H E   I N I T I A L   L I S T >----------
//
// from this search: https://en.wikipedia.org/w/index.php?search=incategory%3A%22Lang-x+templates%22+insource%3A%22lang_xx_%22&ns10=1
//
//

	{"Lang-aa",					true},
	{"Lang-aae",				true},
	{"Lang-aaq",				true},
	{"Lang-aav",				true},
	{"Lang-ab",					true},
	{"Lang-abe",				true},
	{"Lang-abl",				true},
	{"Lang-abq",				true},
	{"Lang-aca",				true},
	{"Lang-ace",				true},
	{"Lang-acf",				true},
	{"Lang-acm",				true},
	{"Lang-acw",				true},
	{"Lang-ady",				true},
	{"Lang-ae",					true},
	{"Lang-aeb",				true},
	{"Lang-aec",				true},
	{"Lang-aer",				true},
	{"Lang-af",					true},
	{"Lang-afa",				true},
	{"Lang-afb",				true},
	{"Lang-aht",				true},
	{"Lang-aii",				true},
	{"Lang-aij",				true},
	{"Lang-ain",				true},
	{"Lang-aiq",				true},
	{"Lang-ajp",				true},
	{"Lang-ak",					true},
	{"Lang-akb",				true},
	{"Lang-akk",				true},
	{"Lang-akk-x-latbabyl",		true},
	{"Lang-akk-x-midassyr",		true},
	{"Lang-akk-x-midbabyl",		true},
	{"Lang-akk-x-neoassyr",		true},
	{"Lang-akk-x-neobabyl",		true},
	{"Lang-akk-x-oldassyr",		true},
	{"Lang-akk-x-oldbabyl",		true},
	{"Lang-akl",				true},
	{"Lang-akz",				true},
	{"Lang-ale",				true},
	{"Lang-alg",				true},
	{"Lang-aln",				true},
	{"Lang-alq",				true},
	{"Lang-als",				true},
	{"Lang-alt",				true},
	{"Lang-alv",				true},
	{"Lang-am",					true},
	{"Lang-ami",				true},
	{"Lang-amw",				true},
	{"Lang-an",					true},
	{"Lang-ang",				true},
	{"Lang-anm",				true},
	{"Lang-aoa",				true},
	{"Lang-apa",				true},
	{"Lang-apc",				true},
	{"Lang-apj",				true},
	{"Lang-apm",				true},
	{"Lang-apw",				true},
	{"Lang-aqa",				true},
	{"Lang-aql",				true},
	{"Lang-ar",					true},
	{"Lang-arb",				true},
	{"Lang-arc",				true},
	{"Lang-arh",				true},
	{"Lang-ari",				true},
	{"Lang-arn",				true},
	{"Lang-arp",				true},
	{"Lang-arq",				true},
	{"Lang-ars",				true},
	{"Lang-art",				true},
	{"Lang-ary",				true},
	{"Lang-arz",				true},
	{"Lang-as",					true},
	{"Lang-asb",				true},
	{"Lang-ast",				true},
	{"Lang-ath",				true},
	{"Lang-ats",				true},
	{"Lang-auf",				true},
	{"Lang-aus",				true},
	{"Lang-av",					true},
	{"Lang-awa",				true},
	{"Lang-awd",				true},
	{"Lang-awk",				true},
	{"Lang-axm",				true},
	{"Lang-ay",					true},
	{"Lang-ayn",				true},
	{"Lang-ayp",				true},
	{"Lang-az",					true},
	{"Lang-azb",				true},
	{"Lang-azc",				true},
	{"Lang-azd",				true},
	{"Lang-azj",				true},
	{"Lang-ba",					true},
	{"Lang-bac",				true},
	{"Lang-bad",				true},
	{"Lang-bai",				true},
	{"Lang-bal",				true},
	{"Lang-ban",				true},
	{"Lang-bar",				true},
	{"Lang-bat",				true},
	{"Lang-bax",				true},
	{"Lang-bbc",				true},
	{"Lang-bcl",				true},
	{"Lang-bdz",				true},
	{"Lang-be",					true},
	{"Lang-bea",				true},
	{"Lang-bej",				true},
	{"Lang-bek",				true},
	{"Lang-bem",				true},
	{"Lang-ber",				true},
	{"Lang-bew",				true},
	{"Lang-bft",				true},
	{"Lang-bg",					true},
	{"Lang-bgn",				true},
	{"Lang-bh",					true},
	{"Lang-bho",				true},
	{"Lang-bi",					true},
	{"Lang-bik",				true},
	{"Lang-bin",				true},
	{"Lang-bjn",				true},
	{"Lang-bla",				true},
	{"Lang-blc",				true},
	{"Lang-blk",				true},
	{"Lang-bm",					true},
	{"Lang-bn",					true},
	{"Lang-bnt",				true},
	{"Lang-bo",					true},
	{"Lang-bpy",				true},
	{"Lang-bqi",				true},
	{"Lang-br",					true},
	{"Lang-brh",				true},
	{"Lang-brx",				true},
	{"Lang-bs",					true},
	{"Lang-bsk",				true},
	{"Lang-bsq",				true},
	{"Lang-btd",				true},
	{"Lang-btk",				true},
	{"Lang-btm",				true},
	{"Lang-bts",				true},
	{"Lang-btx",				true},
	{"Lang-btz",				true},
	{"Lang-bua",				true},
	{"Lang-buc",				true},
	{"Lang-bug",				true},
	{"Lang-bvb",				true},
	{"Lang-bxr",				true},
	{"Lang-bya",				true},
	{"Lang-bzj",				true},
	{"Lang-ca",					true},
	{"Lang-ca-valencia",		true},
	{"Lang-cai",				true},
	{"Lang-cal",				true},
	{"Lang-cau",				true},
	{"Lang-cay",				true},
	{"Lang-cba",				true},
	{"Lang-cbk",				true},
	{"Lang-ccn",				true},
	{"Lang-ccp",				true},
	{"Lang-ccs",				true},
	{"Lang-cdc",				true},
	{"Lang-cdd",				true},
	{"Lang-cdo",				true},
	{"Lang-ce",					true},
	{"Lang-ceb",				true},
	{"Lang-cel",				true},
	{"Lang-cel-x-proto",		true},
	{"Lang-ch",					true},
	{"Lang-chg",				true},
	{"Lang-chm",				true},
	{"Lang-chn",				true},
	{"Lang-cho",				true},
	{"Lang-chp",				true},
	{"Lang-chr",				true},
	{"Lang-chy",				true},
	{"Lang-cic",				true},
	{"Lang-cim",				true},
	{"Lang-ciw",				true},
	{"Lang-cja",				true},
	{"Lang-cjm",				true},
	{"Lang-cjs",				true},
	{"Lang-ckb",				true},
	{"Lang-ckt",				true},
	{"Lang-cku",				true},
	{"Lang-cld",				true},
	{"Lang-clm",				true},
	{"Lang-cmc",				true},
	{"Lang-cmg",				true},
	{"Lang-cml",				true},
	{"Lang-cmn",				true},
	{"Lang-cms",				true},
	{"Lang-cnr",				true},
	{"Lang-cnu",				true},
	{"Lang-co",					true},
	{"Lang-coa",				true},
	{"Lang-coc",				true},
	{"Lang-coj",				true},
	{"Lang-com",				true},
	{"Lang-coo",				true},
	{"Lang-cop",				true},
	{"Lang-cpe",				true},
	{"Lang-cpf",				true},
	{"Lang-cpg",				true},
	{"Lang-cpp",				true},
	{"Lang-cr",					true},
	{"Lang-crg",				true},
	{"Lang-crh",				true},
	{"Lang-cri",				true},
	{"Lang-crj",				true},
	{"Lang-crk",				true},
	{"Lang-crl",				true},
	{"Lang-crm",				true},
	{"Lang-cro",				true},
	{"Lang-crp",				true},
	{"Lang-crr",				true},
	{"Lang-cs",					true},
	{"Lang-csb",				true},
	{"Lang-csu",				true},
	{"Lang-csw",				true},
	{"Lang-csz",				true},
	{"Lang-ctd",				true},
	{"Lang-ctg",				true},
	{"Lang-ctm",				true},
	{"Lang-cu",					true},
	{"Lang-cus",				true},
	{"Lang-cv",					true},
	{"Lang-cwd",				true},
	{"Lang-cy",					true},
	{"Lang-cyo",				true},
	{"Lang-da",					true},
	{"Lang-dag",				true},
	{"Lang-dak",				true},
	{"Lang-dar",				true},
	{"Lang-day",				true},
	{"Lang-ddo",				true},
	{"Lang-de",					true},
	{"Lang-de-AT",				true},
	{"Lang-deh",				true},
	{"Lang-del",				true},
	{"Lang-den",				true},
	{"Lang-dev",				true},
	{"Lang-dgo",				true},
	{"Lang-din",				true},
	{"Lang-diq",				true},
	{"Lang-dlg",				true},
	{"Lang-dlm",				true},
	{"Lang-dmn",				true},
	{"Lang-dng",				true},
	{"Lang-dra",				true},
	{"Lang-dsb",				true},
	{"Lang-dum",				true},
	{"Lang-dv",					true},
	{"Lang-dyu",				true},
	{"Lang-dz",					true},
	{"Lang-ee",					true},
	{"Lang-efi",				true},
	{"Lang-egl",				true},
	{"Lang-egx",				true},
	{"Lang-egy",				true},
	{"Lang-el",					true},
	{"Lang-elx",				true},
	{"Lang-emb",				true},
	{"Lang-ems",				true},
	{"Lang-en",					true},
	{"Lang-en-emodeng",			true},
	{"Lang-enf",				true},
	{"Lang-enh",				true},
	{"Lang-enm",				true},
	{"Lang-eno",				true},
	{"Lang-eo",					true},
	{"Lang-es",					true},
	{"Lang-ess",				true},
	{"Lang-esu",				true},
	{"Lang-esx",				true},
	{"Lang-et",					true},
	{"Lang-ett",				true},
	{"Lang-eu",					true},
	{"Lang-euq",				true},
	{"Lang-eve",				true},
	{"Lang-evn",				true},
	{"Lang-ext",				true},
	{"Lang-fa",					true},
	{"Lang-fan",				true},
	{"Lang-fax",				true},
	{"Lang-ff",					true},
	{"Lang-fi",					true},
	{"Lang-fil",				true},
	{"Lang-fit",				true},
	{"Lang-fiu",				true},
	{"Lang-fj",					true},
	{"Lang-fkv",				true},
	{"Lang-fla",				true},
	{"Lang-fmp",				true},
	{"Lang-fo",					true},
	{"Lang-fon",				true},
	{"Lang-fox",				true},
	{"Lang-fr",					true},
	{"Lang-frc",				true},
	{"Lang-frk",				true},
	{"Lang-frm",				true},
	{"Lang-fro",				true},
	{"Lang-frp",				true},
	{"Lang-frr",				true},
	{"Lang-frs",				true},
	{"Lang-fuc",				true},
	{"Lang-fuf",				true},
	{"Lang-fur",				true},
	{"Lang-fwa",				true},
	{"Lang-fy",					true},
	{"Lang-ga",					true},
	{"Lang-gaa",				true},
	{"Lang-gad",				true},
	{"Lang-gag",				true},
	{"Lang-gay",				true},
	{"Lang-gbm",				true},
	{"Lang-gbz",				true},
	{"Lang-gcf",				true},
	{"Lang-gcr",				true},
	{"Lang-gd",					true},
	{"Lang-gem",				true},
	{"Lang-gem-x-proto",		true},
	{"Lang-gez",				true},
	{"Lang-gil",				true},
	{"Lang-git",				true},
	{"Lang-gju",				true},
	{"Lang-gl",					true},
	{"Lang-glk",				true},
	{"Lang-gme",				true},
	{"Lang-gmh",				true},
	{"Lang-gml",				true},
	{"Lang-gmq",				true},
	{"Lang-gmw",				true},
	{"Lang-gmy",				true},
	{"Lang-gn",					true},
	{"Lang-gnc",				true},
	{"Lang-goh",				true},
	{"Lang-gom",				true},
	{"Lang-gor",				true},
	{"Lang-gos",				true},
	{"Lang-got",				true},
	{"Lang-grc",				true},
	{"Lang-grc-x-aeolic",		true},
	{"Lang-grc-x-attic",		true},
	{"Lang-grc-x-biblical",		true},
	{"Lang-grc-x-classic",		true},
	{"Lang-grc-x-doric",		true},
	{"Lang-grc-x-hellen",		true},
	{"Lang-grc-x-ionic",		true},
	{"Lang-grc-x-koine",		true},
	{"Lang-grc-x-medieval",		true},
	{"Lang-grc-x-patris",		true},
	{"Lang-grk",				true},
	{"Lang-grk-x-proto",		true},
	{"Lang-grm",				true},
	{"Lang-gsw",				true},
	{"Lang-gu",					true},
	{"Lang-guc",				true},
	{"Lang-gul",				true},
	{"Lang-guw",				true},
	{"Lang-gv",					true},
	{"Lang-gyn",				true},
	{"Lang-ha",					true},
	{"Lang-hac",				true},
	{"Lang-hai",				true},
	{"Lang-hak",				true},
	{"Lang-haw",				true},
	{"Lang-haz",				true},
	{"Lang-hbo",				true},
	{"Lang-hch",				true},
	{"Lang-he",					true},
	{"Lang-hei",				true},
	{"Lang-hi",					true},
	{"Lang-hid",				true},
	{"Lang-hif",				true},
	{"Lang-hil",				true},
	{"Lang-him",				true},
	{"Lang-hit",				true},
	{"Lang-hlu",				true},
	{"Lang-hmn",				true},
	{"Lang-hmx",				true},
	{"Lang-hnd",				true},
	{"Lang-hnn",				true},
	{"Lang-hno",				true},
	{"Lang-ho",					true},
	{"Lang-hoc",				true},
	{"Lang-hok",				true},
	{"Lang-hop",				true},
	{"Lang-hr",					true},
	{"Lang-hsb",				true},
	{"Lang-ht",					true},
	{"Lang-hu",					true},
	{"Lang-hur",				true},
	{"Lang-hus",				true},
	{"Lang-hvn",				true},
	{"Lang-hy",					true},
	{"Lang-hyw",				true},
	{"Lang-hyx",				true},
	{"Lang-hz",					true},
	{"Lang-ia",					true},
	{"Lang-iba",				true},
	{"Lang-ibb",				true},
	{"Lang-ibg",				true},
	{"Lang-ibl",				true},
	{"Lang-icr",				true},
	{"Lang-id",					true},
	{"Lang-ie",					true},
	{"Lang-ig",					true},
	{"Lang-ii",					true},
	{"Lang-iir",				true},
	{"Lang-ijo",				true},
	{"Lang-ik",					true},
	{"Lang-ikt",				true},
	{"Lang-ilo",				true},
	{"Lang-ilp",				true},
	{"Lang-inc",				true},
	{"Lang-ine",				true},
	{"Lang-inh",				true},
	{"Lang-io",					true},
	{"Lang-iow",				true},
	{"Lang-ira",				true},
	{"Lang-iro",				true},
	{"Lang-is",					true},
	{"Lang-ist",				true},
	{"Lang-it",					true},
	{"Lang-itc",				true},
	{"Lang-itl",				true},
	{"Lang-itv",				true},
	{"Lang-iu",					true},
	{"Lang-ium",				true},
	{"Lang-ivv",				true},
	{"Lang-izh",				true},
	{"Lang-ja",					true},
	{"Lang-jam",				true},
	{"Lang-jao",				true},
	{"Lang-jax",				true},
	{"Lang-jbe",				true},
	{"Lang-jbo",				true},
	{"Lang-jdt",				true},
	{"Lang-jog",				true},
	{"Lang-jpa",				true},
	{"Lang-jpx",				true},
	{"Lang-jrb",				true},
	{"Lang-jur",				true},
	{"Lang-jv",					true},
	{"Lang-jye",				true},
	{"Lang-kaa",				true},
	{"Lang-kab",				true},
	{"Lang-kac",				true},
	{"Lang-kar",				true},
	{"Lang-kaw",				true},
	{"Lang-kbd",				true},
	{"Lang-kbp",				true},
	{"Lang-kca",				true},
	{"Lang-kcg",				true},
	{"Lang-kda",				true},
	{"Lang-kdd",				true},
	{"Lang-kdo",				true},
	{"Lang-kee",				true},
	{"Lang-kek",				true},
	{"Lang-kg",					true},
	{"Lang-kge",				true},
	{"Lang-kha",				true},
	{"Lang-khb",				true},
	{"Lang-khi",				true},
	{"Lang-khw",				true},
	{"Lang-ki",					true},
	{"Lang-kio",				true},
	{"Lang-kiq",				true},
	{"Lang-kiu",				true},
	{"Lang-kj",					true},
	{"Lang-kjh",				true},
	{"Lang-kjp",				true},
	{"Lang-kjq",				true},
	{"Lang-kjz",				true},
	{"Lang-kk",					true},
	{"Lang-kkh",				true},
	{"Lang-kkv",				true},
	{"Lang-kkz",				true},
	{"Lang-kl",					true},
	{"Lang-kls",				true},
	{"Lang-km",					true},
	{"Lang-kmb",				true},
	{"Lang-kmr",				true},
	{"Lang-kn",					true},
	{"Lang-kne",				true},
	{"Lang-knn",				true},
	{"Lang-ko",					true},
	{"Lang-kog",				true},
	{"Lang-koi",				true},
	{"Lang-kok",				true},
	{"Lang-kpo",				true},
	{"Lang-kr",					true},
	{"Lang-krc",				true},
	{"Lang-kri",				true},
	{"Lang-krj",				true},
	{"Lang-krl",				true},
	{"Lang-kro",				true},
	{"Lang-ks",					true},
	{"Lang-ksh",				true},
	{"Lang-ksw",				true},
	{"Lang-ktu",				true},
	{"Lang-ktz",				true},
	{"Lang-ku",					true},
	{"Lang-kum",				true},
	{"Lang-kut",				true},
	{"Lang-kv",					true},
	{"Lang-kvr",				true},
	{"Lang-kvx",				true},
	{"Lang-kw",					true},
	{"Lang-kwk",				true},
	{"Lang-kxd",				true},
	{"Lang-ky",					true},
	{"Lang-kyh",				true},
	{"Lang-la",					true},
	{"Lang-la-x-medieval",		true},
	{"Lang-la-x-new",			true},
	{"Lang-lad",				true},
	{"Lang-lb",					true},
	{"Lang-lbe",				true},
	{"Lang-lbj",				true},
	{"Lang-lce",				true},
	{"Lang-lcf",				true},
	{"Lang-lez",				true},
	{"Lang-lg",					true},
	{"Lang-li",					true},
	{"Lang-lij",				true},
	{"Lang-lil",				true},
	{"Lang-lis",				true},
	{"Lang-liv",				true},
	{"Lang-liw",				true},
	{"Lang-ljp",				true},
	{"Lang-lkt",				true},
	{"Lang-lld",				true},
	{"Lang-lmo",				true},
	{"Lang-ln",					true},
	{"Lang-lng",				true},
	{"Lang-lo",					true},
	{"Lang-lom",				true},
	{"Lang-lou",				true},
	{"Lang-loz",				true},
	{"Lang-lrc",				true},
	{"Lang-lss",				true},
	{"Lang-lt",					true},
	{"Lang-ltg",				true},
	{"Lang-lu",					true},
	{"Lang-lua",				true},
	{"Lang-lud",				true},
	{"Lang-lui",				true},
	{"Lang-lun",				true},
	{"Lang-luo",				true},
	{"Lang-luq",				true},
	{"Lang-lus",				true},
	{"Lang-lut",				true},
	{"Lang-luz",				true},
	{"Lang-lv",					true},
	{"Lang-lzz",				true},
	{"Lang-mad",				true},
	{"Lang-mai",				true},
	{"Lang-mak",				true},
	{"Lang-map",				true},
	{"Lang-maz",				true},
	{"Lang-mbr",				true},
	{"Lang-mdf",				true},
	{"Lang-mdh",				true},
	{"Lang-mdr",				true},
	{"Lang-mey",				true},
	{"Lang-mez",				true},
	{"Lang-mfa",				true},
	{"Lang-mfb",				true},
	{"Lang-mfe",				true},
	{"Lang-mfp",				true},
	{"Lang-mg",					true},
	{"Lang-mga",				true},
	{"Lang-mh",					true},
	{"Lang-mhn",				true},
	{"Lang-mhr",				true},
	{"Lang-mi",					true},
	{"Lang-mia",				true},
	{"Lang-mic",				true},
	{"Lang-mid",				true},
	{"Lang-mik",				true},
	{"Lang-min",				true},
	{"Lang-miq",				true},
	{"Lang-mis",				true},
	{"Lang-mix",				true},
	{"Lang-mjw",				true},
	{"Lang-mjy",				true},
	{"Lang-mk",					true},
	{"Lang-mkh",				true},
	{"Lang-mki",				true},
	{"Lang-mkw",				true},
	{"Lang-ml",					true},
	{"Lang-mla",				true},
	{"Lang-mn",					true},
	{"Lang-mni",				true},
	{"Lang-mnj",				true},
	{"Lang-mno",				true},
	{"Lang-mnr",				true},
	{"Lang-mns",				true},
	{"Lang-mnw",				true},
	{"Lang-moe",				true},
	{"Lang-moh",				true},
	{"Lang-mos",				true},
	{"Lang-mov",				true},
	{"Lang-mqm",				true},
	{"Lang-mqx",				true},
	{"Lang-mr",					true},
	{"Lang-mrc",				true},
	{"Lang-mrh",				true},
	{"Lang-mrj",				true},
	{"Lang-mrq",				true},
	{"Lang-mrv",				true},
	{"Lang-mrw",				true},
	{"Lang-ms",					true},
	{"Lang-mt",					true},
	{"Lang-mtm",				true},
	{"Lang-mtq",				true},
	{"Lang-mui",				true},
	{"Lang-mul",				true},
	{"Lang-mun",				true},
	{"Lang-mus",				true},
	{"Lang-mvi",				true},
	{"Lang-mwl",				true},
	{"Lang-mwp",				true},
	{"Lang-mwr",				true},
	{"Lang-mwv",				true},
	{"Lang-mww",				true},
	{"Lang-mxi",				true},
	{"Lang-my",					true},
	{"Lang-myn",				true},
	{"Lang-myv",				true},
	{"Lang-myz",				true},
	{"Lang-mzb",				true},
	{"Lang-mzn",				true},
	{"Lang-na",					true},
	{"Lang-nah",				true},
	{"Lang-nai",				true},
	{"Lang-nan",				true},
	{"Lang-nap",				true},
	{"Lang-naq",				true},
	{"Lang-nay",				true},
	{"Lang-naz",				true},
	{"Lang-nb",					true},
	{"Lang-ncg",				true},
	{"Lang-nci",				true},
	{"Lang-nd",					true},
	{"Lang-nds",				true},
	{"Lang-ne",					true},
	{"Lang-new",				true},
	{"Lang-ng",					true},
	{"Lang-ngf",				true},
	{"Lang-nhd",				true},
	{"Lang-nhy",				true},
	{"Lang-nia",				true},
	{"Lang-nic",				true},
	{"Lang-nio",				true},
	{"Lang-niu",				true},
	{"Lang-nl",					true},
	{"Lang-nlm",				true},
	{"Lang-nn",					true},
	{"Lang-no",					true},
	{"Lang-nod",				true},
	{"Lang-nog",				true},
	{"Lang-nok",				true},
	{"Lang-non",				true},
	{"Lang-nqo",				true},
	{"Lang-nr",					true},
	{"Lang-nrf",				true},
	{"Lang-nrn",				true},
	{"Lang-nsd",				true},
	{"Lang-nsk",				true},
	{"Lang-nso",				true},
	{"Lang-nsz",				true},
	{"Lang-nub",				true},
	{"Lang-nv",					true},
	{"Lang-nwc",				true},
	{"Lang-nxm",				true},
	{"Lang-ny",					true},
	{"Lang-nys",				true},
	{"Lang-oaa",				true},
	{"Lang-oar",				true},
	{"Lang-oav",				true},
	{"Lang-obm",				true},
	{"Lang-oc",					true},
	{"Lang-och",				true},
	{"Lang-odt",				true},
	{"Lang-ofs",				true},
	{"Lang-oge",				true},
	{"Lang-ohu",				true},
	{"Lang-oj",					true},
	{"Lang-ojb",				true},
	{"Lang-ojc",				true},
	{"Lang-ojg",				true},
	{"Lang-ojs",				true},
	{"Lang-ojw",				true},
	{"Lang-oka",				true},
	{"Lang-okm",				true},
	{"Lang-olo",				true},
	{"Lang-om",					true},
	{"Lang-oma",				true},
	{"Lang-omp",				true},
	{"Lang-omq",				true},
	{"Lang-omv",				true},
	{"Lang-omy",				true},
	{"Lang-one",				true},
	{"Lang-ono",				true},
	{"Lang-ood",				true},
	{"Lang-opt",				true},
	{"Lang-or",					true},
	{"Lang-oru",				true},
	{"Lang-orv",				true},
	{"Lang-os",					true},
	{"Lang-osa",				true},
	{"Lang-osc",				true},
	{"Lang-osi",				true},
	{"Lang-osn",				true},
	{"Lang-osp",				true},
	{"Lang-osx",				true},
	{"Lang-ota",				true},
	{"Lang-otb",				true},
	{"Lang-ote",				true},
	{"Lang-otk",				true},
	{"Lang-oto",				true},
	{"Lang-otq",				true},
	{"Lang-otw",				true},
	{"Lang-oty",				true},
	{"Lang-ovd",				true},
	{"Lang-owl",				true},
	{"Lang-pa",					true},
	{"Lang-paa",				true},
	{"Lang-pag",				true},
	{"Lang-pal",				true},
	{"Lang-pam",				true},
	{"Lang-pao",				true},
	{"Lang-pap",				true},
	{"Lang-pau",				true},
	{"Lang-paw",				true},
	{"Lang-pcd",				true},
	{"Lang-pcm",				true},
	{"Lang-pdc",				true},
	{"Lang-pea",				true},
	{"Lang-peo",				true},
	{"Lang-pes",				true},
	{"Lang-pey",				true},
	{"Lang-pfl",				true},
	{"Lang-pgd",				true},
	{"Lang-pgl",				true},
	{"Lang-phi",				true},
	{"Lang-phn",				true},
	{"Lang-phr",				true},
	{"Lang-pi",					true},
	{"Lang-pih",				true},
	{"Lang-pim",				true},
	{"Lang-pis",				true},
	{"Lang-pjt",				true},
	{"Lang-pka",				true},
	{"Lang-pl",					true},
	{"Lang-plf",				true},
	{"Lang-pln",				true},
	{"Lang-pmd",				true},
	{"Lang-pmh",				true},
	{"Lang-pms",				true},
	{"Lang-pnb",				true},
	{"Lang-pnh",				true},
	{"Lang-pnt",				true},
	{"Lang-pot",				true},
	{"Lang-pox",				true},
	{"Lang-poz",				true},
	{"Lang-ppl",				true},
	{"Lang-pqe",				true},
	{"Lang-pqm",				true},
	{"Lang-pqw",				true},
	{"Lang-pra",				true},
	{"Lang-prg",				true},
	{"Lang-prk",				true},
	{"Lang-prs",				true},
	{"Lang-prx",				true},
	{"Lang-ps",					true},
	{"Lang-psu",				true},
	{"Lang-pt",					true},
	{"Lang-pua",				true},
	{"Lang-pui",				true},
	{"Lang-puy",				true},
	{"Lang-pwn",				true},
	{"Lang-pwo",				true},
	{"Lang-qu",					true},
	{"Lang-qua",				true},
	{"Lang-quc",				true},
	{"Lang-qwe",				true},
	{"Lang-qya",				true},
	{"Lang-raj",				true},
	{"Lang-rap",				true},
	{"Lang-rar",				true},
	{"Lang-rcf",				true},
	{"Lang-rej",				true},
	{"Lang-rgn",				true},
	{"Lang-rif",				true},
	{"Lang-rkh",				true},
	{"Lang-rki",				true},
	{"Lang-rkt",				true},
	{"Lang-rm",					true},
	{"Lang-rmf",				true},
	{"Lang-rmo",				true},
	{"Lang-rmu",				true},
	{"Lang-rmy",				true},
	{"Lang-rmz",				true},
	{"Lang-rn",					true},
	{"Lang-ro",					true},
	{"Lang-roa",				true},
	{"Lang-rob",				true},
	{"Lang-rom",				true},
	{"Lang-rsk",				true},
	{"Lang-rts",				true},
	{"Lang-ru",					true},
	{"Lang-rue",				true},
	{"Lang-ruo",				true},
	{"Lang-rup",				true},
	{"Lang-ruq",				true},
	{"Lang-rut",				true},
	{"Lang-rw",					true},
	{"Lang-rys",				true},
	{"Lang-ryu",				true},
	{"Lang-sa",					true},
	{"Lang-sac",				true},
	{"Lang-sah",				true},
	{"Lang-sai",				true},
	{"Lang-sal",				true},
	{"Lang-sas",				true},
	{"Lang-sat",				true},
	{"Lang-saz",				true},
	{"Lang-sbn",				true},
	{"Lang-sbv",				true},
	{"Lang-sc",					true},
	{"Lang-scl",				true},
	{"Lang-scn",				true},
	{"Lang-sco",				true},
	{"Lang-sd",					true},
	{"Lang-sda",				true},
	{"Lang-sdc",				true},
	{"Lang-sdh",				true},
	{"Lang-sdn",				true},
	{"Lang-sdv",				true},
	{"Lang-se",					true},
	{"Lang-see",				true},
	{"Lang-sei",				true},
	{"Lang-sel",				true},
	{"Lang-sem",				true},
	{"Lang-ser",				true},
	{"Lang-sg",					true},
	{"Lang-sga",				true},
	{"Lang-sgd",				true},
	{"Lang-sgh",				true},
	{"Lang-sgn",				true},
	{"Lang-sgs",				true},
	{"Lang-sh",					true},
	{"Lang-shh",				true},
	{"Lang-shi",				true},
	{"Lang-shn",				true},
	{"Lang-shp",				true},
	{"Lang-shs",				true},
	{"Lang-shy",				true},
	{"Lang-si",					true},
	{"Lang-sia",				true},
	{"Lang-sio",				true},
	{"Lang-sip",				true},
	{"Lang-sit",				true},
	{"Lang-siz",				true},
	{"Lang-sjd",				true},
	{"Lang-sje",				true},
	{"Lang-sjk",				true},
	{"Lang-sjn",				true},
	{"Lang-sjo",				true},
	{"Lang-sjt",				true},
	{"Lang-sju",				true},
	{"Lang-sjw",				true},
	{"Lang-sk",					true},
	{"Lang-ska",				true},
	{"Lang-skh",				true},
	{"Lang-skr",				true},
	{"Lang-sl",					true},
	{"Lang-sla",				true},
	{"Lang-slh",				true},
	{"Lang-sli",				true},
	{"Lang-slr",				true},
	{"Lang-slu",				true},
	{"Lang-sly",				true},
	{"Lang-sm",					true},
	{"Lang-sma",				true},
	{"Lang-smi",				true},
	{"Lang-smj",				true},
	{"Lang-smn",				true},
	{"Lang-smr",				true},
	{"Lang-sms",				true},
	{"Lang-smw",				true},
	{"Lang-sn",					true},
	{"Lang-snk",				true},
	{"Lang-snq",				true},
	{"Lang-so",					true},
	{"Lang-sog",				true},
	{"Lang-son",				true},
	{"Lang-sou",				true},
	{"Lang-sq",					true},
	{"Lang-sqj",				true},
	{"Lang-sqo",				true},
	{"Lang-sqr",				true},
	{"Lang-sqt",				true},
	{"Lang-squ",				true},
	{"Lang-sr",					true},
	{"Lang-src",				true},
	{"Lang-srh",				true},
	{"Lang-srm",				true},
	{"Lang-srn",				true},
	{"Lang-sro",				true},
	{"Lang-srr",				true},
	{"Lang-srs",				true},
	{"Lang-ss",					true},
	{"Lang-ssa",				true},
	{"Lang-st",					true},
	{"Lang-std",				true},
	{"Lang-sto",				true},
	{"Lang-stp",				true},
	{"Lang-stq",				true},
	{"Lang-str",				true},
	{"Lang-sty",				true},
	{"Lang-su",					true},
	{"Lang-sus",				true},
	{"Lang-sux",				true},
	{"Lang-sv",					true},
	{"Lang-sva",				true},
	{"Lang-sw",					true},
	{"Lang-swb",				true},
	{"Lang-swg",				true},
	{"Lang-swh",				true},
	{"Lang-sws",				true},
	{"Lang-syc",				true},
	{"Lang-syd",				true},
	{"Lang-syl",				true},
	{"Lang-syr",				true},
	{"Lang-szl",				true},
	{"Lang-szy",				true},
	{"Lang-ta",					true},
	{"Lang-taa",				true},
	{"Lang-tab",				true},
	{"Lang-tai",				true},
	{"Lang-tao",				true},
	{"Lang-tay",				true},
	{"Lang-tbq",				true},
	{"Lang-tcb",				true},
	{"Lang-tcs",				true},
	{"Lang-tcy",				true},
	{"Lang-tdd",				true},
	{"Lang-te",					true},
	{"Lang-tes",				true},
	{"Lang-tet",				true},
	{"Lang-tew",				true},
	{"Lang-tfn",				true},
	{"Lang-tft",				true},
	{"Lang-tg",					true},
	{"Lang-tgx",				true},
	{"Lang-th",					true},
	{"Lang-thp",				true},
	{"Lang-ti",					true},
	{"Lang-tid",				true},
	{"Lang-tig",				true},
	{"Lang-tiw",				true},
	{"Lang-tix",				true},
	{"Lang-tk",					true},
	{"Lang-tkl",				true},
	{"Lang-tkm",				true},
	{"Lang-tl",					true},
	{"Lang-tlh",				true},
	{"Lang-tli",				true},
	{"Lang-tly",				true},
	{"Lang-tmh",				true},
	{"Lang-tmn",				true},
	{"Lang-tmr",				true},
	{"Lang-tn",					true},
	{"Lang-tnq",				true},
	{"Lang-to",					true},
	{"Lang-toi",				true},
	{"Lang-tok",				true},
	{"Lang-tol",				true},
	{"Lang-tom",				true},
	{"Lang-tow",				true},
	{"Lang-tpi",				true},
	{"Lang-tr",					true},
	{"Lang-trk",				true},
	{"Lang-trp",				true},
	{"Lang-tru",				true},
	{"Lang-ts",					true},
	{"Lang-tsg",				true},
	{"Lang-tsi",				true},
	{"Lang-tsz",				true},
	{"Lang-tt",					true},
	{"Lang-tts",				true},
	{"Lang-ttt",				true},
	{"Lang-tum",				true},
	{"Lang-tun",				true},
	{"Lang-tup",				true},
	{"Lang-tus",				true},
	{"Lang-tut",				true},
	{"Lang-tuw",				true},
	{"Lang-tvl",				true},
	{"Lang-tw",					true},
	{"Lang-twa",				true},
	{"Lang-ty",					true},
	{"Lang-tyv",				true},
	{"Lang-tzh",				true},
	{"Lang-tzl",				true},
	{"Lang-tzm",				true},
	{"Lang-tzo",				true},
	{"Lang-uby",				true},
	{"Lang-ude",				true},
	{"Lang-udi",				true},
	{"Lang-udm",				true},
	{"Lang-ug",					true},
	{"Lang-uga",				true},
	{"Lang-uk",					true},
	{"Lang-uli",				true},
	{"Lang-ulk",				true},
	{"Lang-uma",				true},
	{"Lang-umb",				true},
	{"Lang-umu",				true},
	{"Lang-und",				true},
	{"Lang-unm",				true},
	{"Lang-ur",					true},
	{"Lang-ure",				true},
	{"Lang-urj",				true},
	{"Lang-uum",				true},
	{"Lang-uz",					true},
	{"Lang-ve",					true},
	{"Lang-vec",				true},
	{"Lang-vep",				true},
	{"Lang-vi",					true},
	{"Lang-vkk",				true},
	{"Lang-vls",				true},
	{"Lang-vmf",				true},
	{"Lang-vml",				true},
	{"Lang-vo",					true},
	{"Lang-vot",				true},
	{"Lang-vro",				true},
	{"Lang-wa",					true},
	{"Lang-wae",				true},
	{"Lang-wak",				true},
	{"Lang-wal",				true},
	{"Lang-wam",				true},
	{"Lang-war",				true},
	{"Lang-was",				true},
	{"Lang-wbl",				true},
	{"Lang-wbm",				true},
	{"Lang-wen",				true},
	{"Lang-wep",				true},
	{"Lang-wes",				true},
	{"Lang-win",				true},
	{"Lang-wlm",				true},
	{"Lang-wlo",				true},
	{"Lang-wls",				true},
	{"Lang-wne",				true},
	{"Lang-wo",					true},
	{"Lang-woe",				true},
	{"Lang-wrh",				true},
	{"Lang-wrm",				true},
	{"Lang-wth",				true},
	{"Lang-wyi",				true},
	{"Lang-wym",				true},
	{"Lang-wyn",				true},
	{"Lang-xaa",				true},
	{"Lang-xag",				true},
	{"Lang-xal",				true},
	{"Lang-xas",				true},
	{"Lang-xbc",				true},
	{"Lang-xbj",				true},
	{"Lang-xbm",				true},
	{"Lang-xby",				true},
	{"Lang-xcb",				true},
	{"Lang-xcg",				true},
	{"Lang-xcl",				true},
	{"Lang-xcr",				true},
	{"Lang-xct",				true},
	{"Lang-xdc",				true},
	{"Lang-xdk",				true},
	{"Lang-xdm",				true},
	{"Lang-xfa",				true},
	{"Lang-xgf",				true},
	{"Lang-xgn",				true},
	{"Lang-xh",					true},
	{"Lang-xhe",				true},
	{"Lang-xhu",				true},
	{"Lang-xlc",				true},
	{"Lang-xld",				true},
	{"Lang-xlu",				true},
	{"Lang-xmf",				true},
	{"Lang-xmm",				true},
	{"Lang-xna",				true},
	{"Lang-xnd",				true},
	{"Lang-xng",				true},
	{"Lang-xno",				true},
	{"Lang-xpi",				true},
	{"Lang-xpr",				true},
	{"Lang-xpu",				true},
	{"Lang-xpz",				true},
	{"Lang-xqa",				true},
	{"Lang-xsa",				true},
	{"Lang-xsb",				true},
	{"Lang-xsr",				true},
	{"Lang-xul",				true},
	{"Lang-xur",				true},
	{"Lang-xvo",				true},
	{"Lang-xwo",				true},
	{"Lang-yao",				true},
	{"Lang-yap",				true},
	{"Lang-yaq",				true},
	{"Lang-ydg",				true},
	{"Lang-yi",					true},
	{"Lang-yii",				true},
	{"Lang-yka",				true},
	{"Lang-ykg",				true},
	{"Lang-ymm",				true},
	{"Lang-ymt",				true},
	{"Lang-yo",					true},
	{"Lang-yoi",				true},
	{"Lang-ypk",				true},
	{"Lang-yrk",				true},
	{"Lang-yua",				true},
	{"Lang-yuc",				true},
	{"Lang-yue",				true},
	{"Lang-yuf",				true},
	{"Lang-yuf-x-hav",			true},
	{"Lang-yuf-x-wal",			true},
	{"Lang-yuf-x-yav",			true},
	{"Lang-yxg",				true},
	{"Lang-za",					true},
	{"Lang-zea",				true},
	{"Lang-zgh",				true},
	{"Lang-zhx",				true},
	{"Lang-zkv",				true},
	{"Lang-zle",				true},
	{"Lang-zls",				true},
	{"Lang-zlw",				true},
	{"Lang-znd",				true},
	{"Lang-zom",				true},
	{"Lang-zsm",				true},
	{"Lang-zu",					true},
	{"Lang-zun",				true},
	{"Lang-zxx",				true},
	{"Lang-zza",				true},
	};