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

This script renames transclusions of the 1,150+ different {{lang-??}} templates that directly invoke the lang_xx_inherit() and lang_xx_italic() functions of Module:Lang – and many (most?) of their redirects – with the name of a single template, {{langx}}. See Wikipedia:Templates for discussion/Log/2024 September 27 § Replace and delete lang-?? templates.

description

edit

Conveniently, almost all of the templates in the list are consistently named. Task 20 maintains several internal lists of the templates listed in Wikipedia:Templates for discussion/Log/2024 September 27/lang-?? templates and their associated redirects. It also keeps a list of those templates and redirects that look like {{lang-??}} templates but are not; these are ignored.

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>}}. The 'new' standard-form template name can then be processed with all of the other standard-form names.

For standard-form {{lang-??}} template and redirect names, task 20 looks for that template's canonical name (first letter uppercase) in its template and redirect lists. It also keeps a list of ignored templates and redirects that look like {{lang-??}} templates but cannot be converted to {{langx}}. 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}}

Articles that feed this task are taken primarily from Category:Pages using Lang-xx templates (2 C; 13,887 P; 0 F)

ancillary tasks

edit

Task 20 performs no ancillary tasks.

This task does not do awb general fixes.

edit summaries

edit

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

The edit summary has a link to this page and a link to the TfD.

ignored templates

edit

This is a list of templates that are ignored by Task 20; there may be others. Task 20 also ignores sandbox versions of known templates and any known template that uses enumerated parameters ({{lang-??|1=text}}).

script

edit
//---------------------------< 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\-[^\|]+/
//		incategory:"Pages using Lang-xx templates" prefix:<***>
//			where *** is the first letter(s) of a group of article titles (case insensitive)
//
// TODO: what todo about Template:/lang-??/sandbox?
//

public string ProcessArticle(string ArticleText, string ArticleTitle, int wikiNamespace, out string Summary, out bool Skip)
	{
	Skip = false;
	Summary = base_summary;																				// base_summary is static
	string	sub_summary = "";

	string pattern = "";
	
/*	if (100 == wikiNamespace)																			// portals just transclude sections from other articles
		{
		Skip = true;
		Summary = "Page is in Portal namespace";
		log_no_change_skip (ArticleTitle);
		return ArticleText;
		}
*/	
	if (page_skip_list_t.ContainsKey (ArticleTitle))
		{
		Skip = true;
		Summary = "Page in page-skip list";
		log_no_change_skip (ArticleTitle);
		return ArticleText;
		}
	
	foreach (KeyValuePair<string, string> entry in nonstandard_names_t)									// fetch each nonstandard name 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 for later conversion to {{langx}}
		}

	int		replaced_count = 0;																			// tally of pattern-matching templates/redirects replaced
	int		skipped_count = 0;																			// tally of pattern-matching templates/redirects skipped
	int		ignored_count = 0;																			// tally of pattern-matching templates/redirects ignored

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

	var		skipped_templates_t = new Dictionary<string, int>(){};										// arrays to store skipped template names
	var		ignored_templates_t = new Dictionary<string, int>(){};										// and ignored template names

	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 (Regex.Match (match.Groups[6].Value, @"\|\s*\d+\s*=").Success)						// does this template contain enumerated parameters?
					{
					ignored_count++;																	// yep, bump the counter
					skip_ignore_list_add (ignored_templates_t, key + " [enum]");						// add this template name to the ignored list
					return template;
					}

				if (Regex.Match (match.Groups[0].Value, @"/sandbox").Success)							// is this template the sandbox of a live template?
					{
					ignored_count++;																	// yep, bump the counter
					skip_ignore_list_add (ignored_templates_t, key + " [sbox]");						// add this template name to the ignored list
					return template;
					}

				if (ignored_names_t.ContainsKey (key))													// is this template one to be ignored?
					{
					ignored_count++;																	// yep, bump the counter
					skip_ignore_list_add (ignored_templates_t, key);									// add this template name to the ignored list
					return template;																	// ignore known unsupported templates/redirects
					}

				if (template_names_t.ContainsKey (key))													// is this template a standard {{lang-??}} template?
					return counted_replace (template, pattern, "$1$3x$5|$4$6", ref replaced_count);		// tally & return modified template

				else if (redirect_names_t.ContainsKey (key))											// is this template a {{lang-??}} redirect?
					return counted_replace (template, pattern, "$1$3x$5|" + redirect_names_t[key] + "$6", ref replaced_count);	// tally & return modified template

				skipped_count++;																		// not a known name so bump the counter
				skip_ignore_list_add (skipped_templates_t, key);										// add it to the list
				return template;																		// and return it unmolested
				});
	
	if (0 == replaced_count && 0 == skipped_count && 0 == ignored_count)								// no replacements, no skips, no ignores
		{
		Skip = true;																					// no need to continue so
		Summary = "no replacements, no skips, no ignores";												// to simplify summary in awb log
		log_no_change_skip (ArticleTitle);
		return ArticleText;																				// abandon and done
		}
