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 (3 C; 362,621 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}}
).
- Lang-ast-leo – wrapper template around
{{lang}}
;leo
not a valid IANA extlang - Lang-bcs-Latn-Cyrl – wrapper template around
{{lang-sh-Latn-Cyrl}}
; custom|label=
; invalid language subtag:bcs
is the language subtag for Kohumono, a Nigerian, not a Serbo-Croatian language - Lang-bcs – wrapper template around
{{lang-sh}}
; custom|label=
; invalid language subtag:bcs
- Lang-cnr-Cyrl – custom
|label=
- Lang-cnr-Cyrl-Latn – wrapper template around
{{lang-x2}}
- Lang-cnr-Latn – custom
|label=
- Lang-cnr-Latn-Cyrl – wrapper template around
{{lang-x2}}
- Lang-crh3 – wrapper template around
{{lang}}
- Lang-est-sea – uses
{{language with name}}
for Seto dialect of Estonian;sea
not a valid IANA extlang subtag - Lang-fra-frc – uses
{{language with name}}
for Franc-Comtois of France and Switzerland;fra
not a valid IANA language subtag;frc
not a valid IANA extlang subtag - Lang-grc-gre – wrapper template around
{{lang}}
and{{transl}}
;gre
not a valid IANA extlang subtag - Lang-hmd – html and wikitext; does not use Module:Lang
- Lang-ka – uses
{{language with name}}
and{{ka-translit}}
- Lang-ku-Arab – uses
{{language with name}}
and{{script/Arabic}}
- Lang-lmo-cr – invalid IANA region subtag:
cr
is Costa Rica, not the the Province of Cremona in Italy - Lang-lmo-IT – uses
{{language with name}}
for the Bergamasque dialect - Lang-mnc – uses
{{language with name}}
and supports two forms of transliteration - Lang-my-Mymr – uses
{{lang}}
and{{Script/Mymr}}
- Lang-my-name-MLCTS – uses
{{lang}}
and links to MLC Transcription System - Lang-pun – deprecated
- Lang-rus – uses
{{language with name}}
,{{transliteration}}
, and{{IPA}}
- Lang-sa2 – uses
{{lang}}
- Lang-sh-Cyrl-Latn – wrapper template around
{{lang-x2}}
- Lang-sh-Cyrl – custom
|label=
- Lang-sh-Latn-Cyrl – wrapper template around
{{lang-x2}}
- Lang-sh-Latn – custom
|label=
- Lang-sq-definite – plain wikitext
- Lang-sr-Cyrl-Latn – wrapper template around
{{lang-x2}}
- Lang-sr-Cyrl – custom
|label=
- Lang-sr-Latn-Cyrl – wrapper template around
{{lang-x2}}
- Lang-sr-Latn – custom
|label=
- Lang-su-fonts – plain wikitext;
fonts
not a valid IANA script subtag - Lang-uniturk – no IANA language subtag;
uniturk
not a valid IANA variant subtag; uses{{lang}}
- Lang-uz-Cyrl-Latn – wrapper template around
{{lang-x2}}
- Lang-uz-Latn-Cyrl – wrapper template around
{{lang-x2}}
- Lang-uz-Latn – custom
|label=
- Lang-vi-chunom – plain wikitext; uses
{{Vi-nom}}
for custom styling - Lang-vi-hantu – plain wikitext; uses
{{Vi-nom}}
for custom styling - Lang-zh – uses Module:Lang-zh
- Lang-1ca – wrapper template around
{{lang}}
;1ca
not a valid IANA language subtag - Moldovan Cyrillic – custom
|label=
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";
return ArticleText;
}
if (page_skip_list_t.ContainsKey (ArticleTitle))
{
Skip = true;
Summary = "Page in page-skip list";
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-Z\-]+))(\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
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
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
}
//===========================<< S T A T I C D A T A >>======================================================
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)"
""
);
//---------------------------< 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-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-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-my-Mymr", true},
{"Lang-my-name-MLCTS", true},
{"Lang-rus", 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-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-Latn", true}, // to {{lang}}; not a {{lang-??}} template
{"Lang-mnw-fonts", true}, // to Script/mnw-Mymr; not a {{lang-??}} template
{"Lang-seto", true}, // to lang-est-sea
{"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]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"}, // 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-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-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
//----------< 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},
};
//---------------------------< 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!"
{"User:SDZeroBot/NPP sorting/Culture/Media", true}, // updated by SDZeroBot
{"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
};
// Z:\Wikipedia\AWB\Monkbot_tasks\Monkbot_task_20_replace_lang-xx_templates.cs