//Skip=true;																							// DEBUG: to force awb to not save but to emit edit summaries to the log
	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 != replaced_count, 0 != skipped_count, 0 != ignored_count, replaced_count, skipped_count, ignored_count, skipped_list, ignored_list, ref Skip);
	log_skip_ignore (ArticleTitle, skipped_count, ignored_count, skipped_list, ignored_list);
	
	if (Skip)
		{
		Summary = sub_summary;																			// only ignored summary for awb log
		log_no_change_skip (ArticleTitle);
		}
	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 replaced, skipped, and ignored templates
//

private string sub_summary_get (bool replaced, bool skipped, bool ignored, int replaced_count, int skipped_count, int ignored_count, string skipped_list, string ignored_list, ref bool skip)
	{
	string sub_summary = "";
	
	if (replaced)																// 4, 5, 6, 7
		{
		if (skipped)															// 6, 7
			{
			if (ignored)														// 7
				sub_summary = String.Format (" (Replaced {0}; skipped unknown {1}: {2}; ignored {3}: {4}", replaced_count, skipped_count, skipped_list, ignored_count, ignored_list);
			else 																// 6
				sub_summary = String.Format (" (Replaced {0}; skipped unknown {1}: {2}", replaced_count, skipped_count, skipped_list);
			}
		else																	// 4, 5
			{
			if (ignored)														// 5
				sub_summary = String.Format (" (Replaced {0}; ignored {1}: {2}", replaced_count, ignored_count, ignored_list);
			else																// 4
				{
				sub_summary = String.Format (" (Replaced {0}", replaced_count);
 //sub_summary = "";	// DEBUG
				}
			}
		}
	else 
		{
		if (skipped)															// 1, 2, 3
			{
			if (ignored)														// 3
				sub_summary = String.Format (" (Skipped unknown {0}: {1}; ignored {2}: {3}", skipped_count, skipped_list, ignored_count, ignored_list);
			else																// 2
				sub_summary = String.Format (" (Skipped unknown {0}: {1}", skipped_count, skipped_list);
			}
		else 																	// 1
			{
			sub_summary = String.Format (" (Ignored {0}: {1}", ignored_count, ignored_list);
			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
	}


//---------------------------< L O G _ S K I P _ I G N O R E >------------------------------------------------
//
// writes the content of the skip and ignore lists to the log file, prettified with wiki markup.
//

private void log_skip_ignore (string article_title, int skipped_count, int ignored_count, string skipped_list, string ignored_list)
	{
	if ((0 == skipped_count) && (0 == ignored_count))
		return;

	System.IO.StreamWriter sw;
	string	time = DateTimeOffset.Now.ToString("u").Substring (11, 9);			// utc time with timezone designator ('Z')
	string	date = DateTimeOffset.Now.ToString("u").Substring (0, 10);			// utc date in ISO 8601 format (YYYY-MM-DD)

	string	log_file = @"Z:\Wikipedia\AWB\Monkbot_tasks\Monkbot_task_20\logs\" + date + ".txt";	// path to today's log file: YYYY-MM-DD.txt

	sw = System.IO.File.AppendText (log_file);									// opem log file for appending
	sw.WriteLine ("*[[" + article_title + "]] (" + time + "):");				// write wikilinked article title header

	if (0 != skipped_count)
		sw.WriteLine ("*: skipped: " + skipped_list);							// when templates skipped, list them
	if (0 != ignored_count)
		sw.WriteLine ("*: ignored: " + ignored_list);							// when templates ignored, list them
	
	sw.Close();																	// and close the log til next time
	}


//---------------------------< L O G _ N O _ C H A N G E _ S K I P >------------------------------------------
//
// logs the article name when bot edits result in no change.  This is usually because the article uses templates
// that are ignored.  Articles in the article skip list are also logged here.  The list is used to strip articles
// from awb's main list via List filter -> Set operations -> Symmetric difference.  Article in the 'no change
// skip list' don't need to be processed again and again.
//

private void log_no_change_skip (string article_title)
	{
	System.IO.StreamWriter sw;

	sw = System.IO.File.AppendText (no_change_skips_log_file);					// open log file for appending
	sw.WriteLine (article_title);												// write article title
	sw.Close();																	// and close the log til next time
	}


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

static string	base_summary = String.Format ("[[User:Monkbot/task 20|Task 20]]{0}: replace {{lang-??}} templates with {{langx|??}} [[Wikipedia:Templates_for_discussion/Log/2024_September_27#Replace_and_delete_lang-??_templates|‹See Tfd›]]",
//	" (dev test)"
//	" (BRFA trial)"
	""
	);

static string	no_change_skips_log_file = @"Z:\Wikipedia\AWB\Monkbot_tasks\Monkbot_task_20\bot_skips.txt";


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

static Dictionary<string, bool> ignored_names_t = new Dictionary<string, bool>()
	{
	{"Lang-anw",				true},		// non-existent
//	{"Lang-ast-leo",			true},
	{"Lang-bcs",				true},
	{"Lang-cnr-Cyrl",			true},		// stricken from first addendum because uses custom label
	{"Lang-cnr-Latn",			true},		// stricken from second addendum because now uses custom label (2024-10-18)
	{"Lang-cnr-Cyrl-Latn",		true},
	{"Lang-cnr-Latn-Cyrl",		true},
	{"Lang-crh3",				true},
	{"Lang-eml",				true},		// non-existent
	{"Lang-est-sea",			true},
	{"Lang-fra-frc",			true},
	{"Lang-grc-gre",			true},
	{"Lang-hmd", 				true},
	{"Lang-ka",					true},
	{"Lang-ku-Arab", 			true},
	{"Lang-lmo-cr",				true},
	{"Lang-lmo-IT",				true},
	{"Lang-mnc",				true},
	{"Lang-mo-Cyrl",			true},
	{"Lang-my-Mymr",			true},
	{"Lang-my-name-MLCTS",		true},
	{"Lang-ro-Cyrl-MD",			true},
	{"Lang-rus",				true},
	{"Lang-sa2",				true},
	{"Lang-sh-Cyrl",			true},
	{"Lang-sh-Cyrl-Latn",		true},
	{"Lang-sh-Latn",			true},
	{"Lang-sh-Latn-Cyrl",		true},
	{"Lang-sq-definite",		true},
	{"Lang-sr-Cyrl",			true},
	{"Lang-sr-Cyrl-Latn",		true},
	{"Lang-sr-Latn",			true},
	{"Lang-sr-Latn-Cyrl",		true},
	{"Lang-stub",				true},		// not a {{lang-??}} template
	{"Lang-su-fonts",			true},
	{"Lang-uniturk",			true},
	{"Lang-uz-Cyrl-Latn",		true},
	{"Lang-uz-Latn",			true},
	{"Lang-uz-Latn-Cyrl",		true},
	{"Lang-vi-chunom",			true},
	{"Lang-vi-hantu",			true},
	{"Lang-xx",					true},		// not a {{lang-??}} template
	{"Lang-x2",					true},
	{"Lang-zh",					true},
	{"Lang-1ca",				true},

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

	{"Lang-Chinese",			true},		// to lang-zh
	{"Lang-chi",				true},		// to lang-zh
	{"Lang-cyrl",				true},		// to Cyrl; not a {{lang-??}} template
	{"Lang-for",				true},		// to {{Language with name/for}}; not a {{lang-??}} template
	{"Lang-gb",					true},		// to lang-zh
	{"Lang-hbs-Cyrl",			true},		// to Lang-sh-Cyrl
	{"Lang-hbs-Cyrl-Latn", 		true},		// to Lang-sh-Cyrl-Latn
	{"Lang-hbs-Latn",			true},		// to Lang-sh-Latn
	{"Lang-hbs-Latn-Cyrl", 		true},		// to Lang-sh-Latn-Cyrl
	{"Lang-he-a",				true},		// redirect to {{Hebrew audio}}; not a lang template
	{"Lang-Hebrew2",			true},		// redirect to {{Script/Hebrew}}; not a lang template
	{"Lang-he2",				true},		// redirect to {{Script/Hebrew}}; not a lang template
	{"Lang-Latn",				true},		// to {{lang}}; not a {{lang-??}} template
	{"Lang-mnw-fonts",			true},		// redirect to Script/mnw-Mymr; not a lang template
	{"Lang-my-fonts",			true},		// redirect to Script/Myanmar; not a lang template
	{"Lang-rki-fonts",			true},		// redirect to Script/Myanmar; not a lang template
	{"Lang-seto",				true},		// to lang-est-sea
	{"Lang-shn-fonts",			true},		// redirect to Script/shn-Mymr; not a lang template
	{"Lang-sr-cyr",				true},		// to Lang-sr-Cyrl
	{"Lang-sr-Cyr",				true},		// to Lang-sr-Cyrl
	{"Lang-sr-cyrl",			true},		// to Lang-sr-Cyrl
	{"Lang-sr-lat",				true},		// to Lang-sr-Latn
	{"Lang-sr-Lat",				true},		// to Lang-sr-Latn
	{"Lang-sr-latn",			true},		// to Lang-sr-Latn
	{"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]ang_de",				"de"},
	{"[Ll]angEsp",				"es"},
	{"[Ll]ang fr",				"fr"},
	{"[Ll]ang_fr",				"fr"},
	{"[Hh]e",					"he"},
	{"[Ii]n la",				"la"},
	{"[Ll]angLat",				"la"},
	{"[Ll]eonese",				"ast-ES"},
	{"[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"},		// not to be converted; has custom label

	};


//---------------------------< R E D I R E C T _ N A M E S _ 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> redirect_names_t = new Dictionary<string, string>()
	{
	{"Lang-gr",					"el"},				// <key> redirects to Lang-<value>
	{"Lang-oe",					"ang"},
	{"Lang-ar-at",				"ar"},
	{"Lang-Assamese1",			"as"},
	{"Lang-ast-leo",			"ast-ES"},
	{"Lang-as1",				"as"},
	{"Lang-az2", 				"az-Arab"},
	{"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-els",				"gsw-FR"},
	{"Lang-en-au",				"en-AU"},
	{"Lang-en-Au",				"en-AU"},
	{"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-gsw-als",			"gsw-FR"},
	{"Lang-he1",				"he"},
	{"Lang-in",					"id"},
	{"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-nds-nl",				"nds-NL"},
	{"Lang-prv",				"oc"},
	{"Lang-Or",					"or"},
	{"Lang-oc-gsc",				"oc-gascon"},
	{"Lang-od",					"or"},
	{"Lang-on",					"non"},
	{"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-wya",				"wyn"},
	{"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 from wrapper around {{language with name}}

//	{"Lang-ro-Cyrl-MD",			"ro-Cyrl-MD"},	// converted from {{Moldovan Cyrillic}}; not to be converted has custom label
//	{"Lang-mo-Cyrl",			"ro-Cyrl-MD"},	// and its redirect; not to be converted has custom label
	

//----------< 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 >----------
//
// used to convert key to value
//

	{"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"},
	};


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

static Dictionary<string, bool> template_names_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-de-CH",				true},
	{"Lang-en-AU",				true},			// this is a redirect; converts to {{langx|en-AU}}
	{"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 categorization; falsely striken because uses custom label; it doesn't; as of 2024-10-18 it does so stricken again)
	{"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},			// does not use Template:lang-x/doc so escaped categorization
	{"Lang-wbp",				true},			// did not (does now) use Template:lang-x/doc so escaped categorization
	{"Lang-zku",				true},			// did not (does now) use Template:lang-x/doc so escaped categorization

	{"Lang-ast-ES",				true},			// added 2024-11-12 for completeness

//----------< 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-nmu",				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},
	};


//---------------------------< P A G E _ S K I P _ L I S T _ T >----------------------------------------------
//
// list of page titles that the bot should skip
//
// all of the keys in this dictionary must be canonical form WITH NAMESPACE
//

static Dictionary<string, bool> page_skip_list_t = new Dictionary<string, bool>()
	{
	{"Wikipedia:Templates for discussion/Log/2024 September 27",					true},	// the reason for this bot
	{"Wikipedia:Templates for discussion/Log/2024 September 27/lang-?? templates",	true},	// its subpage
	{"Category:Lang and lang-xx template errors", 									true},
	{"Wikipedia:New pages patrol/Reports/Easy reviews",								true},	// updated by SDZeroBot: "Edits made within the table area will be removed on the next update!"
	{"Template talk:Language with name",											true},	// discussions specifically about {{lang-??}} templates
	{"Wikipedia:Templates for discussion/Log/2014 August 13", 						true},	// discussions specifically about {{lang-??}} templates
	{"Template talk:Lang/Archive 10",												true},	// discussions specifically about {{lang-??}} templates
	{"User:Tim.landscheidt/Sandbox/Unused templates/6",								true},	// old list
	{"Template:Lang-x/doc",															true},
	{"Template talk:Lang",															true},
	{"Template:Lang-x/doc/parameters",												true},
	{"User:SDZeroBot/NPP sorting",													true},	// these all updated by SDZeroBot
	{"User:SDZeroBot/NPP sorting/Culture/Biography/Women",							true},
	{"User:SDZeroBot/NPP sorting/Culture/Biography",								true},
	{"User:SDZeroBot/NPP sorting/History and Society/History",						true},
	{"User:SDZeroBot/NPP sorting/Geography/Regions/Asia/South Asia",				true},
	{"User:SDZeroBot/NPP sorting/Culture/Media",									true},
	{"User:SDZeroBot/NPP sorting/Geography/Regions/Asia/East Asia",					true},
	{"User:SDZeroBot/NPP sorting/Culture/Sports",									true},
	{"User:SDZeroBot/NPP sorting/Culture/Internet culture",							true},
	{"User:SDZeroBot/NPP sorting/Geography/Regions/Africa/Central Africa",			true},
	{"User:SDZeroBot/NPP sorting/STEM/Space",										true},
	{"User:SDZeroBot/NPP sorting/History and Society/Military and warfare",			true},
	{"User:SDZeroBot/NPP sorting/Culture/Literature",								true},
	{"User:SDZeroBot/NPP sorting/STEM/Computing",									true},
	{"User:SDZeroBot/NPP sorting/STEM/Mathematics",									true},
	{"User:SDZeroBot/NPP sorting/History and Society/Business and economics",		true},
	{"User:SDZeroBot/NPP sorting/Geography/Regions/Americas/North America",			true},
	{"User:SDZeroBot/NPP sorting/Culture/Linguistics",								true},
	{"User:SDZeroBot/NPP sorting/STEM",												true},
	{"User:SDZeroBot/NPP sorting/Geography/Regions/Oceania",						true},
	{"User:SDZeroBot/NPP sorting/Culture/Media/Films",								true},
	{"User:SDZeroBot/NPP sorting/Culture/Visual arts/Comics and Anime",				true},
	{"User:SDZeroBot/NPP sorting/Culture/Media/Music",								true},
	{"User:SDZeroBot/NPP sorting/STEM/Biology",										true},
	{"User:SDZeroBot/NPP sorting/Culture/Visual arts/Fashion",						true},
	{"User:SDZeroBot/NPP sorting/Culture/Visual arts/Architecture",					true},
	{"User:SDZeroBot/NPP sorting/STEM/Engineering",									true},
	{"User:SDZeroBot/NPP sorting/Geography/Regions/Americas/South America",			true},
	{"User:SDZeroBot/NPP sorting/Geography/Geographical",							true},
	{"User:SDZeroBot/NPP sorting/History and Society/Transportation",				true},
	{"User:SDZeroBot/NPP sorting/Geography/Regions/Africa/Western Africa",			true},
	{"User:SDZeroBot/NPP sorting/STEM/Earth and environment",						true},
	{"User:SDZeroBot/NPP sorting/Geography/Regions/Asia/Southeast Asia",			true},
	{"User:SDZeroBot/NPP sorting/Culture/Media/Television",							true},
	{"User:SDZeroBot/NPP sorting/STEM/Medicine & Health",							true},
	{"User:SDZeroBot/NPP sorting/Culture/Media/Entertainment",						true},
	{"User:SDZeroBot/NPP sorting/Culture/Performing arts",							true},
	{"User:SDZeroBot/NPP sorting/Geography/Regions/Africa",							true},
	{"User:SDZeroBot/NPP sorting/History and Society/Education",					true},
	{"User:SDZeroBot/NPP sorting/Culture/Media/Software",							true},
	{"User:SDZeroBot/NPP sorting/History and Society/Politics and government",		true},
	{"User:SDZeroBot/NPP sorting/Geography/Regions/Asia/Central Asia",				true},
	{"User:SDZeroBot/NPP sorting/Culture/Media/Books",								true},
	{"User:SDZeroBot/NPP sorting/Geography/Regions/Europe/Western Europe",			true},
	{"User:SDZeroBot/NPP sorting/Geography/Regions/Europe/Southern Europe",			true},
	{"User:SDZeroBot/NPP sorting/Geography/Regions/Europe/Eastern Europe",			true},
	{"User:SDZeroBot/NPP sorting/Geography/Regions/Europe",							true},
	{"User:SDZeroBot/NPP sorting/Geography/Regions/Africa/Eastern Africa",			true},
	{"User:SDZeroBot/NPP sorting/Geography/Regions/Asia/West Asia",					true},
	{"User:SDZeroBot/NPP sorting/STEM/Chemistry",									true},
	{"User:SDZeroBot/NPP sorting/Culture/Visual arts",								true},
	{"User:SDZeroBot/NPP sorting/History and Society/Society",						true},
	{"User:SDZeroBot/NPP sorting/Culture/Philosophy and religion",					true},
	{"User:SDZeroBot/NPP sorting/Geography/Regions/Africa/Southern Africa",			true},
	{"User:SDZeroBot/NPP sorting/Unsorted",											true},
	{"User:SDZeroBot/NPP sorting/Geography/Regions/Asia",							true},
	{"User:SDZeroBot/NPP sorting/Geography/Regions/Africa/Northern Africa",			true},
	{"User:SDZeroBot/NPP sorting/Geography/Regions/Asia/North Asia",				true},
	{"User:SDZeroBot/NPP sorting/Geography/Regions/Americas/Central America",		true},
	{"User:SDZeroBot/NPP sorting/Culture/Media/Video games",						true},
	{"User:SDZeroBot/NPP sorting/Culture/Media/Radio",								true},
	{"User:SDZeroBot/NPP sorting/STEM/Physics",										true},
	{"User:SDZeroBot/NPP sorting/STEM/Technology",									true},
	{"User:SDZeroBot/NPP sorting/Geography/Regions/Europe/Northern Europe",			true},
	{"User:SDZeroBot/NPP sorting/Culture/Food and drink",							true},
	{"User:SDZeroBot/NPP sorting/STEM/Libraries & Information",						true},
	{"User:SDZeroBot/NPP sorting/header",											true},
	};

// Z:\Wikipedia\AWB\Monkbot_tasks\Monkbot_task_20_replace_lang-xx_templates.cs